

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用標籤控制對 AWS CodeBuild 資源的存取
<a name="auth-and-access-control-using-tags"></a>

IAM 政策陳述式中的條件是語法的一部分，可用來指定 CodeBuild 專案型動作的許可。您可以建立政策，允許或拒絕根據與這些專案相關聯的標籤對專案執行動作，然後將這些政策套用到您為管理使用者設定的 IAM 群組。如需使用 主控台或 將標籤套用至專案的資訊 AWS CLI，請參閱 [在 中建立建置專案 AWS CodeBuild](create-project.md)。如需有關使用 CodeBuild SDK 套用標籤的資訊，請參閱 *CodeBuild API 參考*中的 [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 layer 和 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` 動作的許可。此外，如果請求包含索引鍵為 `Environment` 的標籤，則政策會使用 `aws:TagKeys` 條件索引鍵來不允許 `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：根據資源標籤拒絕或允許報告群組上的動作**  
您可以根據與這些資源相關聯的 AWS 標籤，建立允許或拒絕 CodeBuild 資源 （專案和報告群組） 動作的政策，然後將這些政策套用至您為管理使用者所設定的 IAM 群組。例如，您可以建立一個政策，以拒絕具有 AWS 標籤索引鍵`Status`和 索引鍵值的任何報告群組上的 CodeBuild 動作`Secret`，然後將該政策套用到您為一般開發人員 (*開發人員*) 建立的 IAM 群組。然後，您需要確保處理這些標記報告群組的開發人員不是該一般*開發人員*群組的成員，而是屬於未套用限制性政策的不同 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"
            }
         }
      }
   ]
}
```