

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

# 使用标签控制对 AWS CodeBuild 资源的访问权限
<a name="auth-and-access-control-using-tags"></a>

IAM 策略声明中的条件是语法的一部分，您可以使用该语法为 CodeBuild 基于项目的操作指定权限。您可以创建一个策略（该策略基于与项目关联的标签来允许或拒绝对这些项目执行操作），然后将该策略应用于为管理用户而配置的 IAM 组。有关使用控制台或将标签应用于项目的信息 AWS CLI，请参阅[在 中创建构建项目AWS CodeBuild](create-project.md)。有关使用 CodeBuild SDK 应用标签的信息，请参阅 *CodeBuildAPI 参考*中的[CreateProject ](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_CreateProject.html#API_CreateProject_RequestSyntax)和[标签](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_Tag.html)。有关使用标签控制 AWS 资源访问的信息，请参阅 *IAM 用户指南*中的[使用 AWS 资源标签控制对资源的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)权限。

**重要**  
使用预留容量特征时，同一账户内的其他项目可以访问实例集实例中缓存的数据，包括源文件、Docker 层和 buildspec 中指定的缓存目录。这是设计使然，让同一账户内的项目可以共享实例集实例。

**Example 示例 1：根据资源标签限制 CodeBuild 项目操作**  
 以下示例拒绝对用键 `Environment`、键值 `Production` 标记的项目执行所有 `BatchGetProjects` 操作。除了托管用户策略，用户的管理员还必须将此 IAM 策略附加到未经授权的用户。`aws:ResourceTag` 条件键用于基于其标签控制对资源的访问。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codebuild:BatchGetProjects"
      ],
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:ResourceTag/Environment": "Production"
        }
      }
    }
  ]
}
```

**Example 示例 2：根据请求标签限制 CodeBuild 项目操作**  
如果请求包含键为 `Environment`、键值为 `Production` 的标签，则以下策略拒绝用户对 `CreateProject` 操作的权限。此外，该策略将阻止这些未经授权的用户修改项目，方法是使用 `aws:TagKeys` 条件键在请求包含键为 `Environment` 的标签时不允许 `UpdateProject`。除了托管用户策略之外，管理员还必须将此 IAM 策略附加到无权执行这些操作的用户。`aws:RequestTag` 条件键用于控制可以在 IAM 请求中传递哪些标签    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codebuild:CreateProject"
      ],
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:RequestTag/Environment": "Production"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "codebuild:UpdateProject"
      ],
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": ["Environment"]
        }
      }
    }
  ]
}
```

**Example 示例 3：根据资源标签拒绝或允许对报告组执行操作**  
您可以根据与 CodeBuild 资源（项目和报告组）关联的 AWS 标签创建允许或拒绝对这些资源执行操作的策略，然后将这些策略应用于您为管理用户而配置的 IAM 群组。例如，您可以创建一个策略，拒绝对 AWS 标签键`Status`和密钥值为的任何报告组 CodeBuild 执行所有操作`Secret`，然后将该策略应用于您为普通开发者创建的 IAM 群组 (*Developers*)。然后，您需要确保在这些带标签的报告组上工作的开发人员不是该常规*Developers*组的成员，而是属于未应用限制性策略的其他 IAM 群组 (`SecretDevelopers`)。  
以下示例拒绝对标有密钥`Status`和键值的报表组 CodeBuild 执行所有操作`Secret`：    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "codebuild:BatchGetReportGroups",
        "codebuild:CreateReportGroup",
        "codebuild:DeleteReportGroup",
        "codebuild:ListReportGroups",
        "codebuild:ListReportsForReportGroup",
        "codebuild:UpdateReportGroup"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "aws:RequestedRegion": "us-east-1"
        }
      }
    }
  ]
}
```

**Example 示例 4：将 CodeBuild 操作限制为 AWSCodeBuildDeveloperAccess 基于资源标签**  
您可以创建允许对未使用特定标签标记的所有报告组和项目执行 CodeBuild 操作的策略。例如，以下策略为除了使用指定标签标记的报告组和项目以外的所有其他报告组和项目提供与 [AWSCodeBuildDeveloperAccess](auth-and-access-control-iam-identity-based-access-control.md#developer-access-policy) 等效的权限：    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "codebuild:StartBuild",
            "codebuild:StopBuild",
            "codebuild:BatchGet*",
            "codebuild:GetResourcePolicy",
            "codebuild:DescribeTestCases",
            "codebuild:List*",
            "codecommit:GetBranch",
            "codecommit:GetCommit",
            "codecommit:GetRepository",
            "codecommit:ListBranches",
            "cloudwatch:GetMetricStatistics",
            "events:DescribeRule",
            "events:ListTargetsByRule",
            "events:ListRuleNamesByTarget",
            "logs:GetLogEvents",
            "s3:GetBucketLocation",
            "s3:ListAllMyBuckets"
         ],
         "Resource": "*",
         "Condition": {
            "StringNotEquals": {
               "aws:ResourceTag/Status": "Secret",
               "aws:ResourceTag/Team": "Saanvi"
            }
         }
      }
   ]
}
```