使用标签控制对 Elastic Beanstalk 资源的访问 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用标签控制对 Elastic Beanstalk 资源的访问

AWS Identity and Access Management(IAM)用户策略语句中的条件是您用于指定 Elastic Beanstalk 操作需要完成的资源的权限的语法的一部分。有关指定策略语句条件的详细信息,请参阅Elastic Beanstalk 操作的资源和条件。使用条件中的标签是控制对资源和请求的访问的一种方法。有关标记 Elastic Beanstalk 资源的信息,请参阅标记 Elastic Beanstalk 应用程序资源。本主题讨论了基于标签的访问控制。

在设计 IAM 策略时,您可以通过授予对特定资源的访问权限来设置精细权限。但随着您管理的资源数量的增加,此任务会变得日益复杂。标记资源并在策略声明条件中使用标签可以简化这一任务。您可以向具有特定标签的任何资源批量授予访问权限。然后,在创建期间或之后,您可以将此标签反复应用到相关资源。

标签可以附加到资源,也可以从请求传入支持标签的服务。在 Elastic Beanstalk 中,资源可以具有标签,而且某些操作可以包括标签。在创建 IAM 策略时,您可以使用标签条件键来控制:

  • 哪些用户可以基于环境已有的标签对环境执行操作。

  • 哪些标签可以在操作的请求中传递。

  • 是否特定标签键可在请求中使用。

有关标签条件键的完整请求和语义,请参阅《IAM 用户指南》中的使用标签控制访问

以下示例演示如何为 Elastic Beanstalk 用户指定策略中的标签条件。

例 1:基于请求中的标签限制操作

Elastic Beanstalk AdministratorAccess-AWSElasticBeanstalk 托管式用户策略为用户提供对任意 Elastic Beanstalk 托管式资源执行任意 Elastic Beanstalk 操作的无限权限。

以下策略限制此权力并拒绝未经授权的用户创建 Elastic Beanstalk 生产环境的权限。为此,如果请求指定一个名为 CreateEnvironment 的带有值为 stagegamma 的标签,则它会拒绝 prod 操作。此外,该策略还通过不允许标签修改操作来阻止这些未经授权的用户篡改生产环境的阶段以包含这些的标签值或完全删除 stage 标签。除托管用户策略外,客户的管理员还必须将此 IAM 策略附加到未经授权的 IAM 用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "elasticbeanstalk:CreateEnvironment", "elasticbeanstalk:AddTags" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/stage": ["gamma", "prod"] } } }, { "Effect": "Deny", "Action": [ "elasticbeanstalk:RemoveTags" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["stage"] } } } ] }
例 2:基于资源标签限制操作

Elastic Beanstalk AdministratorAccess-AWSElasticBeanstalk 托管式用户策略为用户提供对任意 Elastic Beanstalk 托管式资源执行任意 Elastic Beanstalk 操作的无限权限。

以下策略限制此权力并拒绝未经授权的用户对 Elastic Beanstalk 生产环境执行操作的权限。为此,如果环境具有名为 stage 的带有值 gammaprod 的标签,则它会拒绝特定操作。除托管用户策略外,客户的管理员还必须将此 IAM 策略附加到未经授权的 IAM 用户。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "elasticbeanstalk:AddTags", "elasticbeanstalk:RemoveTags", "elasticbeanstalk:DescribeEnvironments", "elasticbeanstalk:TerminateEnvironment", "elasticbeanstalk:UpdateEnvironment", "elasticbeanstalk:ListTagsForResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/stage": ["gamma", "prod"] } } } ] }
例 3:基于请求中的标签允许操作

以下策略授予用户创建 Elastic Beanstalk 开发应用程序的权限。

为此,如果请求指定一个名为 stage 的带有值为 development 的标签,则它允许 CreateApplicationAddTags 操作。aws:TagKeys 条件可确保用户无法添加其他标签键。特别是,它能确保 stage 标签键的大小写正确。请注意,此策略对于未附加 Elastic Beanstalk AdministratorAccess-AWSElasticBeanstalk 托管式用户策略的 IAM 用户非常有用。此托管策略为用户提供对任意 Elastic Beanstalk 托管资源执行任意 Elastic Beanstalk 操作的无限权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticbeanstalk:CreateApplication", "elasticbeanstalk:AddTags" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/stage": "development" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["stage"] } } } ] }
例 4:基于资源标签允许操作

以下策略授予用户对 Elastic Beanstalk 开发应用程序执行操作以及获取其相关信息的权限。

为此,如果应用程序具有名为 stage、值为 development 的标签,则它允许执行特定操作。aws:TagKeys 条件可确保用户无法添加其他标签键。特别是,它能确保 stage 标签键的大小写正确。请注意,此策略对于未附加 Elastic Beanstalk AdministratorAccess-AWSElasticBeanstalk 托管式用户策略的 IAM 用户非常有用。此托管策略为用户提供对任意 Elastic Beanstalk 托管资源执行任意 Elastic Beanstalk 操作的无限权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticbeanstalk:UpdateApplication", "elasticbeanstalk:DeleteApplication", "elasticbeanstalk:DescribeApplications" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/stage": "development" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["stage"] } } } ] }