

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

# 中的身份和访问管理 AWS CodeBuild
<a name="auth-and-access-control"></a>

访问 AWS CodeBuild 需要凭证。这些证书必须具有访问 AWS 资源的权限，例如在 S3 存储桶中存储和检索构建项目以及查看 Amazon CloudWatch Logs 以获取构建。以下各节介绍如何使用 [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)(IAM) 和 CodeBuild 帮助保护对资源的访问：

# 管理 AWS CodeBuild 资源访问权限概述
<a name="auth-and-access-control-iam-access-control-identity-based"></a>

每个 AWS 资源都归一个 AWS 账户所有，创建或访问资源的权限受权限策略的约束。账户管理员可以向 IAM 身份（即：用户、组和角色）附加权限策略。

**注意**  
账户管理员（或管理员用户）是具有管理员权限的用户。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 最佳实操](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

在您授予权限时，您要决定谁将获得权限、这些人可以访问的资源以及可以对这些资源执行的操作。

**Topics**
+ [AWS CodeBuild 资源和运营](#arn-formats)
+ [了解资源所有权](#understanding-resource-ownership)
+ [管理对 资源的访问](#managing-access-resources)
+ [指定策略元素：操作、效果和主体](#actions-effects-principals)

## AWS CodeBuild 资源和运营
<a name="arn-formats"></a>

在中 AWS CodeBuild，主要资源是构建项目。在策略中，您可以使用 Amazon 资源名称 (ARN) 标识策略应用到的资源。构建也是资源，并且 ARNs 与之相关联。有关更多信息，请参阅中的 [Amazon 资源名称 (ARN) 和 AWS 服务命名空间](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。*Amazon Web Services 一般参考*


| 资源类型 | ARN 格式 | 
| --- | --- | 
| 构建项目 |  `arn:aws:codebuild:region-ID:account-ID:project/project-name`  | 
| 构建 |  `arn:aws:codebuild:region-ID:account-ID:build/build-ID`  | 
| 报告组 | arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name | 
| 报告 | arn:aws:codebuild:region-ID:account-ID:report/report-ID | 
| Fleet |  `arn:aws:codebuild:region-ID:account-ID:fleet/fleet-ID`  | 
|  所有 CodeBuild 资源  |  `arn:aws:codebuild:*`  | 
|  指定 AWS 区域中指定账户拥有的所有 CodeBuild 资源  |  `arn:aws:codebuild:region-ID:account-ID:*`  | 

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

**注意**  
大多数 AWS 服务都将冒号 (:) 或正斜杠 (/) 视为中的 ARNs相同字符。但是，在资源模式和规则中 CodeBuild 使用精确匹配。请务必在创建事件模式时使用正确的字符，以使其与资源中的 ARN 语法匹配。

例如，您可以在语句中使用其 ARN 指明特定的构建项目 (*myBuildProject*)，如下所示：

```
"Resource": "arn:aws:codebuild:us-east-2:123456789012:project/myBuildProject"
```

要指定所有资源，或者如果 API 操作不支持 ARNs，请在`Resource`元素中使用通配符 (\$1)，如下所示：

```
"Resource": "*"
```

某些 CodeBuild API 操作接受多个资源（例如，`BatchGetProjects`）。要在单个语句中指定多个资源，请 ARNs 用逗号分隔它们，如下所示：

```
"Resource": [
  "arn:aws:codebuild:us-east-2:123456789012:project/myBuildProject",
  "arn:aws:codebuild:us-east-2:123456789012:project/myOtherBuildProject"
]
```

CodeBuild 提供了一组使用 CodeBuild 资源的操作。有关列表，请参阅[AWS CodeBuild 权限参考](auth-and-access-control-permissions-reference.md)。

## 了解资源所有权
<a name="understanding-resource-ownership"></a>

该 AWS 账户拥有在账户中创建的资源，无论谁创建了这些资源。具体而言，资源所有者是对 AWS 资源创建请求进行身份验证的[委托人实体](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)（即根账户、用户或 IAM 角色）的账户。以下示例说明了它的工作原理：
+ 如果您使用账户的根账户证书创建规则，则您的 AWS 账户就是该 CodeBuild 资源的所有者。 AWS 
+ 如果您在 AWS 账户中创建用户并向该用户授予创建 CodeBuild 资源的权限，则该用户可以创建 CodeBuild 资源。但是，该用户所属的您的 AWS 账户拥有这些 CodeBuild资源。
+ 如果您在 AWS 账户中创建具有创建 CodeBuild 资源权限的 IAM 角色，则任何能够担任该角色的人都可以创建 CodeBuild资源。该角色所属的 AWS 账户拥有这些 CodeBuild资源。

## 管理对 资源的访问
<a name="managing-access-resources"></a>

权限策略规定谁可以访问哪些资源。

**注意**  
本节讨论如何在 AWS CodeBuild中使用 IAM。这里不提供有关 IAM 服务的详细信息。有关完整的 IAM 文档，请参阅《IAM 用户指南》中的[什么是 IAM？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。有关 IAM 策略语法和说明的信息，请参阅《IAM 用户指南》中的 [AWS IAM 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

附加到 IAM 身份的策略称为基于身份的策略（IAM 策略）。附加到资源的策略称为基于资源的策略。 CodeBuild 支持基于身份的策略，以及 APIs 出于跨账户资源共享目的的某些只读策略和基于资源的策略。

### 对 S3 存储桶的安全访问
<a name="secure-s3-buckets"></a>

我们强烈建议您在您的 IAM 角色中包含以下权限，以验证与您的 CodeBuild 项目关联的 S3 存储桶是否归您或您信任的人所有。这些权限不包含在 AWS 托管策略和角色中。您必须自行添加。
+  `s3:GetBucketAcl` 
+  `s3:GetBucketLocation` 

如果您的项目使用的 S3 存储桶的拥有者发生更改，则必须验证您是否仍拥有存储桶，如果没有，请更新您的 IAM 角色的权限。有关更多信息，请参阅[允许用户与之互动 CodeBuild](setting-up-service-permissions-group.md)和[CodeBuild 允许与其他 AWS 服务进行交互](setting-up-service-role.md)。

## 指定策略元素：操作、效果和主体
<a name="actions-effects-principals"></a>

对于每种 AWS CodeBuild 资源，该服务都定义了一组 API 操作。要授予这些 API 操作的权限，请 CodeBuild 定义一组可在策略中指定的操作。某些 API 操作可能需要多个操作的权限才能执行 API 操作。有关更多信息，请参阅[AWS CodeBuild 资源和运营](#arn-formats)和[AWS CodeBuild 权限参考](auth-and-access-control-permissions-reference.md)。

以下是基本的策略元素：
+ **资源** – 您使用 Amazon 资源名称 (ARN) 来标识策略应用到的资源。
+ **操作** – 您可以使用操作关键字来标识要允许或拒绝的资源操作。例如，`codebuild:CreateProject` 权限授予用户执行 `CreateProject` 操作的权限。
+ **效果** – 用于指定当用户请求操作时的效果（可以是允许或拒绝）。如果没有显式授予（允许）对资源的访问权限，则隐式拒绝访问。您也可显式拒绝对资源的访问。您可以执行此操作，以确保用户无法访问资源，即使有其他策略授予了访问权限也是如此。
+ **主体** – 在基于身份的策略（IAM 策略）中，附加了策略的用户是隐式主体。对于基于资源的策略，您可以指定您希望将权限授予的用户、账户、服务或其他实体。

有关 IAM 策略语法和介绍的更多信息，请参阅《IAM 用户指南》中的 [AWS IAM 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

有关显示所有 CodeBuild API 操作及其适用的资源的表格，请参阅[AWS CodeBuild 权限参考](auth-and-access-control-permissions-reference.md)。

# 将基于身份的策略用于 AWS CodeBuild
<a name="auth-and-access-control-iam-identity-based-access-control"></a>

本主题提供了基于身份的策略的示例，这些示例展示了账户管理员如何将权限策略附加到 IAM 身份（即用户、组和角色），从而授予对 AWS CodeBuild 资源执行操作的权限。

**重要**  
我们建议您先阅读介绍性主题，这些主题解释了管理 CodeBuild 资源访问权限的基本概念和选项。有关更多信息，请参阅 [管理 AWS CodeBuild 资源访问权限概述](auth-and-access-control-iam-access-control-identity-based.md)。

**Topics**
+ [使用 AWS CodeBuild 控制台所需的权限](#console-permissions)
+ [连接 Amazon 弹性容器注册表所需的权限 AWS CodeBuild](#ecr-policies)
+ [AWS CodeBuild 控制台连接源提供商所需的权限](#console-policies)
+ [AWS 的托管（预定义）策略 AWS CodeBuild](#managed-policies)
+ [CodeBuild 托管策略和通知](#notifications-permissions)
+ [CodeBuild AWS 托管策略的更新](#security-iam-awsmanpol-updates)
+ [客户管理型策略示例](#customer-managed-policies)

以下是一个权限策略示例，仅允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取任何以 `my` 名称开头的构建项目的相关信息：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:BatchGetProjects",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/my*"
    }
  ]
}
```

------

## 使用 AWS CodeBuild 控制台所需的权限
<a name="console-permissions"></a>

使用 AWS CodeBuild 控制台的用户必须拥有允许该 AWS 账户描述其他 AWS 资源的最低权限集。您必须拥有来自以下服务的权限：
+ AWS CodeBuild
+ Amazon CloudWatch
+ CodeCommit （如果您要将源代码存储在 AWS CodeCommit 存储库中）
+ Amazon Elastic Container Registry (Amazon ECR)（如果您使用的构建环境依赖于 Amazon ECR 存储库中的 Docker 映像）
**注意**  
截至 2022 年 7 月 26 日，默认 IAM 政策已更新。有关更多信息，请参阅 [连接 Amazon 弹性容器注册表所需的权限 AWS CodeBuild](#ecr-policies)。
+ Amazon Elastic Container Service (Amazon ECS)（如果您使用的构建环境依赖于 Amazon ECR 存储库中的 Docker 映像）
+ AWS Identity and Access Management (IAM)
+ AWS Key Management Service (AWS KMS)
+ Amazon Simple Storage Service（Amazon S3）

如果您创建比必需的最低权限更为严格的 IAM 策略，控制台将无法按预期正常运行。

## 连接 Amazon 弹性容器注册表所需的权限 AWS CodeBuild
<a name="ecr-policies"></a>

自 2022 年 7 月 26 日起， AWS CodeBuild 已更新其亚马逊 ECR 权限的默认 IAM 政策。以下权限已从默认策略中删除：

```
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload"
```

对于在 2022 年 7 月 26 日之前创建的 CodeBuild 项目，我们建议您使用以下 Amazon ECR 政策更新您的政策：

```
"Action": [
    "ecr:BatchCheckLayerAvailability",
    "ecr:GetDownloadUrlForLayer",
    "ecr:BatchGetImage"
]
```

有关更新您的策略的更多信息，请参阅[允许用户与之互动 CodeBuild](setting-up-service-permissions-group.md)。

## AWS CodeBuild 控制台连接源提供商所需的权限
<a name="console-policies"></a>

 AWS CodeBuild 控制台使用以下 API 操作连接到源提供商（例如 GitHub 存储库）。
+ `codebuild:ListConnectedOAuthAccounts`
+ `codebuild:ListRepositories`
+ `codebuild:PersistOAuthToken`
+ `codebuild:ImportSourceCredentials`

您可以使用 AWS CodeBuild 控制台将源提供程序（例如 GitHub 存储库）与您的构建项目相关联。为此，您必须先将前面的 API 操作添加到与您用于访问 AWS CodeBuild 控制台的用户关联的 IAM 访问策略中。

`ListConnectedOAuthAccounts`、`ListRepositories` 和 `PersistOAuthToken` API 操作不应由您的代码调用。因此，这些 API 操作不包含在 AWS CLI 和中 AWS SDKs。

## AWS 的托管（预定义）策略 AWS CodeBuild
<a name="managed-policies"></a>

AWS 通过提供由创建和管理的独立 IAM 策略来解决许多常见用例 AWS。这些 AWS 托管策略为常见用例授予必要的权限，因此您可以不必调查需要哪些权限。的托管策略 CodeBuild 还为获得相关政策的用户提供了在其他服务中执行操作的权限，例如 IAM AWS CodeCommit、Amazon EC2、Amazon ECR、 CloudWatch Amazon SNS 和 Amazon Events。例如，该`AWSCodeBuildAdminAccess`策略是一个管理级别的用户策略，允许拥有此策略的用户创建和管理项目构建 CloudWatch的事件规则，为项目相关事件（名称前缀为的主题`arn:aws:codebuild:`）创建和管理通知的 Amazon SNS 主题，以及管理中的项目和报告组。 CodeBuild有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

以下 AWS 托管策略是特定的，您可以将其附加到账户中的用户 AWS CodeBuild。

**AWSCodeBuildAdminAccess**  
提供对 CodeBuild 包括管理 CodeBuild 生成项目的权限在内的完全访问权限。

**AWSCodeBuildDeveloperAccess**  
提供对生成项目的访问权限， CodeBuild 但不允许管理生成项目。

**AWSCodeBuildReadOnlyAccess**  
提供对的只读访问权限 CodeBuild。

要访问 CodeBuild 创建的生成输出项目，您还必须附加名为的 AWS 托管策略`AmazonS3ReadOnlyAccess`。

要创建和管理 CodeBuild 服务角色，还必须附加名为的 AWS 托管策略`IAMFullAccess`。

此外，您还可以创建您自己的自定义 IAM policy，以授予 CodeBuild 操作和资源的相关权限。您可以将这些自定义策略附加到需要这些权限的 用户或组。

**Topics**
+ [AWSCodeBuildAdminAccess](#admin-access-policy)
+ [AWSCodeBuildDeveloperAccess](#developer-access-policy)
+ [AWSCodeBuildReadOnlyAccess](#read-only-access-policy)

### AWSCodeBuildAdminAccess
<a name="admin-access-policy"></a>

该`AWSCodeBuildAdminAccess`策略提供对构建项目的完全访问权限 CodeBuild，包括管理 CodeBuild 生成项目的权限。此政策仅适用于管理员级别的用户，以授予他们对您 AWS 账户中的 CodeBuild 项目、报告组和相关资源的完全控制权，包括删除项目和报告组的权限。

有关完整的托管策略，请参阅 IAM 托管策略参考[ AWSCodeBuildAdminAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCodeBuildAdminAccess.html)中的。

### AWSCodeBuildDeveloperAccess
<a name="developer-access-policy"></a>

该`AWSCodeBuildDeveloperAccess`策略允许访问项目 CodeBuild 和报表组相关资源的所有功能。此政策不允许用户删除 CodeBuild 项目或报告组，或者其他 AWS 服务（例如 CloudWatch 活动）中的相关资源。建议对大多数用户应用此策略。

有关完整的托管策略，请参阅 IAM 托管策略参考[ AWSCodeBuildDeveloperAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCodeBuildDeveloperAccess.html)中的。

### AWSCodeBuildReadOnlyAccess
<a name="read-only-access-policy"></a>

该`AWSCodeBuildReadOnlyAccess`政策授予对 CodeBuild 其他 AWS 服务中的相关资源的只读访问权限。将此策略应用于可以查看和运行构建、查看项目和查看报告组但无法对它们作出任何更改的用户。

有关完整的托管策略，请参阅 IAM 托管策略参考[ AWSCodeBuildReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCodeBuildReadOnlyAccess.xml)中的。

## CodeBuild 托管策略和通知
<a name="notifications-permissions"></a>

CodeBuild 支持通知，它可以通知用户生成项目的重要更改。的托管策略 CodeBuild 包括通知功能的策略声明。有关更多信息，请参阅[什么是通知？](https://docs.aws.amazon.com/codestar-notifications/latest/userguide/welcome.html)。

### 只读托管策略中的通知的相关权限
<a name="notifications-readonly"></a>

`AWSCodeBuildReadOnlyAccess` 托管策略包含以下语句，以允许对通知进行只读访问。应用此托管策略的用户可以查看资源的通知，但无法创建、管理或订阅这些通知。

```
   {
        "Sid": "CodeStarNotificationsPowerUserAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:DescribeNotificationRule"
        ],
        "Resource": "*",
        "Condition" : {
            "ArnLike" : {"codestar-notifications:NotificationsForResource" : "arn:aws:codebuild:*:*:project/*"}
        }
    },    
    {
        "Sid": "CodeStarNotificationsListAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:ListNotificationRules",
            "codestar-notifications:ListEventTypes",
            "codestar-notifications:ListTargets"
        ],
        "Resource": "*"
    }
```

### 其他托管策略中的通知的相关权限
<a name="notifications-otheraccess"></a>

`AWSCodeBuildDeveloperAccess` 托管策略包含以下语句，以允许用户创建、编辑和订阅通知。用户无法删除通知规则或管理资源的标签。

```
    {
        "Sid": "CodeStarNotificationsReadWriteAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:CreateNotificationRule",
            "codestar-notifications:DescribeNotificationRule",
            "codestar-notifications:UpdateNotificationRule",
            "codestar-notifications:Subscribe",
            "codestar-notifications:Unsubscribe"
        ],
        "Resource": "*",
        "Condition" : {
            "ArnLike" : {"codestar-notifications:NotificationsForResource" : "arn:aws:codebuild:*:*:project/*"}
        }
    },    
    {
        "Sid": "CodeStarNotificationsListAccess",
        "Effect": "Allow",
        "Action": [
            "codestar-notifications:ListNotificationRules",
            "codestar-notifications:ListTargets",
            "codestar-notifications:ListTagsforResource",
            "codestar-notifications:ListEventTypes"
        ],
        "Resource": "*"
    },
    {
        "Sid": "SNSTopicListAccess",
        "Effect": "Allow",
        "Action": [
            "sns:ListTopics"
        ],
        "Resource": "*"
    },
    {
        "Sid": "CodeStarNotificationsChatbotAccess",
        "Effect": "Allow",
        "Action": [
            "chatbot:DescribeSlackChannelConfigurations",
            "chatbot:ListMicrosoftTeamsChannelConfigurations"
          ],
       "Resource": "*"
    }
```

有关 IAM 和通知的更多信息，请参阅[用于 AWS CodeStar 通知的 Identity and Access Management](https://docs.aws.amazon.com/codestar-notifications/latest/userguide/security-iam.html)。

## CodeBuild AWS 托管策略的更新
<a name="security-iam-awsmanpol-updates"></a>

查看 CodeBuild 自该服务开始跟踪这些更改以来 AWS 托管策略更新的详细信息。要获得有关此页面更改的自动提示，请订阅 [AWS CodeBuild 用户指南文档历史记录](history.md) 的 RSS 源。




| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|  `AWSCodeBuildAdminAccess` 和 `AWSCodeBuildDeveloperAccess` – 现有策略的更新  |  CodeBuild 向这些策略添加了支持 Session Manager 交互式编译调试的`ssmmessages:OpenDataChannel`权限。 `AWSCodeBuildAdminAccess`和`AWSCodeBuildDeveloperAccess`策略现在包括会话管理器会话资源 (`arn:aws:ssm:*:*:session/*`) 的`ssmmessages:OpenDataChannel`操作，以支持在此 WebSocket API 上强制执行 Sigv4。  | 2025 年 12 月 1 日 | 
|  `AWSCodeBuildAdminAccess`、`AWSCodeBuildDeveloperAccess` 和 `AWSCodeBuildReadOnlyAccess` – 现有策略更新  |  CodeBuild 已将资源更新为这些政策。 `AWSCodeBuildAdminAccess`、`AWSCodeBuildDeveloperAccess` 和 `AWSCodeBuildReadOnlyAccess` 策略已更改为更新一个现有资源。原始资源 `arn:aws:codebuild:*` 已更新为 `arn:aws:codebuild:*:*:project/*`。  | 2024 年 11 月 15 日 | 
|  `AWSCodeBuildAdminAccess`、`AWSCodeBuildDeveloperAccess` 和 `AWSCodeBuildReadOnlyAccess` – 现有策略更新  |  CodeBuild 在这些政策中添加了支持 AWS CodeConnections 品牌重塑的资源。 `AWSCodeBuildAdminAccess`、`AWSCodeBuildDeveloperAccess` 和 `AWSCodeBuildReadOnlyAccess` 策略已更改为添加一项资源，`arn:aws:codeconnections:*:*:*`。  | 2024 年 4 月 18 日 | 
|  `AWSCodeBuildAdminAccess` 和 `AWSCodeBuildDeveloperAccess` – 现有策略更新  |  CodeBuild 在这些政策中添加了支持在聊天应用程序中使用 Amazon Q Developer 的额外通知类型的权限。 `AWSCodeBuildAdminAccess` 和 `AWSCodeBuildDeveloperAccess` 策略已经过更改，来添加权限 `chatbot:ListMicrosoftTeamsChannelConfigurations`。  | 2023 年 5 月 16 日 | 
|  CodeBuild 已开始跟踪更改  |  CodeBuild 开始跟踪其 AWS 托管策略的更改。  | 2023 年 5 月 16 日 | 

## 客户管理型策略示例
<a name="customer-managed-policies"></a>

本节的用户策略示例介绍如何授予执行 AWS CodeBuild 操作的权限。当您使用 CodeBuild API、或时 AWS SDKs，这些政策会起作用 AWS CLI。当您使用控制台时，您必须授予特定于控制台的其他权限。有关信息，请参阅[使用 AWS CodeBuild 控制台所需的权限](#console-permissions)。

您可以使用以下示例 IAM 策略来限制您的用户和角色的 CodeBuild 访问权限。

**Topics**
+ [允许用户获取有关构建项目的信息](#customer-managed-policies-example-batch-get-projects)
+ [允许用户获取有关实例集的信息](#customer-managed-policies-get-information-about-fleets)
+ [允许用户获取有关报告组的信息](#customer-managed-policies-get-information-about-report-group)
+ [允许用户获取有关报告的信息](#customer-managed-policies-get-information-about-reports)
+ [允许用户创建构建项目](#customer-managed-policies-example-create-project)
+ [允许用户创建实例集](#customer-managed-policies-example-create-fleet)
+ [允许用户创建报告组](#customer-managed-policies-example-create-report-group)
+ [允许用户删除实例集](#customer-managed-policies-example-delete-fleet)
+ [允许用户删除报告组](#customer-managed-policies-example-delete-report-group)
+ [允许用户删除报告](#customer-managed-policies-example-delete-report)
+ [允许用户删除构建项目](#customer-managed-policies-example-delete-project)
+ [允许用户获取构建项目名称的列表](#customer-managed-policies-example-list-projects)
+ [允许用户更改有关构建项目的信息](#customer-managed-policies-example-update-project)
+ [允许用户更改实例集](#customer-managed-policies-example-change-fleet)
+ [允许用户更改报告组](#customer-managed-policies-example-change-report-group)
+ [允许用户获取有关构建的信息](#customer-managed-policies-example-batch-get-builds)
+ [允许用户获取构建 IDs 项目的构建列表](#customer-managed-policies-example-list-builds-for-project)
+ [允许用户获取版本列表 IDs](#customer-managed-policies-example-list-builds)
+ [允许用户获取实例集列表](#customer-managed-policies-example-get-list-of-fleets)
+ [允许用户获取报告组列表](#customer-managed-policies-example-get-list-of-report-groups)
+ [允许用户获取报告列表](#customer-managed-policies-example-get-list-of-reports)
+ [允许用户获取报告组的报告列表](#customer-managed-policies-example-get-list-of-reports-for-report-group)
+ [允许用户获取报告的测试用例的列表](#customer-managed-policies-example-get-list-of-test-cases-for-report)
+ [允许用户开始运行构建](#customer-managed-policies-example-start-build)
+ [允许用户尝试停止构建](#customer-managed-policies-example-stop-build)
+ [允许用户尝试删除构建](#customer-managed-policies-example-delete-builds)
+ [允许用户获取有关由管理的 Docker 镜像的信息 CodeBuild](#customer-managed-policies-example-list-curated-environment-images)
+ [允许用户为实例集服务角色添加权限策略](#customer-managed-policies-example-permission-policy-fleet-service-role)
+ [允许 CodeBuild 访问创建 VPC 网络接口所需的 AWS 服务](#customer-managed-policies-example-create-vpc-network-interface)
+ [使用 deny 语句防止 AWS CodeBuild 与源提供商断开连接](#customer-managed-policies-example-deny-disconnect)

### 允许用户获取有关构建项目的信息
<a name="customer-managed-policies-example-batch-get-projects"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取任何以名称 `my` 开头的构建项目的信息：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:BatchGetProjects",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/my*"      
    }
  ]
}
```

------

### 允许用户获取有关实例集的信息
<a name="customer-managed-policies-get-information-about-fleets"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取有关实例集的信息：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:BatchGetFleets",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:fleet/*"
    }
  ]
}
```

------

### 允许用户获取有关报告组的信息
<a name="customer-managed-policies-get-information-about-report-group"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取有关报告组的信息：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:BatchGetReportGroups",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:report-group/*"
    }
  ]
}
```

------

### 允许用户获取有关报告的信息
<a name="customer-managed-policies-get-information-about-reports"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取有关报告的信息：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:BatchGetReports",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:report-group/*"
    }
  ]
}
```

------

### 允许用户创建构建项目
<a name="customer-managed-policies-example-create-project"></a>

以下示例策略声明允许用户使用任意名称创建构建项目，但只能在账户`us-east-2`所在区域中创建构建项目，`123456789012`并且只能使用指定的 CodeBuild 服务角色：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:CreateProject",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::111122223333:role/CodeBuildServiceRole"
    }
  ]
}
```

------

以下示例策略声明允许用户使用任何名称创建构建项目，但只能在账户`us-east-2`所在区域中创建构建项目，`123456789012`并且只能使用指定的 CodeBuild 服务角色。它还强制用户只能将指定的服务角色与任何其他服务一起使用， AWS CodeBuild 而不能使用任何其他 AWS 服务。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:CreateProject",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::111122223333:role/CodeBuildServiceRole",
      "Condition": {
          "StringEquals": {"iam:PassedToService": "codebuild.amazonaws.com"}
      }
    }
  ]
}
```

------

### 允许用户创建实例集
<a name="customer-managed-policies-example-create-fleet"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中创建实例集：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:CreateFleet",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:fleet/*"
    }
  ]
}
```

------

### 允许用户创建报告组
<a name="customer-managed-policies-example-create-report-group"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中创建报告组：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:CreateReportGroup",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:report-group/*"
    }
  ]
}
```

------

### 允许用户删除实例集
<a name="customer-managed-policies-example-delete-fleet"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中删除实例集：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:DeleteFleet",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:fleet/*"
    }
  ]
}
```

------

### 允许用户删除报告组
<a name="customer-managed-policies-example-delete-report-group"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中删除报告组：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:DeleteReportGroup",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:report-group/*"
    }
  ]
}
```

------

### 允许用户删除报告
<a name="customer-managed-policies-example-delete-report"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中删除报告：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:DeleteReport",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:report-group/*"
    }
  ]
}
```

------

### 允许用户删除构建项目
<a name="customer-managed-policies-example-delete-project"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中删除任何以名称 `my` 开头的构建项目：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:DeleteProject",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/my*"
    }
  ]
}
```

------

### 允许用户获取构建项目名称的列表
<a name="customer-managed-policies-example-list-projects"></a>

以下示例策略语句允许用户获取同一账户的构建项目名称的列表：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:ListProjects",
      "Resource": "*"
    }
  ]
}
```

------

### 允许用户更改有关构建项目的信息
<a name="customer-managed-policies-example-update-project"></a>

以下示例策略语句仅允许用户在 `123456789012` 账户的 `us-east-2` 区域中更改有关使用任何名称的构建项目的信息，并且只能使用指定的 AWS CodeBuild 服务角色：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:UpdateProject",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::111122223333:role/CodeBuildServiceRole"
    }
  ]
}
```

------

### 允许用户更改实例集
<a name="customer-managed-policies-example-change-fleet"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中更改实例集：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:UpdateFleet",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:fleet/*"
    }
  ]
}
```

------

### 允许用户更改报告组
<a name="customer-managed-policies-example-change-report-group"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中更改报告组：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:UpdateReportGroup",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:report-group/*"
    }
  ]
}
```

------

### 允许用户获取有关构建的信息
<a name="customer-managed-policies-example-batch-get-builds"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取名为 `my-build-project` 和 `my-other-build-project` 的构建项目的信息：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:BatchGetBuilds",
      "Resource": [
        "arn:aws:codebuild:us-east-2:111122223333:project/my-build-project",
        "arn:aws:codebuild:us-east-2:111122223333:project/my-other-build-project"
      ]
    }
  ]
}
```

------

### 允许用户获取构建 IDs 项目的构建列表
<a name="customer-managed-policies-example-list-builds-for-project"></a>

以下示例政策声明允许用户获取该`us-east-2`区域 IDs 中名为`my-build-project`和`123456789012`的构建项目的构建列表`my-other-build-project`：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:ListBuildsForProject",
      "Resource": [
        "arn:aws:codebuild:us-east-2:111122223333:project/my-build-project",
        "arn:aws:codebuild:us-east-2:111122223333:project/my-other-build-project"
      ]
    }
  ]
}
```

------

### 允许用户获取版本列表 IDs
<a name="customer-managed-policies-example-list-builds"></a>

以下示例政策声明允许用户获取同一个账户的所有版本 IDs 的列表：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:ListBuilds",
      "Resource": "*"
    }
  ]
}
```

------

### 允许用户获取实例集列表
<a name="customer-managed-policies-example-get-list-of-fleets"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取有关实例集的列表：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:ListFleets",
      "Resource": "*"
    }
  ]
}
```

------

### 允许用户获取报告组列表
<a name="customer-managed-policies-example-get-list-of-report-groups"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取有关报告组的列表：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:ListReportGroups",
      "Resource": "*"
    }
  ]
}
```

------

### 允许用户获取报告列表
<a name="customer-managed-policies-example-get-list-of-reports"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取有关报告的列表：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:ListReports",
      "Resource": "*"
    }
  ]
}
```

------

### 允许用户获取报告组的报告列表
<a name="customer-managed-policies-example-get-list-of-reports-for-report-group"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取报告组的报告列表：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:ListReportsForReportGroup",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:report-group/*"
    }
  ]
}
```

------

### 允许用户获取报告的测试用例的列表
<a name="customer-managed-policies-example-get-list-of-test-cases-for-report"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中获取报告的测试用例列表：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:DescribeTestCases",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:report-group/*"
    }
  ]
}
```

------

### 允许用户开始运行构建
<a name="customer-managed-policies-example-start-build"></a>

以下示例策略语句允许用户在 `123456789012` 账户的 `us-east-2` 区域中运行任何以名称 `my` 开头的构建项目：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:StartBuild",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/my*"
    }
  ]
}
```

------

### 允许用户尝试停止构建
<a name="customer-managed-policies-example-stop-build"></a>

以下示例策略语句仅允许用户在 `123456789012` 账户的 `us-east-2` 区域中尝试停止任何以名称 `my` 开头的运行中构建项目：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:StopBuild",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/my*"
    }
  ]
}
```

------

### 允许用户尝试删除构建
<a name="customer-managed-policies-example-delete-builds"></a>

以下示例策略语句仅允许用户在 `123456789012` 账户的 `us-east-2` 区域中尝试为任何以名称 `my` 开头的构建项目删除构建：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:BatchDeleteBuilds",
      "Resource": "arn:aws:codebuild:us-east-2:111122223333:project/my*"
    }
  ]
}
```

------

### 允许用户获取有关由管理的 Docker 镜像的信息 CodeBuild
<a name="customer-managed-policies-example-list-curated-environment-images"></a>

以下示例策略语句允许用户获取有关由 CodeBuild 管理的所有 Docker 映像的信息：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "codebuild:ListCuratedEnvironmentImages",
      "Resource": "*"
    }
  ]
}
```

------

### 允许用户为实例集服务角色添加权限策略
<a name="customer-managed-policies-example-permission-policy-fleet-service-role"></a>

以下示例资源策略语句允许用户为实例集服务角色添加 VPC 权限策略：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CodeBuildFleetVpcCreateNI",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface"
            ],
            "Resource": [
                "arn:aws:ec2:us-west-2:111122223333:subnet/subnet-id-1",
                "arn:aws:ec2:us-west-2:111122223333:security-group/security-group-id-1",
                "arn:aws:ec2:us-west-2:111122223333:network-interface/*"
            ]
        },
        {
            "Sid": "CodeBuildFleetVpcPermission",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CodeBuildFleetVpcNIPermission",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterfacePermission"
            ],
            "Resource": "arn:aws:ec2:us-west-2:111122223333:network-interface/*",
            "Condition": {
                "StringEquals": {
                    "ec2:Subnet": [
                        "arn:aws:ec2:us-west-2:111122223333:subnet/subnet-id-1"
                    ]
                }
            }
        }
    ]
}
```

------

以下示例资源策略语句允许用户为实例集服务角色添加自定义 Amazon 托管的映像（AMI）权限策略：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeImages",
            "Resource": "*"
        } 
    ]
}
```

------

以下示例信任策略语句允许用户为实例集服务角色添加权限策略：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CodeBuildFleetVPCTrustPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "codebuild.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "111122223333"
        }
      }
    }
  ]
}
```

------

### 允许 CodeBuild 访问创建 VPC 网络接口所需的 AWS 服务
<a name="customer-managed-policies-example-create-vpc-network-interface"></a>

以下示例策略声明授予在具有两个子网的 VPC 中创建网络接口的 AWS CodeBuild 权限：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterfacePermission"
            ],
            "Resource": "arn:aws:ec2:us-west-2:111122223333:network-interface/*",
            "Condition": {
                "StringEquals": {
                    "ec2:AuthorizedService": "codebuild.amazonaws.com"
                },
                "ArnEquals": {
                    "ec2:Subnet": [
                        "arn:aws:ec2:us-west-2:111122223333:subnet/subnet-id-1",
                        "arn:aws:ec2:us-west-2:111122223333:subnet/subnet-id-2"
                    ]
                }
            }
        }
    ]
}
```

------

### 使用 deny 语句防止 AWS CodeBuild 与源提供商断开连接
<a name="customer-managed-policies-example-deny-disconnect"></a>

 以下示例策略语句使用 Deny 语句阻止 AWS CodeBuild 与源提供商断开连接。它使用 `codebuild:DeleteOAuthToken`（`codebuild:PersistOAuthToken` 和 `codebuild:ImportSourceCredentials` 的倒数）连接到源提供商。有关更多信息，请参阅 [AWS CodeBuild 控制台连接源提供商所需的权限](#console-policies)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "codebuild:DeleteOAuthToken",
      "Resource": "*"
    }
  ]
}
```

------

# AWS CodeBuild 权限参考
<a name="auth-and-access-control-permissions-reference"></a>

您可以在 AWS CodeBuild 策略中使用 AWS-wide 条件键来表达条件。有关列表，请参阅《IAM 用户指南》**中的[可用键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#AvailableKeys)。

请在策略的 `Action` 字段中指定这些操作。要指定操作，请在 API 操作名称之前使用 `codebuild:` 前缀（例如，`codebuild:CreateProject` 和 `codebuild:StartBuild`）。要在单个语句中指定多项操作，请使用逗号将它们隔开（例如，`"Action": [ "codebuild:CreateProject", "codebuild:StartBuild" ]`）。

**使用通配符**

您可以在策略的 `Resource` 字段中指定带或不带通配符（\$1）的 ARN 作为资源值。您可以使用通配符指定多个操作或资源。例如，`codebuild:*`指定所有 CodeBuild 动作并`codebuild:Batch*`指定以单词开头的所有 CodeBuild 动作`Batch`。以下示例授予对以 `my` 名称开头的所有构建项目的访问权限：

```
arn:aws:codebuild:us-east-2:123456789012:project/my*
```<a name="actions-related-to-objects-table"></a>CodeBuild API 操作和操作所需的权限

BatchDeleteBuilds  
 **操作：**`codebuild:BatchDeleteBuilds`  
删除构建所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

BatchGetBuilds  
 **操作：**`codebuild:BatchGetBuilds`  
获取有关构建项目的信息所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

BatchGetProjects  
 **操作：**`codebuild:BatchGetProjects`  
获取有关构建项目的信息所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

BatchGetReportGroups  
 **操作：**`codebuild:BatchGetReportGroups`  
获取有关报告组的信息所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

BatchGetReports  
 **操作：**`codebuild:BatchGetReports`  
获取有关报告的信息所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

BatchPutTestCases¹  
 **操作：**`codebuild:BatchPutTestCases`  
创建或更新测试报告所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

CreateProject  
 **操作：**`codebuild:CreateProject`、`iam:PassRole`  
创建构建项目所必需的。  
 **资源：**  
+  `arn:aws:codebuild:region-ID:account-ID:project/project-name ` 
+  `arn:aws:iam::account-ID:role/role-name ` 

CreateReport¹  
 **操作：**`codebuild:CreateReport`  
创建测试报告所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

CreateReportGroup  
 **操作：**`codebuild:CreateReportGroup`  
创建报告组所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

CreateWebhook  
 **操作：**`codebuild:CreateWebhook`  
创建 Webhook 所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

DeleteProject  
 **操作：**`codebuild:DeleteProject`  
删除 CodeBuild 项目所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

DeleteReport  
 **操作：**`codebuild:DeleteReport`  
删除报告所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

DeleteReportGroup  
 **操作：**`codebuild:DeleteReportGroup`  
删除报告组所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

DeleteSourceCredentials  
 **操作：**`codebuild:DeleteSourceCredentials`  
删除一组包含 GitHub 企业服务器或 Bitbucket 存储库凭据信息的`SourceCredentialsInfo`对象所必需的。 GitHub  
 **资源：**`*`

DeleteWebhook  
 **操作：**`codebuild:DeleteWebhook`  
创建 Webhook 所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

DescribeTestCases  
 **操作：**`codebuild:DescribeTestCases`  
返回测试用例的分页列表所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

ImportSourceCredentials  
 **操作：**`codebuild:ImportSourceCredentials`  
导入一组包含有关 GitHub 企业服务器或 Bitbucke GitHub t 存储库凭证信息的`SourceCredentialsInfo`对象所必需的。  
 **资源：**`*`

InvalidateProjectCache  
 **操作：**`codebuild:InvalidateProjectCache`  
重置项目缓存所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

ListBuildBatches  
 **操作：**`codebuild:ListBuildBatches`  
获取生成批次列表所必需 IDs的。  
 **资源：**`*`

ListBuildBatchesForProject  
 **操作：**`codebuild:ListBuildBatchesForProject`  
获取特定项目的生成批 IDs 次列表所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name`

ListBuilds  
 **操作：**`codebuild:ListBuilds`  
获取版本列表所必需的 IDs。  
 **资源：**`*`

ListBuildsForProject  
 **操作：**`codebuild:ListBuildsForProject`  
获取构建项目的构建 IDs 列表所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

ListCuratedEnvironmentImages  
 **操作：**`codebuild:ListCuratedEnvironmentImages`  
获取由 AWS CodeBuild管理的所有 Docker 映像的相关信息所必需的。  
 **资源：**`*`（必需，但不引用可寻址的 AWS 资源） 

ListProjects  
 **操作：**`codebuild:ListProjects`  
获取构建项目名称的列表所必需的。  
 **资源：**`*`

ListReportGroups  
 **操作：**`codebuild:ListReportGroups`  
获取报告组列表所必需的。  
 **资源：**`*`

ListReports  
 **操作：**`codebuild:ListReports`  
获取报告列表所必需的。  
 **资源：**`*`

ListReportsForReportGroup  
 **操作：**`codebuild:ListReportsForReportGroup`  
获取报告组的报告列表所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

RetryBuild  
**操作：**`codebuild:RetryBuild`  
重试构建所必需的。  
**资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

StartBuild  
 **操作：**`codebuild:StartBuild`  
开始运行构建项目所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

StopBuild  
 **操作：**`codebuild:StopBuild`  
尝试停止运行中构建项目所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

UpdateProject  
 **操作：**`codebuild:UpdateProject`、`iam:PassRole`  
更改构建项目的相关信息所必需的。  
 **资源：**  
+  `arn:aws:codebuild:region-ID:account-ID:project/project-name ` 
+  `arn:aws:iam::account-ID:role/role-name ` 

UpdateProjectVisibility  <a name="UpdateProjectVisibility"></a>
 **操作：**`codebuild:UpdateProjectVisibility`、`iam:PassRole`  
更改项目构建的公共可见性所必需的。  
 **资源：**  
+  `arn:aws:codebuild:region-ID:account-ID:project/project-name ` 
+  `arn:aws:iam::account-ID:role/role-name ` 

UpdateReport¹  
 **操作：**`codebuild:UpdateReport`  
创建或更新测试报告所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

UpdateReportGroup  
 **操作：**`codebuild:UpdateReportGroup`  
更新报告组所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:report-group/report-group-name `

UpdateWebhook  
 **操作：**`codebuild:UpdateWebhook`  
更新 Webhook 所必需的。  
 **资源：**`arn:aws:codebuild:region-ID:account-ID:project/project-name `

¹ 仅用于权限。对于此操作没有 API。

# 使用标签控制对 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"
            }
         }
      }
   ]
}
```

# 在控制台中查看资源
<a name="console-resources"></a>

 AWS CodeBuild 控制台需要`ListRepositories`权限才能在您登录的 AWS 地区显示您的 AWS 账户的存储库列表。该控制台还包括一个**转到资源**功能，可对资源快速执行不区分大小写的搜索。此搜索是在您 AWS 登录所在 AWS 地区的账户中执行的。将显示以下服务中的以下资源：
+ AWS CodeBuild：构建项目
+ AWS CodeCommit：存储库
+ AWS CodeDeploy：应用程序
+ AWS CodePipeline：管道

要在所有服务中跨资源执行此搜索，您必须具有如下权限：
+ CodeBuild: `ListProjects`
+ CodeCommit: `ListRepositories`
+ CodeDeploy: `ListApplications`
+ CodePipeline: `ListPipelines`

如果您没有针对某个服务的权限，搜索将不会针对该服务的资源返回结果。即使您有权查看资源，但如果特定资源明确 `Deny` 查看，也不会返回这些资源。