

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

# 使用标签控制对 Elastic Beanstalk 资源的访问
<a name="AWSHowTo.iam.policies.access-tags"></a>

本主题介绍基于标签的访问控制如何帮助您创建和管理 IAM 策略。

我们可以使用 IAM 用户策略语句中的条件来配置 Elastic Beanstalk 对资源的访问权限。要了解策略语句条件的更多信息，请参阅 [Elastic Beanstalk 操作的资源和条件](AWSHowTo.iam.policies.actions.md)。使用条件中的标签是控制对资源和请求的访问的一种方法。有关标记 Elastic Beanstalk 资源的信息，请参阅[标记 Elastic Beanstalk 应用程序资源](applications-tagging-resources.md)。

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

标签可以附加到资源，也可以从请求传入支持标签的服务。在 Elastic Beanstalk 中，资源可以具有标签，而且某些操作可以包括标签。在创建 IAM 策略时，您可以使用标签条件键来控制以下条件：
+ 哪些用户可以基于环境已有的标签对环境执行操作。
+ 哪些标签可以在操作的请求中传递。
+ 是否特定标签键可在请求中使用。

有关标签条件键的完整请求和语义，请参阅《IAM 用户指南》**中的[使用标签控制访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_tags.html)。

## 策略中的标签条件示例
<a name="AWSHowTo.iam.policies.access-tags.examples"></a>

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

**Example 1：基于请求中的标签限制操作**  <a name="example_policy_tags.deny_by_request_tag"></a>
Elastic Bean **AdministratorAccessstalk-AWSElastic Beanstalk** 托管用户策略为用户提供了对任何 Elastic BeanStalk 管理的资源执行任何 Elastic Beanstalk 操作的无限权限。  
以下策略限制此权力并拒绝未经授权的用户创建 Elastic Beanstalk 生产环境的权限。为此，如果请求指定一个名为 `stage` 的带有值为 `gamma` 或 `prod` 的标签，则它会拒绝 `CreateEnvironment` 操作。此外，该策略还通过不允许标签修改操作来阻止这些未经授权的用户篡改生产环境的阶段以包含这些的标签值或完全删除 `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"]
        }
      }
    }
  ]
}
```

**Example 2：基于资源标签限制操作**  <a name="example_policy_tags.deny_by_resource_tag"></a>
Elastic Bean **AdministratorAccessstalk-AWSElastic Beanstalk** 托管用户策略为用户提供了对任何 Elastic BeanStalk 管理的资源执行任何 Elastic Beanstalk 操作的无限权限。  
以下策略限制此权力并拒绝未经授权的用户对 Elastic Beanstalk 生产环境执行操作的权限。为此，如果环境具有名为 `stage` 的带有值 `gamma` 或 `prod` 的标签，则它会拒绝特定操作。除托管用户策略外，客户的管理员还必须将此 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"]
        }
      }
    }
  ]
}
```

**Example 3：基于请求中的标签允许操作**  <a name="example_policy_tags.allow_by_request_tag"></a>
以下策略授予用户创建 Elastic Beanstalk 开发应用程序的权限。  
为此，如果请求指定一个名为 `stage` 的带有值 `development` 的标签，则它允许 `CreateApplication` 和 `AddTags` 操作。`aws:TagKeys` 条件可确保用户无法添加其他标签键。特别是，它能确保 `stage` 标签键的大小写正确。请注意，此策略对于未附加 Elastic Beanstalk-B **AWSElasticeanstalk AdministratorAccess** 托管用户策略的 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"]
        }
      }
    }
  ]
}
```

**Example 4：基于资源标签允许操作**  <a name="example_policy_tags.allow_by_resource_tag"></a>
以下策略授予用户对 Elastic Beanstalk 开发应用程序执行操作以及获取其相关信息的权限。  
为此，如果应用程序具有名为 `stage`、值为 `development` 的标签，则它允许执行特定操作。`aws:TagKeys` 条件可确保用户无法添加其他标签键。特别是，它能确保 `stage` 标签键的大小写正确。请注意，此策略对于未附加 Elastic Beanstalk-B **AWSElasticeanstalk AdministratorAccess** 托管用户策略的 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"]
        }
      }
    }
  ]
}
```