

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

# 使用标签控制对 CodeArtifact 资源的访问权限
<a name="tag-based-access-control"></a>

IAM 用户策略声明中的条件是您用来指定 CodeArtifact 操作所需资源权限的语法的一部分。使用条件中的标签是控制对资源和请求的访问的一种方法。有关为 CodeArtifact 资源添加标签的信息，请参阅[为资源添加标签](tag-resources.md)。本主题讨论了基于标签的访问控制。

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

标签可以附加到资源，也可以从请求传入支持标签的服务。在中 CodeArtifact，资源可以有标签，有些操作可以包含标签。在创建 IAM 策略时，您可以使用标签条件键来控制：
+ 基于资源已有的标签，哪些用户可以对域或存储库资源执行操作。
+ 哪些标签可以在操作的请求中传递。
+ 特定的标签键是否能在请求中使用。

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

**重要**  
对资源使用标签来限制操作时，标签必须位于对其执行了操作的资源上。例如，要使用标签拒绝 `DescribeRepository` 权限，标签必须位于每个存储库上，而不是域上。[AWS CodeArtifact 权限参考](auth-and-access-control-permissions-reference.md)有关中的操作 CodeArtifact 以及它们对哪些资源进行操作的列表，请参阅。

## 基于标签的访问控制示例
<a name="tag-based-access-control-examples"></a>

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

**Example 1：基于请求中的标签限制操作**  
`AWSCodeArtifactAdminAccess`托管用户策略为用户提供了对任何资源执行任何 CodeArtifact 操作的无限权限。  
除非请求包含某些标签，否则以下策略会限制此权限并拒绝未经授权的用户创建存储库的权限。为此，如果请求未指定一个名为 `costcenter`、值为 `1` 或 `2` 的标签，则拒绝 `CreateRepository` 操作。除托管用户策略外，客户的管理员还必须将此 IAM 策略附加到未经授权的 IAM 用户。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "codeartifact:CreateRepository",
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:RequestTag/costcenter": "true"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": "codeartifact:CreateRepository",
      "Resource": "*",
      "Condition": {
          "ForAnyValue:StringNotEquals": {
              "aws:RequestTag/costcenter": [
                  "1",
                  "2"
              ]
          }
      }
  }
  ]
}
```

**Example 2：基于资源标签限制操作**  
`AWSCodeArtifactAdminAccess`托管用户策略为用户提供了对任何资源执行任何 CodeArtifact 操作的无限权限。  
以下策略限制此权限并拒绝未经授权的用户对指定域中的存储库执行操作的权限。为此，如果资源具有名为 `Key1` 的带有值 `Value1` 或 `Value2` 之一的标签，那么它会拒绝某些操作。（使用 `aws:ResourceTag` 条件键，基于资源上的标签控制对这些资源的访问。） 除托管用户策略外，客户的管理员还必须将此 IAM 策略附加到未经授权的 IAM 用户。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codeartifact:TagResource",
        "codeartifact:UntagResource",
        "codeartifact:DescribeDomain",
        "codeartifact:DescribeRepository",
        "codeartifact:PutDomainPermissionsPolicy",
        "codeartifact:PutRepositoryPermissionsPolicy",
        "codeartifact:ListRepositoriesInDomain",
        "codeartifact:UpdateRepository",
        "codeartifact:ReadFromRepository",
        "codeartifact:ListPackages",
        "codeartifact:ListTagsForResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Key1": ["Value1", "Value2"]
        }
      }
    }
  ]
}
```

**Example 3：基于资源标签允许操作**  
以下策略授予用户对中的存储库和包执行操作和获取相关信息的权限 CodeArtifact。  
为此，如果存储库具有名为 `Key1`、值为 `Value1` 的标签，则允许特定操作。（`aws:RequestTag` 条件键用于控制可以通过 IAM 请求传递哪些标签。） `aws:TagKeys` 条件确保标签键区分大小写。对于未附加 `AWSCodeArtifactAdminAccess` 托管用户策略的 IAM 用户，此策略非常有用。托管策略为用户提供了对任何资源执行任何 CodeArtifact 操作的无限权限。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeartifact:UpdateRepository",
        "codeartifact:DeleteRepository",
        "codeartifact:ListPackages"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Key1": "Value1"
        }
      }
    }
  ]
}
```

**Example 4：基于请求中的标签允许操作**  
以下策略授予用户在中的指定域中创建存储库的权限 CodeArtifact。  
为此，如果请求中的创建资源 API 指定一个名为 `Key1`、值为 `Value1` 的标签，则允许 `CreateRepository` 和 `TagResource` 操作。（`aws:RequestTag` 条件键用于控制可以通过 IAM 请求传递哪些标签。） `aws:TagKeys` 条件确保标签键区分大小写。对于未附加 `AWSCodeArtifactAdminAccess` 托管用户策略的 IAM 用户，此策略非常有用。托管策略为用户提供了对任何资源执行任何 CodeArtifact 操作的无限权限。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codeartifact:CreateRepository",
        "codeartifact:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/Key1": "Value1"
        }
      }
    }
  ]
}
```