Elastic Beanstalk: позволяет пользователю развертывать

Я не могу понять, как разрешить другим сотрудникам моей компании развертываться на (тестовом) сервере с AWS Elastic Beanstalk.

На этой странице предлагается только глобальный контроль разрешений для ELB: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.iam.managed-policies.html

1 ответ

В блоге Rhys Godfrey, озаглавленном " Использование IAM для защиты приложений Elastic Beanstalk в AWS", есть несколько полезных рекомендаций.

У нас есть приложение Elastic Beanstalk и группа пользователей. Эта группа пользователей должна иметь возможность мониторинга и развертывания только в этой среде гибкого beanstalk, а также перезапуска или завершения экземпляра приложения. Они не должны иметь возможности изменять конфигурацию приложения или среды или удалять среду. Пользователь не должен иметь возможности влиять на другие приложения или сервисы AWS, но он может видеть подробности в других областях. Мы предполагаем, что пользователь будет использовать консоль AWS.

Я разместил здесь политику IAM для справки.

Хорошая вещь в его подходе состоит в том, что он учитывает среду приложения, ссылаясь на тег EC2 на экземплярах EG. Environment=testing, который вам требуется в вашем случае использования.

{  
   "Version":"2012-10-17",
   "Statement":[  
      {  
         "Sid":"ElasticBeanstalkEnvironmentPermissions",
         "Effect":"Allow",
         "Action":[  
            "elasticbeanstalk:DescribeEnvironmentResources",
            "elasticbeanstalk:DescribeEnvironments",
            "elasticbeanstalk:DescribeEvents",
            "elasticbeanstalk:RestartAppServer",
            "elasticbeanstalk:RetrieveEnvironmentInfo",
            "elasticbeanstalk:SwapEnvironmentCNAMEs",
            "elasticbeanstalk:UpdateEnvironment",
            "elasticbeanstalk:RequestEnvironmentInfo"
         ],
         "Resource":[  
            "arn:aws:elasticbeanstalk:eu-west-1:123xxxxxxxxx:environment/ApplicationName/*"
         ]
      },
      {  
         "Sid":"ElasticBeanstalkGlobalPermissions",
         "Effect":"Allow",
         "Action":[  
            "elasticbeanstalk:DescribeConfigurationOptions",
            "elasticbeanstalk:DescribeConfigurationSettings",
            "elasticbeanstalk:ListAvailableSolutionStacks",
            "elasticbeanstalk:ValidateConfigurationSettings",
            "elasticbeanstalk:CheckDNSAvailability",
            "elasticbeanstalk:CreateStorageLocation"
         ],
         "Resource":[  
            "*"
         ]
      },
      {  
         "Sid":"ElasticBeanstalkApplicationVersionPermissions",
         "Effect":"Allow",
         "Action":[  
            "elasticbeanstalk:CreateApplicationVersion",
            "elasticbeanstalk:DescribeApplicationVersions",
            "elasticbeanstalk:UpdateApplicationVersion"
         ],
         "Resource":[  
            "arn:aws:elasticbeanstalk:eu-west-1:123xxxxxxxxx:applicationversion/ApplicationName/*"
         ]
      },
      {  
         "Sid":"ElasticBeanstalkApplicationPermissions",
         "Effect":"Allow",
         "Action":[  
            "elasticbeanstalk:DescribeApplications",
            "elasticbeanstalk:UpdateApplication"
         ],
         "Resource":[  
            "arn:aws:elasticbeanstalk:eu-west-1:123xxxxxxxxx:application/ApplicationName"
         ]
      },
      {  
         "Sid":"Autoscaling",
         "Effect":"Allow",
         "Action":[  
            "autoscaling:SuspendProcesses",
            "autoscaling:Describe*",
            "autoscaling:ResumeProcesses"
         ],
         "Resource":"*"
      },
      {  
         "Sid":"Cloudwatch",
         "Effect":"Allow",
         "Action":[  
            "cloudwatch:Describe*",
            "cloudwatch:GetMetricStatistics",
            "cloudwatch:ListMetrics"
         ],
         "Resource":"*"
      },
      {  
         "Sid":"Cloudformation",
         "Effect":"Allow",
         "Action":[  
            "cloudformation:GetTemplate",
            "cloudformation:Describe*"
         ],
         "Resource":"*"
      },
      {  
         "Sid":"IAM",
         "Effect":"Allow",
         "Action":[  
            "iam:ListServerCertificates",
            "iam:ListInstanceProfiles"
         ],
         "Resource":"*"
      },
      {  
         "Sid":"S3ElasticBeanstalkBucket",
         "Action":[  
            "s3:AbortMultipartUpload",
            "s3:GetBucketAcl",
            "s3:GetBucketCORS",
            "s3:GetBucketLocation",
            "s3:GetBucketLogging",
            "s3:GetBucketNotification",
            "s3:GetBucketPolicy",
            "s3:GetBucketRequestPayment",
            "s3:GetBucketTagging",
            "s3:GetBucketVersioning",
            "s3:GetBucketWebsite",
            "s3:GetLifecycleConfiguration",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:GetObjectTorrent",
            "s3:GetObjectVersion",
            "s3:GetObjectVersionAcl",
            "s3:GetObjectVersionTorrent",
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:ListBucket",
            "s3:GetObject",
            "s3:DeleteObject"
         ],
         "Effect":"Allow",
         "Resource":[  
            "arn:aws:s3:::elasticbeanstalk-eu-west-1-123xxxxxxxxx",
            "arn:aws:s3:::elasticbeanstalk-eu-west-1-123xxxxxxxxx/*"
         ]
      },
      {  
         "Sid":"S3Global",
         "Effect":"Allow",
         "Action":"s3:ListAllMyBuckets",
         "Resource":"arn:aws:s3:::*"
      },
      {  
         "Sid":"S3ElasticBeanstalkShared",
         "Effect":"Allow",
         "Action":"s3:*",
         "Resource":[  
            "arn:aws:s3:::elasticbeanstalk-env-resources-eu-west-1",
            "arn:aws:s3:::elasticbeanstalk-env-resources-eu-west-1/*"
         ]
      },
      {  
         "Sid":"EC2Global",
         "Effect":"Allow",
         "Action":[  
            "ec2:Describe*"
         ],
         "Resource":[  
            "*"
         ]
      }
   ]
}

Вторая политика IAM обрабатывает экземпляры EC2 для данной среды:

{  
   "Version":"2012-10-17",
   "Statement":[  
      {  
         "Sid":"EC2EnvironmentInstances",
         "Effect":"Allow",
         "Action":[  
            "ec2:MonitorInstances",
            "ec2:UnmonitorInstances",
            "ec2:RebootInstances",
            "ec2:StopInstances"
         ],
         "Resource":[  
            "arn:aws:ec2:eu-west-1:123xxxxxxxxx:instance/*"
         ],
         "Condition":{  
            "StringEquals":{  
               "ec2:ResourceTag/elasticbeanstalk:environment-name":"EnvironmentName"
            }
         }
      }
   ]
}