AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

基于资源权限的示例策略

本部分介绍了一个使用案例,用于说明如何控制 Elastic Beanstalk 操作(只访问特定 Elastic Beanstalk 资源)的用户权限。我们将介绍支持此使用案例的示例策略。有关 Elastic Beanstalk 资源的详细信息策略,请参阅创建自定义用户策略。有关将策略附加到用户和组的信息,请转到 使用 AWS Identity and Access Management 中的管理 IAM 策略

在使用案例中,Example Corp. 是一家为两类不同客户开发应用程序的小型咨询公司。John 是开发经理,负责监管 app1 和 app2 这两种 Elastic Beanstalk 应用程序的开发。John 会对这两种应用程序执行一些开发和测试工作,且只有他能为这两种应用程序更新生产环境。对于 app1 和 app2,他需要拥有以下权限:

  • 查看应用程序、应用程序版本、环境和配置模板

  • 创建应用程序版本并将它们部署到过渡环境

  • 更新生产环境

  • 创建和终止环境

Jill 是一名测试人员,为监控和测试这两种应用程序,她需要拥有以下资源的查看权限:应用程序、应用程序版本、环境和配置模板。但是,她不应具有更改任何 Elastic Beanstalk 资源的权限。

Jack 是 app1 的开发人员,需要拥有查看所有 app1 资源的权限,且还需要为 app1 创建应用程序版本并将应用程序版本部署到过渡环境。

Joe 是 Example Corp 的 AWS 账户管理员。他已为 John、Jill 和 Jack 创建了 IAM 用户并将以下策略附加到这些用户,从而针对 app1 和 app2 应用程序授予相应权限。

例 1:允许 John 对 app1 和 app2 执行开发、测试和部署操作的策略

我们已将 John 的策略细分成三项独立策略,以便易于读取和管理它们。通过结合这三项策略,可授予 John 对这两种应用程序执行 Elastic Beanstalk 操作所需的权限。

第一项策略指定了针对 Auto Scaling、Amazon S3、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS 和 AWS CloudFormation 的操作。在创建环境时,Elastic Beanstalk 依靠这些附加服务来预配置底层资源。

请注意,此策略是一个示例。它为 AWS 产品提供了宽泛的权限,Elastic Beanstalk 可使用这些权限管理应用程序和环境。例如,ec2:* 允许 IAM 用户对 AWS 账户中的任何 Amazon EC2 资源执行任何操作。这些权限并不限于与 Elastic Beanstalk 配合使用的资源。作为最佳实践,您仅应向个人授予他们履行职责所需的权限。

{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ec2:*", "ecs:*", "ecr:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "s3:*", "sns:*", "cloudformation:*", "dynamodb:*", "rds:*", "sqs:*", "logs:*", "iam:GetPolicyVersion", "iam:GetRole", "iam:PassRole", "iam:ListRolePolicies", "iam:ListAttachedRolePolicies", "iam:ListInstanceProfiles", "iam:ListRoles", "iam:ListServerCertificates", "acm:DescribeCertificate", "acm:ListCertificates", "codebuild:CreateProject", "codebuild:DeleteProject", "codebuild:BatchGetBuilds", "codebuild:StartBuild" ], "Resource":"*" } ] }

第二项策略指定了 John 可以对 app1 和 app2 资源执行的 Elastic Beanstalk 操作。AllCallsInApplications 语句允许对 app1 和 app2 内的所有资源执行任何 Elastic Beanstalk 操作 ("elasticbeanstalk:*")(例如,elasticbeanstalk:CreateEnvironment)。AllCallsOnApplications 语句允许对 app1 和 app2 应用程序资源执行任何 Elastic Beanstalk 操作 ("elasticbeanstalk:*")(例如,elasticbeanstalk:DescribeApplicationselasticbeanstalk:UpdateApplication 等)。AllCallsOnSolutionStacks 语句允许对解决方案堆栈资源执行任何 Elastic Beanstalk 操作 ("elasticbeanstalk:*")(例如,elasticbeanstalk:ListAvailableSolutionStacks)。

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllCallsInApplications", "Action":[ "elasticbeanstalk:*" ], "Effect":"Allow", "Resource":[ "*" ], "Condition":{ "StringEquals":{ "elasticbeanstalk:InApplication":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app1", "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app2" ] } } }, { "Sid":"AllCallsOnApplications", "Action":[ "elasticbeanstalk:*" ], "Effect":"Allow", "Resource":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app1", "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app2" ] }, { "Sid":"AllCallsOnSolutionStacks", "Action":[ "elasticbeanstalk:*" ], "Effect":"Allow", "Resource":[ "arn:aws-cn:elasticbeanstalk:us-west-2::solutionstack/*" ] } ] }

第三项策略指定了第二项策略需要获取权限才能完成这些 Elastic Beanstalk 操作的 Elastic Beanstalk 操作。AllNonResourceCalls 语句允许执行 elasticbeanstalk:CheckDNSAvailability 操作 (即调用 elasticbeanstalk:CreateEnvironment 所需的操作) 及其他操作。此语句还允许执行 elasticbeanstalk:CreateStorageLocation 操作 (即 elasticbeanstalk:CreateApplicationelasticbeanstalk:CreateEnvironment 所需的操作) 及其他操作。

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllNonResourceCalls", "Action":[ "elasticbeanstalk:CheckDNSAvailability", "elasticbeanstalk:CreateStorageLocation" ], "Effect":"Allow", "Resource":[ "*" ] } ] }

例 2:允许 Jill 对 app1 和 app2 进行测试和监控的策略

我们已将 Jill 的策略细分成三项独立策略,以便易于读取和管理它们。通过结合这三项策略,可授予 Jill 对这两种应用程序执行 Elastic Beanstalk 操作所需的权限。

第一项策略指定了针对 Auto Scaling、Amazon S3、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS 和 AWS CloudFormation 的 Describe*List*Get* 操作(适用于非早期容器类型),因此 Elastic Beanstalk 操作可以检索有关 app1 和 app2 应用程序的底层资源的信息。

{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ec2:Describe*", "elasticloadbalancing:Describe*", "autoscaling:Describe*", "cloudwatch:Describe*", "cloudwatch:List*", "cloudwatch:Get*", "s3:Get*", "s3:List*", "sns:Get*", "sns:List*", "rds:Describe*", "cloudformation:Describe*", "cloudformation:Get*", "cloudformation:List*", "cloudformation:Validate*", "cloudformation:Estimate*" ], "Resource":"*" } ] }

第二项策略指定了 Jill 可以对 app1 和 app2 资源执行的 Elastic Beanstalk 操作。AllReadCallsInApplications 语句允许 Jill 调用 Describe* 操作和环境信息操作。AllReadCallsOnApplications 语句允许 Jill 对 app1 和 app2 应用程序资源调用 DescribeApplicationsDescribeEvents 操作。AllReadCallsOnSolutionStacks 语句允许对解决方案堆栈资源的执行查看操作 (ListAvailableSolutionStacksDescribeConfigurationOptionsValidateConfigurationSettings)。

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllReadCallsInApplications", "Action":[ "elasticbeanstalk:Describe*", "elasticbeanstalk:RequestEnvironmentInfo", "elasticbeanstalk:RetrieveEnvironmentInfo" ], "Effect":"Allow", "Resource":[ "*" ], "Condition":{ "StringEquals":{ "elasticbeanstalk:InApplication":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app1", "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app2" ] } } }, { "Sid":"AllReadCallsOnApplications", "Action":[ "elasticbeanstalk:DescribeApplications", "elasticbeanstalk:DescribeEvents" ], "Effect":"Allow", "Resource":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app1", "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app2" ] }, { "Sid":"AllReadCallsOnSolutionStacks", "Action":[ "elasticbeanstalk:ListAvailableSolutionStacks", "elasticbeanstalk:DescribeConfigurationOptions", "elasticbeanstalk:ValidateConfigurationSettings" ], "Effect":"Allow", "Resource":[ "arn:aws-cn:elasticbeanstalk:us-west-2::solutionstack/*" ] } ] }

第三项策略指定了第二项策略需要获取权限才能完成这些 Elastic Beanstalk 操作的 Elastic Beanstalk 操作。AllNonResourceCalls 语句允许执行 elasticbeanstalk:CheckDNSAvailability 操作,这是一些查看操作所需要的操作。

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllNonResourceCalls", "Action":[ "elasticbeanstalk:CheckDNSAvailability" ], "Effect":"Allow", "Resource":[ "*" ] } ] }

例 3:允许 Jack 访问 app1,从而可以执行测试、监控、创建应用程序版本并将它部署到过渡环境等操作的策略

我们已将 Jack 的策略细分成三项独立策略,以便易于读取和管理它们。通过结合这三项策略,可授予 Jack 对 app1 资源执行 Elastic Beanstalk 操作所需的权限。

第一项策略指定了针对 Auto Scaling、Amazon S3、Amazon EC2、CloudWatch、Amazon SNS、Elastic Load Balancing、Amazon RDS 和 AWS CloudFormation 的操作(适用于非早期容器类型),因此 Elastic Beanstalk 操作可以查看和使用 app1 的底层资源。有关受支持的非早期容器类型的列表,请参阅“为什么一些容器类型会被标记为早期容器?”。

请注意,此策略是一个示例。它为 AWS 产品提供了宽泛的权限,Elastic Beanstalk 可使用这些权限管理应用程序和环境。例如,ec2:* 允许 IAM 用户对 AWS 账户中的任何 Amazon EC2 资源执行任何操作。这些权限并不限于与 Elastic Beanstalk 配合使用的资源。作为最佳实践,您仅应向个人授予他们履行职责所需的权限。

{ "Version": "2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ec2:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "s3:*", "sns:*", "rds:*", "cloudformation:*" ], "Resource":"*" } ] }

第二项策略指定了 Jack 可以对 app1 资源执行的 Elastic Beanstalk 操作。

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllReadCallsAndAllVersionCallsInApplications", "Action":[ "elasticbeanstalk:Describe*", "elasticbeanstalk:RequestEnvironmentInfo", "elasticbeanstalk:RetrieveEnvironmentInfo", "elasticbeanstalk:CreateApplicationVersion", "elasticbeanstalk:DeleteApplicationVersion", "elasticbeanstalk:UpdateApplicationVersion" ], "Effect":"Allow", "Resource":[ "*" ], "Condition":{ "StringEquals":{ "elasticbeanstalk:InApplication":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app1" ] } } }, { "Sid":"AllReadCallsOnApplications", "Action":[ "elasticbeanstalk:DescribeApplications", "elasticbeanstalk:DescribeEvents" ], "Effect":"Allow", "Resource":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app1" ] }, { "Sid":"UpdateEnvironmentInApplications", "Action":[ "elasticbeanstalk:UpdateEnvironment" ], "Effect":"Allow", "Resource":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:environment/app1/app1-staging*" ], "Condition":{ "StringEquals":{ "elasticbeanstalk:InApplication":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:application/app1" ] }, "StringLike":{ "elasticbeanstalk:FromApplicationVersion":[ "arn:aws-cn:elasticbeanstalk:us-west-2:123456789012:applicationversion/app1/*" ] } } }, { "Sid":"AllReadCallsOnSolutionStacks", "Action":[ "elasticbeanstalk:ListAvailableSolutionStacks", "elasticbeanstalk:DescribeConfigurationOptions", "elasticbeanstalk:ValidateConfigurationSettings" ], "Effect":"Allow", "Resource":[ "arn:aws-cn:elasticbeanstalk:us-west-2::solutionstack/*" ] } ] }

第三项策略指定了第二项策略需要获取权限才能完成这些 Elastic Beanstalk 操作的 Elastic Beanstalk 操作。AllNonResourceCalls 语句允许执行 elasticbeanstalk:CheckDNSAvailability 操作 (即调用 elasticbeanstalk:CreateEnvironment 所需的操作) 及其他操作。此语句还允许执行 elasticbeanstalk:CreateStorageLocation 操作 (即 elasticbeanstalk:CreateEnvironment 所需的操作) 及其他操作。

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllNonResourceCalls", "Action":[ "elasticbeanstalk:CheckDNSAvailability", "elasticbeanstalk:CreateStorageLocation" ], "Effect":"Allow", "Resource":[ "*" ] } ] }