

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

# 安全性 AWS CodeBuild
<a name="security"></a>

云安全 AWS 是重中之重。作为 AWS 客户，您可以受益于专为满足大多数安全敏感型组织的要求而构建的数据中心和网络架构。

安全是双方共同承担 AWS 的责任。[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)将其描述为云*的* 安全性和云*中* 的安全性：
+ **云安全** — AWS 负责保护在云中运行 AWS 服务的基础架构 AWS 云。 AWS 还为您提供可以安全使用的服务。作为 [AWS 合规性计划](https://aws.amazon.com/compliance/programs/)的一部分，第三方审核人员将定期测试和验证安全性的有效性。要了解适用的合规计划 AWS CodeBuild，请参阅[按合规计划划分的范围内的AWS 服务](https://aws.amazon.com/compliance/services-in-scope/)。
+ **云端安全**-您的责任由您使用的 AWS 服务决定。您还需要对其它因素负责，包括您的数据的敏感性、您公司的要求以及适用的法律法规。

本文档可帮助您了解在使用时如何应用分担责任模型 CodeBuild。以下主题向您介绍如何进行配置 CodeBuild 以满足您的安全和合规性目标。您还将学习如何使用其他 AWS 服务来帮助您监控和保护您的 CodeBuild 资源。

**Topics**
+ [

# 中的数据保护 AWS CodeBuild
](data-protection.md)
+ [

# 中的身份和访问管理 AWS CodeBuild
](auth-and-access-control.md)
+ [

# 合规性验证 AWS CodeBuild
](compliance-validation.md)
+ [

# 韧性在 AWS CodeBuild
](codebuild-disaster-recovery-resiliency.md)
+ [

# 中的基础设施安全 AWS CodeBuild
](infrastructure-security.md)
+ [

# 在以下位置访问您的源提供商 CodeBuild
](access-tokens.md)
+ [

# 防止跨服务混淆座席
](cross-service-confused-deputy-prevention.md)

# 中的数据保护 AWS CodeBuild
<a name="data-protection"></a>

分 AWS [担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于中的数据保护 AWS CodeBuild。如本模型所述 AWS ，负责保护运行所有内容的全球基础架构 AWS 云。您负责维护对托管在此基础结构上的内容的控制。您还负责您所使用的 AWS 服务 的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 *AWS Security Blog* 上的 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

出于数据保护目的，我们建议您保护 AWS 账户 凭证并使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 设置个人用户。这样，每个用户只获得履行其工作职责所需的权限。还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 用于 SSL/TLS 与 AWS 资源通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 使用设置 API 和用户活动日志 AWS CloudTrail。有关使用 CloudTrail 跟踪捕获 AWS 活动的信息，请参阅《*AWS CloudTrail 用户指南》*中的[使用跟 CloudTrail 踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解决方案以及其中的所有默认安全控件 AWS 服务。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的敏感数据。
+ 如果您在 AWS 通过命令行界面或 API 进行访问时需要经过 FIPS 140-3 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅《美国联邦信息处理标准（FIPS）第 140-3 版》[https://aws.amazon.com/compliance/fips/](https://aws.amazon.com/compliance/fips/)。

强烈建议您切勿将机密信息或敏感信息（如您客户的电子邮件地址）放入标签或自由格式文本字段（如**名称**字段）。这包括您使用控制台、API CodeBuild 或以其他 AWS 服务 方式使用控制台 AWS CLI、API 或时 AWS SDKs。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供 URL，强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

 为了保护敏感信息， CodeBuild 日志中隐藏了以下内容：
+  在 CodeBuild 项目环境变量或 buildspec `env/parameter-store` 部分中使用参数存储指定的字符串。有关更多信息，请参阅《Amazon EC2 Systems Manager 用户指南》**中的 [Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html) 和 [Systems Manager Parameter Store 控制台演练](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-walk.html#sysman-paramstore-console)。
+  AWS Secrets Manager 在 CodeBuild 项目环境变量或 buildspec `env/secrets-manager` 部分中使用指定的字符串。有关更多信息，请参阅 [密钥管理](security-key-management.md)。

有关数据保护的更多信息，请参阅 *AWS 安全性博客*上的 [AWS 责任共担模式和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

**Topics**
+ [

# 数据加密
](security-encryption.md)
+ [

# 密钥管理
](security-key-management.md)
+ [

# 流量隐私
](security-traffic-privacy.md)

# 数据加密
<a name="security-encryption"></a>

加密是 CodeBuild 安全的重要组成部分。某些加密（例如，针对传输中的数据的加密）是默认提供的，无需您执行任何操作。其他加密（例如，针对静态数据的加密）可在创建项目或构建时进行配置。
+ **静态数据加密**-默认使用 AWS 托管式密钥加密生成工件，例如缓存、日志、导出的原始测试报告数据文件和生成结果。如果您不想使用这些 KMS 密钥，则必须创建并配置一个客户托管密钥。有关更多信息，请参阅《AWS Key Management Service 用户指南》**中的[创建 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)和 [AWS Key Management Service 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)。
  + 您可以将 CodeBuild 用于加密生成输出项目的 AWS KMS 密钥的标识符存储在`CODEBUILD_KMS_KEY_ID`环境变量中。有关更多信息，请参阅 [构建环境中的环境变量](build-env-ref-env-vars.md)。
  + 可以在创建构建项目时指定客户托管密钥。有关更多信息，请参阅 [Set the Encryption Key Using the Console](create-project.md#encryptionkey-console) 和[使用 CLI 设置加密密钥](create-project.md#cli.encryptionkey)。

  默认情况下，您的构建队列的 Amazon Elastic Block Store 卷是使用加密的 AWS 托管式密钥。
+ **传输中的数据加密**-使用签名版本 4 签名流程签名的 TLS 连接保护客户之间 CodeBuild CodeBuild 以及客户之间及其下游依赖关系之间的所有通信。所有 CodeBuild 端点都使用由管理的 SHA-256 证书 AWS 私有证书颁发机构。有关更多信息，请参阅[签名版本 4 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)和[什么是 ACM PCA](https://docs.aws.amazon.com/privateca/latest/userguide/)。
+ **构建构件加密**-与构建项目关联的 CodeBuild 服务角色需要访问 KMS 密钥才能加密其构建输出工件。默认情况下，在您的 AWS 账户中 CodeBuild 使用 AWS 托管式密钥 适用于 Amazon S3 的。如果您不想使用此 AWS 托管式密钥，则必须创建并配置一个客户托管密钥。有关更多信息，请参阅[加密构建输出](setting-up-kms.md)和《AWS KMS 开发人员指南》**中的[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

# 密钥管理
<a name="security-key-management"></a>

可以通过加密保护您的内容免遭未经授权的使用。将您的加密密钥存储在中 AWS Secrets Manager，然后向与构建项目关联的 CodeBuild 服务角色授予从您的 Secrets Manager 账户获取加密密钥的权限。有关更多信息，请参阅[使用客户托管密钥加密构建输出](setting-up-kms.md)、[在 中创建构建项目AWS CodeBuild](create-project.md)、[手动运行 AWS CodeBuild 构建](run-build.md)和[教程：存储和检索密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)。

在生成命令中使用`CODEBUILD_KMS_KEY_ID`环境变量来获取 AWS KMS 密钥标识符。有关更多信息，请参阅 [构建环境中的环境变量](build-env-ref-env-vars.md)。

可以使用 Secrets Manager 保护存储用于运行时环境的 Docker 映像的私有注册表的凭证。有关更多信息，请参阅 [带有 AWS Secrets Manager 示例的私有注册表 CodeBuild](sample-private-registry.md)。

# 流量隐私
<a name="security-traffic-privacy"></a>

您可以通过配置为使用接口 VPC 终端节点 CodeBuild 来提高构建的安全性。为此，您无需互联网网关、NAT 设备或虚拟私有网关。尽管建议这样做 PrivateLink，但也无需进行配置。有关更多信息，请参阅 [使用 VPC 端点](use-vpc-endpoints-with-codebuild.md)。有关 PrivateLink 和 VPC 终端节点的更多信息，请参阅[AWS PrivateLink](https://aws.amazon.com/privatelink/)和[通过访问 AWS 服务 PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Introduction.html#what-is-privatelink)。

# 中的身份和访问管理 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` 查看，也不会返回这些资源。

# 合规性验证 AWS CodeBuild
<a name="compliance-validation"></a>

要了解是否属于特定合规计划的范围，请参阅AWS 服务 “[按合规计划划分的范围](https://aws.amazon.com/compliance/services-in-scope/)” ”，然后选择您感兴趣的合规计划。 AWS 服务 有关一般信息，请参阅[AWS 合规计划AWS](https://aws.amazon.com/compliance/programs/)。

您可以使用下载第三方审计报告 AWS Artifact。有关更多信息，请参阅中的 “[下载报告” 中的 “ AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)。

您在使用 AWS 服务 时的合规责任取决于您的数据的敏感性、贵公司的合规目标以及适用的法律和法规。有关您在使用时的合规责任的更多信息 AWS 服务，请参阅[AWS 安全文档](https://docs.aws.amazon.com/security/)。

# 韧性在 AWS CodeBuild
<a name="codebuild-disaster-recovery-resiliency"></a>

 AWS 全球基础设施是围绕 AWS 区域和可用区构建的。 AWS 区域提供多个物理隔离和隔离的可用区，这些可用区通过低延迟、高吞吐量和高度冗余的网络相连。利用可用区，您可以设计和操作在可用区之间无中断地自动实现失效转移的应用程序和数据库。与传统的单个或多个数据中心基础架构相比，可用区具有更高的可用性、容错性和可扩展性。

有关 AWS 区域和可用区的更多信息，请参阅[AWS 全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/)。

# 中的基础设施安全 AWS CodeBuild
<a name="infrastructure-security"></a>

作为一项托管服务 AWS CodeBuild ，受 AWS 全球网络安全的保护。有关 AWS 安全服务以及如何 AWS 保护基础设施的信息，请参阅[AWS 云安全](https://aws.amazon.com/security/)。要使用基础设施安全的最佳实践来设计您的 AWS 环境，请参阅 S * AWS ecurity Pillar Well-Architected Fram* ework 中的[基础设施保护](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 已发布的 API 调用 CodeBuild 通过网络进行访问。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

# 在以下位置访问您的源提供商 CodeBuild
<a name="access-tokens"></a>

对于我们的 GitHub E GitHub nterprise Server，您可以使用个人访问令牌、Secrets Manager 密钥、连接或 OAuth 应用程序来访问源提供商。对于 Bitbucket，您可以使用访问令牌、应用程序密码、Secrets Manager 密钥、连接或 OAuth 应用程序来访问源提供商。

**Topics**
+ [

# 在 Secrets Manager 密钥中创建和存储令牌
](asm-create-secret.md)
+ [

# GitHub 和 GitHub 企业服务器访问权限 CodeBuild
](access-tokens-github-overview.md)
+ [

# 位桶访问权限在 CodeBuild
](access-tokens-bitbucket-overview.md)
+ [

# GitLab 进入 CodeBuild
](access-tokens-gitlab-overview.md)

# 在 Secrets Manager 密钥中创建和存储令牌
<a name="asm-create-secret"></a>

如果您选择使用 Secrets Manager 来存储访问令牌，则可以使用现有密钥连接或创建新密钥。要创建新密钥，请执行以下操作：

------
#### [ AWS 管理控制台 ]

**要在中创建 Secrets Manager 密钥 AWS 管理控制台**

1. 对于**源提供商**，请选择 **Bitbucket** 或 E **GitHub nter** prise。**GitHub**

1. 对于**凭证**，执行以下操作之一：
   + 选择**默认来源凭证**，使用您账户的默认来源凭证应用于所有项目。

     1. 如果未连接到源提供商，请选择**管理默认来源凭证**。

     1. 对于**凭证类型**，请选择除之外的凭据类型。**CodeConnections**

     1. 对于**服务**，选择 **Secrets Manager**，对于**密钥**，选择**新密钥**。

     1. 在**密钥名称**中，输入密钥的名称。

     1. （可选）在**密钥描述 - 可选**中，为密钥输入描述。

     1. 根据您选择的源提供商，输入您的令牌或用户名和应用程序密码，然后选择**保存**。
   + 选择**自定义来源凭证**，以便使用自定义来源凭证来覆盖您账户的默认设置。

     1. 对于**凭证类型**，请选择除之外的凭据类型。**CodeConnections**

     1. 在**连接**中，选择**创建密钥**。

     1. 在**密钥名称**中，输入密钥的名称。

     1. （可选）在**密钥描述 - 可选**中，为密钥输入描述。

     1. 根据您选择的源提供商，输入您的令牌或用户名和应用程序密码，然后选择**创建**。

------
#### [ AWS CLI ]

**要在中创建 Secrets Manager 密钥 AWS CLI**
+ 打开终端（Linux、macOS 或 Unix）或命令提示符（Windows）。使用运行 S AWS CLI ecrets Manager **create-secret** 命令。

  ```
  aws secretsmanager create-secret --region <aws-region> \
              --name '<secret-name>' \
              --description '<secret-description>' \
              --secret-string '{
                  "ServerType":"<server-type>",
                  "AuthType":"<auth-type>",
                  "Token":"<token>"
                  }' \
              --tags Key=codebuild:source,Value='' \
                  Key=codebuild:source:type,Value=<type> \
                  Key=codebuild:source:provider,Value=<provider>
  ```

   CodeBuild 接受的 Secrets Manager 密钥必须与 CodeBuild 项目位于相同的账户和 AWS 区域中，并且必须采用以下 JSON 格式：

  ```
  {
              "ServerType": ServerType,
              "AuthType: AuthType,
              "Token": string,
              "Username": string // Optional and is only used for Bitbucket app password
          }
  ```    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/asm-create-secret.html)

  此外，在密钥上 CodeBuild 使用以下资源标签，以确保在创建或编辑项目时可以轻松选择密钥。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/asm-create-secret.html)

------

# GitHub 和 GitHub 企业服务器访问权限 CodeBuild
<a name="access-tokens-github-overview"></a>

对于 GitHub，您可以使用个人访问令牌、 OAuth 应用程序、Secrets Manager 密钥或 GitHub 应用程序连接来访问源提供商。对于 E GitHub nterprise Server，您可以使用个人访问令牌、Secrets Manager 密钥或 GitHub 应用程序连接来访问源提供商。

**Topics**
+ [

# GitHub GitHub 和 GitHub 企业服务器的应用程序连接
](connections-github-app.md)
+ [

# GitHub 和 GitHub 企业服务器访问令牌
](access-tokens-github.md)
+ [

# GitHub OAuth 应用程序
](oauth-app-github.md)

# GitHub GitHub 和 GitHub 企业服务器的应用程序连接
<a name="connections-github-app"></a>

您可以使用 GitHub App 进行连接 CodeBuild。 GitHub 通过支持应用程序连接[AWS CodeConnections](https://docs.aws.amazon.com/dtconsole/latest/userguide/welcome-connections.html)。

源提供程序访问权限使您可以通过订阅使用或[教程：配置 CodeBuild托管的 GitHub 操作运行器](action-runner.md)在中[GitHub webhook 事件](github-webhook.md) CodeBuild使用[ CreateWebhook](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_CreateWebhook.html)来触发构建。

**注意**  
CodeConnections 在少于. 的地区中可用 CodeBuild。您可以在中使用跨区域连接。 CodeBuild在选择加入区域创建的连接不能在其他区域中使用。有关更多信息，请参阅 [AWS CodeConnections 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/codestar_connections.html)。

**Topics**
+ [

## 步骤 1：创建与 GitHub 应用程序（控制台）的连接
](#connections-github-console)
+ [

## 步骤 2：向 CodeBuild 项目 IAM 角色授予使用连接的访问权限
](#connections-github-role-access)
+ [

## 步骤 3：配置 CodeBuild 为使用新连接
](#connections-github-account-credential)
+ [对 GitHub 应用程序进行故障排除](#connections-github-troubleshooting)

## 步骤 1：创建与 GitHub 应用程序（控制台）的连接
<a name="connections-github-console"></a>

使用以下步骤使用 CodeBuild 控制台为您的项目添加连接 GitHub。

**要创建与的连接 GitHub**
+ 按照《*开发者工具用户指南》*中的说明进行操作[，创建与的连接 GitHub](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)。

**注意**  
您可以使用其他账户共享的连接，而不是创建或使用 AWS 账户中的现有连接。有关更多信息，请参阅[与 AWS 账户共享连接](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-share.html)。

## 步骤 2：向 CodeBuild 项目 IAM 角色授予使用连接的访问权限
<a name="connections-github-role-access"></a>

您可以授予 CodeBuild 项目 IAM 角色访问权限，以使用您的连接出售的 GitHub 令牌。

**授予 CodeBuild 项目 IAM 角色访问权限**

1. 按照项目的说明为您的 CodeBuild 项目创建 IAM 角色。[CodeBuild 允许与其他 AWS 服务进行交互](setting-up-service-role.md) CodeBuild 

1. 按照说明进行操作时，将以下 IAM 策略添加到您的 CodeBuild 项目角色以授予对连接的访问权限。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "codeconnections:GetConnectionToken",
                   "codeconnections:GetConnection"
               ],
               "Resource": [
                   "arn:aws:iam::*:role/Service*"
               ]
           }
       ]
   }
   ```

------

## 步骤 3：配置 CodeBuild 为使用新连接
<a name="connections-github-account-credential"></a>

您可以将连接配置为账户级别凭证，并在项目中使用。

------
#### [ AWS 管理控制台 ]

**要将连接配置为账户级别的凭证，请参阅 AWS 管理控制台**

1. 对于**源提供商**，请选择**GitHub**。

1. 对于**凭证**，执行以下操作之一：
   + 选择**默认来源凭证**，使用您账户的默认来源凭证应用于所有项目。

     1. 如果您未连接到 GitHub，请选择 “**管理默认来源凭据**”。

     1. 对于 “**凭据类型**”，选择 “**GitHub 应用程序**”。

     1. 在**连接**中，选择使用现有连接或创建新连接。
   + 选择**自定义来源凭证**，以便使用自定义来源凭证来覆盖您账户的默认设置。

     1. 对于 “**凭据类型**”，选择 “**GitHub 应用程序**”。

     1. 在**连接**中，选择使用现有连接或创建新连接。

------
#### [ AWS CLI ]

**要将连接配置为账户级别的凭证，请参阅 AWS CLI**
+ 打开终端（Linux、macOS 或 Unix）或命令提示符（Windows）。 AWS CLI 使用运行**import-source-credentials**命令，`--token`为您的连接指定`--auth-type``--server-type`、和。

  使用以下命令：

  ```
  aws codebuild import-source-credentials --auth-type CODECONNECTIONS --server-type GITHUB --token <connection-arn>
  ```

------

您也可以为 CodeBuild 项目设置多个代币。有关更多信息，请参阅 [将多个令牌配置为源级别凭证](multiple-access-tokens.md#asm-source-credential)。

## GitHub 应用程序问题疑难解答
<a name="connections-github-troubleshooting"></a>

以下信息可以帮助您解决 GitHub 应用程序的常见问题。

**Topics**
+ [

### 在不想要的 GitHub 区域安装应用程序 AWS 连接器
](#connections-github-troubleshooting.undesired-region)
+ [

### GitHub 应用程序连接无权访问存储库
](#connections-github-troubleshooting.repo-access)
+ [

### 该 AWS 服务的 IAM 角色缺少必要的 IAM 权限。
](#connections-github-troubleshooting.iam-permissions)

### 在不想要的 GitHub 区域安装应用程序 AWS 连接器
<a name="connections-github-troubleshooting.undesired-region"></a>

**问题：**您 GitHub 从 GitHub Marketplace 安装了连接 AWS 器，但连接是在不需要的区域创建的。如果您尝试在 GitHub 网站上重新配置应用程序，则该应用程序将无法运行，因为该应用程序已安装在您的 GitHub 帐户中。

**可能的原因：**该应用程序已安装在您的 GitHub 帐户中，因此您只能重新配置应用程序权限。

**推荐的解决方案：**您可以在期望区域使用安装 ID 创建新连接。

1. 在[https://console.aws.amazon.com/codesuite/设置/连接](https://console.aws.amazon.com/codesuite/settings/connections)处打开 CodeConnections 控制台，然后使用控制 AWS 台导航栏中的区域选择器导航到所需区域。

1. 按照《*开发者工具用户指南》*中的说明进行操作[，创建与的连接 GitHub](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)。
**注意**  
由于您已经为 GitHub 应用程序安装了 C AWS onnector，因此您可以选择它来代替安装新应用程序。

### GitHub 应用程序连接无权访问存储库
<a name="connections-github-troubleshooting.repo-access"></a>

**问题：**使用连接的 AWS 服务（例如 CodeBuild 或 CodePipeline）报告它无权访问存储库或存储库不存在。一些可能的错误消息包括：
+ `Authentication required for primary source.`
+ `Unable to create webhook at this time. Please try again later.`
+ `Failed to create webhook. GitHub API limit reached. Please try again later.`

***可能的原因：**您可能一直在使用该 GitHub 应用程序，但尚未授予 webhook 权限范围。*  
**推荐的解决方案：**要授予所需的权限范围，请按照[导航到要查看或修改的 GitHub 应用程序](https://docs.github.com/en/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#navigating-to-the-github-app-you-want-to-review-or-modify)中的说明配置已安装的应用程序。在权限部分下面，您会看到该应用程序没有 webhook 权限，并且您可以选择查看新请求的权限。查看并接受新权限。有关更多信息，请参阅[批准应用程序的更新权限。 GitHub ](https://docs.github.com/en/apps/using-github-apps/approving-updated-permissions-for-a-github-app)

***可能的原因：**连接按预期运行，但突然无权访问存储库。*  
**可能的解决方案：**首先查看您的[授权](https://docs.github.com/en/apps/using-github-apps/reviewing-and-revoking-authorization-of-github-apps)和[安装](https://docs.github.com/en/apps/using-github-apps/reviewing-and-modifying-installed-github-apps)情况，然后验证 GitHub 应用程序是否已授权并已安装。如果 GitHub 应用程序安装已暂停，则需要将其取消暂停。如果 GitHub 应用程序未获得 [UAT（用户访问令牌）](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user)连接的授权，或者未为 [IAT（安装访问令牌）](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation)连接安装该应用程序，则现有连接将无法再使用，您将需要创建一个新连接。请注意，重新安装该 GitHub 应用程序不会恢复与旧安装关联的先前连接。  
**可能的解决方案：**如果连接是 UAT 连接，请确保该连接不是同时使用的，例如在多次 CodeBuild 并发运行的构建中使用该连接。这是因为如果连接刷新了即将到期的令牌，则先前发行的 UAT 会 GitHub 立即失效。如果您需要将 UAT 连接用于多个并发 CodeBuild 构建，则可以创建多个连接并独立使用每个连接。  
**可能的解决方案：**如果在过去 6 个月内未使用过 UAT 连接，则该连接将失效。 GitHub要修复此问题，请创建新的连接。

***可能的原因：**您可能在未安装应用程序的情况下使用 UAT 连接。*  
**推荐的解决方案：**尽管创建 UAT 连接不需要将连接与 GitHub 应用程序安装相关联，但需要安装才能访问存储库。按照说明[查看安装情况](https://docs.github.com/en/apps/using-github-apps/reviewing-and-modifying-installed-github-apps)，确保 GitHub 应用程序已安装。如果未安装，请导航至[GitHub 应用程序页面](https://github.com/marketplace/aws-connector-for-github)以安装该应用程序。有关 UAT 访问权限的更多信息，请参阅[关于用户访问令牌](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app#about-user-access-tokens)。

### 该 AWS 服务的 IAM 角色缺少必要的 IAM 权限。
<a name="connections-github-troubleshooting.iam-permissions"></a>

**问题：**您看到以下任何错误消息：
+ `Access denied to connection <connection-arn>`
+ `Failed to get access token from <connection-arn>`

**推荐的解决方案：**通常使用与 AWS 服务的连接，例如 CodePipeline 或 CodeBuild。当您为 AWS 服务提供 IAM 角色时，该 AWS 服务可以使用该角色的权限代表您执行操作。确保 IAM 角色具有必要的权限。有关必需的 IAM 权限的更多信息，请参阅[向 CodeBuild 项目 IAM 角色授予使用连接的访问](#connections-github-role-access)权限以及[AWS CodeStar 通知的身份和访问管理](https://docs.aws.amazon.com/dtconsole/latest/userguide/security-iam.html)，以及开发者工具控制台用户指南 CodeConnections中的*开发者工具控制台用户指南*。

# GitHub 和 GitHub 企业服务器访问令牌
<a name="access-tokens-github"></a>

## 访问令牌先决条件
<a name="access-tokens-github-prereqs"></a>

在开始之前，必须向 GitHub 访问令牌添加适当的权限范围。

对于 GitHub，您的个人访问令牌必须具有以下范围。
+ **repo**：授予私有存储库的完全控制权。
+ **repo: status：授予对公共和私有仓库提交状态**的 read/write 访问权限。
+ **admin:repo\$1hook**：授予存储库挂钩的完全控制权。如果您的令牌具有 `repo` 范围，则不需要此权限范围。
+ **admin:org\$1hook**：对组织挂钩授予完全控制权限。仅当您使用组织 webhook 特征时，才需要此范围。

有关更多信息，请参阅[了解 GitHub 网站上 OAuth 应用程序的范围](https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/)。

如果您使用的是细粒度个人访问令牌，则根据您的使用场景，您的个人访问令牌可能需要以下权限：
+ **内容：只读**：授予对私有存储库的访问权限。如果使用私有存储库作为源，则需要此权限。
+ **提交状态：读写**：授予创建提交状态的权限。如果您的项目设置了 webhook，或者启用了报告构建状态特征，则需要此权限。
+ **Webhook：读写**：授予管理 webhook 的权限。如果您的项目设置了 webhook，则需要此权限。
+ **拉取请求：只读**：授予访问拉取请求的权限。如果您的 webhook 对拉取请求事件设置了 `FILE_PATH` 筛选条件，则需要此权限。
+ **管理：读写**：如果您使用自托管 GitHub 的 Actions 运行器功能，则需要此权限。 CodeBuild有关更多详细信息，请参阅[为存储库创建注册令牌](https://docs.github.com/en/rest/actions/self-hosted-runners?apiVersion=2022-11-28#create-a-registration-token-for-a-repository)和[教程：配置 CodeBuild托管的 GitHub 操作运行器](action-runner.md)。

**注意**  
如果要访问组织存储库，请务必将该组织指定为访问令牌的资源所有者。

有关更多信息，请参阅网站上的[细粒度个人访问令牌所需的权限](https://docs.github.com/en/rest/authentication/permissions-required-for-fine-grained-personal-access-tokens?apiVersion=2022-11-28)。 GitHub 

## GitHub 使用访问令牌 Connect（控制台）
<a name="access-tokens-github-console"></a>

要使用控制台 GitHub 使用访问令牌将您的项目与之连接，请在创建项目时执行以下操作。有关信息，请参阅[创建构建项目（控制台）](create-project.md#create-project-console)。

1. 对于**源提供商**，请选择**GitHub**。

1. 对于**凭证**，执行以下操作之一：
   + 选择使用账户凭证将您账户的默认源凭证应用于所有项目。

     1. 如果您未连接到 GitHub，请选择 “**管理账户凭证**”。

     1. 对于**凭证类型**，选择**个人访问令牌**。
   + 如果您选择为**服务**使用账户级别凭证，请选择要用于存储令牌的服务，然后执行以下操作：

     1. 如果您选择使用 **Secrets Manager**，则可以选择使用现有密钥连接或创建新密钥，然后选择**保存**。有关如何创建新密钥的更多信息，请参阅[在 Secrets Manager 密钥中创建和存储令牌](asm-create-secret.md)。

     1. 如果您选择使用 **CodeBuild**，请输入您的 GitHub 个人访问令牌，然后选择**保存**。
   + 选择**仅为此项目使用覆盖凭证**，以便使用自定义源凭证来覆盖账户的凭证设置。

     1. 从填充的凭证列表中，选择**个人访问令牌**下的选项之一。

     1. 您也可以通过在描述中选择**创建新的个人访问令牌连接**来创建新的个人访问令牌。

## GitHub 使用访问令牌 (CLI) 连接
<a name="access-tokens-github-cli"></a>

按照以下步骤使用访问令牌将您的项目连接到 GitHub 该项目。 AWS CLI 有关 AWS CLI 搭配使用的信息 AWS CodeBuild，请参阅[命令行参考](cmd-ref.md)。

1. 运行 **import-source-credentials** 命令：

   ```
   aws codebuild import-source-credentials --generate-cli-skeleton
   ```

   输出中将显示 JSON 格式的数据。将数据复制到安装的本地计算机或实例上某个位置的文件（例如`import-source-credentials.json`）。 AWS CLI 按照下面所示修改复制的数据，并保存您的结果。

   ```
   {
       "serverType": "server-type",
       "authType": "auth-type",
       "shouldOverwrite": "should-overwrite",
       "token": "token",
       "username": "username"
       }
   ```

   替换以下内容：
   + *server-type*：必填值。用于此凭证的源提供商。有效值为 GITHUB、BITBUCKET、GITHUB\$1ENTERPRISE、GITLAB 和 GITLAB\$1SELF\$1MANAGED。
   + *auth-type*：必填值。用于连接到存储库的身份验证类型。有效值为 OAUTH、BASIC\$1AUTH、PERSONAL\$1ACCESS\$1TOKEN、CODECONNECTIONS 和 SECRETS\$1MANAGER。对于 GitHub，仅允许使用个人访问令牌。对于 Bitbucket 应用程序密码，仅允许 BASIC\$1AUTH。
   + *should-overwrite*: 可选值。设置为 `false` 可防止覆盖存储库源凭证。设置为 `true` 可覆盖存储库源凭证。默认值为 `true`。
   + *token*：必填值。对于 GitHub 我们的 GitHub 企业服务器，这是个人访问令牌。对于 Bitbucket，这是个人访问令牌或应用程序密码。对于身份验证类型 CODECONNECTIONS，这是连接 ARN。对于身份验证类型 SECRETS\$1MANAGER，这是密钥 ARN。
   + *username*: 可选值。对于 GitHub 和 GitHub 企业服务器源提供程序，将忽略此参数。

1. 要使用访问令牌连接您的账户，请切换到包含您在步骤 1 中保存的 `import-source-credentials.json` 文件的目录，然后重新运行 **import-source-credentials** 命令。

   ```
   aws codebuild import-source-credentials --cli-input-json file://import-source-credentials.json
   ```

   JSON 格式的数据将使用 Amazon 资源名称 (ARN) 显示在输出中。

   ```
   {
       "arn": "arn:aws:codebuild:region:account-id:token/server-type"
       }
   ```
**注意**  
如果您再次使用相同的服务器类型和身份验证类型运行 **import-source-credentials** 命令，则会更新存储的访问令牌。

   在您的账户与访问令牌关联后，您可以使用`create-project`来创建您的 CodeBuild 项目。有关更多信息，请参阅 [创建构建项目 (AWS CLI)](create-project.md#create-project-cli)。

1. 要查看连接的访问令牌，请运行 **list-source-credentials** 命令。

   ```
   aws codebuild list-source-credentials
   ```

   JSON 格式的 `sourceCredentialsInfos` 对象将显示在输出中：

   ```
   {
           "sourceCredentialsInfos": [
               {
                   "authType": "auth-type",
                   "serverType": "server-type", 
                   "arn": "arn"
               }
           ]
       }
   ```

   `sourceCredentialsObject` 包含连接的源凭证信息的列表：
   + `authType` 是凭证使用的身份验证类型。这可以是 `OAUTH`、`BASIC_AUTH`、`PERSONAL_ACCESS_TOKEN`、`CODECONNECTIONS` 或 `SECRETS_MANAGER`。
   + `serverType` 是源提供商类型。这可以是 `GITHUB`、`GITHUB_ENTERPRISE`、`BITBUCKET`、`GITLAB` 或 `GITLAB_SELF_MANAGED`。
   + `arn` 是令牌的 ARN。

1. 要断开与源提供商的连接并删除其访问令牌，请使用其 ARN 运行 **delete-source-credentials** 命令。

   ```
   aws codebuild delete-source-credentials --arn arn-of-your-credentials
   ```

   将返回 JSON 格式的数据，并带有已删除凭证的 ARN。

   ```
   {
       "arn": "arn:aws:codebuild:region:account-id:token/server-type"
       }
   ```

# GitHub OAuth 应用程序
<a name="oauth-app-github"></a>

## GitHub 使用 OAuth （控制台）连接
<a name="oauth-app-github-console"></a>

要使用控制台将您的项目与 GitHub OAuth 应用程序连接起来，请在创建项目时执行以下操作。有关信息，请参阅[创建构建项目（控制台）](create-project.md#create-project-console)。

1. 对于**源提供商**，请选择**GitHub**。

1. 对于**凭证**，执行以下操作之一：
   + 选择使用账户凭证将您账户的默认源凭证应用于所有项目。

     1. 如果您未连接到 GitHub，请选择 “**管理账户凭证**”。

     1. 对于**凭据类型**，请选择**OAuth 应用程序**。
   + 如果您选择为**服务**使用账户级别凭证，请选择要用于存储令牌的服务，然后执行以下操作：

     1. 如果您选择使用 **Secrets Manager**，则可以选择使用现有密钥连接或创建新密钥，然后选择**保存**。有关如何创建新密钥的更多信息，请参阅[在 Secrets Manager 密钥中创建和存储令牌](asm-create-secret.md)。

     1. 如果您选择使用**CodeBuild**然后选择**保存**。
   + 选择**仅为此项目使用覆盖凭证**，以便使用自定义源凭证来覆盖账户的凭证设置。

     1. 从填充的凭据列表中，选择**OAuth 应用程序**下的选项之一。

     1. 您也可以通过在描述中选择 “**创建新 OAuth 的 Oauth 应用程序令牌连接” 来创建新的应用程序令牌**。

要查看您的授权 OAuth 应用程序，请导航到 “开启的[应用程序](https://github.com/settings/applications)” GitHub，并验证是否列出了名为 [aws-codesuite `AWS CodeBuild (region)`](https://github.com/aws-codesuite) 拥有的应用程序。

# 位桶访问权限在 CodeBuild
<a name="access-tokens-bitbucket-overview"></a>

对于 Bitbucket，您可以使用访问令牌、应用程序密码、 OAuth 应用程序或 Bitbucket 连接来访问源提供商。

**Topics**
+ [

# Bitbucket 应用程序连接
](connections-bitbucket-app.md)
+ [

# Bitbucket 应用程序密码或访问令牌
](access-tokens-bitbucket.md)
+ [

# 比特桶应用程序 OAuth
](oauth-app-bitbucket.md)

# Bitbucket 应用程序连接
<a name="connections-bitbucket-app"></a>

你可以使用 Bitbucket 进行连接。 CodeBuild通过 [AWS CodeConnections](https://docs.aws.amazon.com/dtconsole/latest/userguide/welcome-connections.html) 支持 Bitbucket 应用程序连接。

**注意**  
CodeConnections 在少于. 的地区可用 CodeBuild。您可以在中使用跨区域连接。 CodeBuild在选择加入区域创建的连接不能在其他区域中使用。有关更多信息，请参阅 [AWS CodeConnections 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/codestar_connections.html)。

**Topics**
+ [

## 步骤 1：创建到 Bitbucket 的连接（控制台）
](#connections-bitbucket-console)
+ [

## 步骤 2：向 CodeBuild 项目 IAM 角色授予使用连接的访问权限
](#connections-bitbucket-role-access)
+ [

## 步骤 3：配置 CodeBuild 为使用新连接
](#connections-bitbucket-account-credential)

## 步骤 1：创建到 Bitbucket 的连接（控制台）
<a name="connections-bitbucket-console"></a>

使用以下步骤使用 CodeBuild 控制台在 Bitbucket 中为您的项目添加连接。

**要创建到 Bitbucket 的连接**
+ 按照《开发人员工具用户指南》**中的说明来[创建与 Bitbucket 的连接](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-bitbucket.html)。

**注意**  
您可以使用其他账户共享的连接，而不是创建或使用 AWS 账户中的现有连接。有关更多信息，请参阅[与 AWS 账户共享连接](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-share.html)。

## 步骤 2：向 CodeBuild 项目 IAM 角色授予使用连接的访问权限
<a name="connections-bitbucket-role-access"></a>

您可以向 CodeBuild 项目 IAM 角色授予使用您的连接出售的 Bitbucket 令牌的访问权限。

**授予 CodeBuild 项目 IAM 角色访问权限**

1. 按照项目的说明为您的 CodeBuild 项目创建 IAM 角色。[CodeBuild 允许与其他 AWS 服务进行交互](setting-up-service-role.md) CodeBuild 

1. 按照说明进行操作时，将以下 IAM 策略添加到您的 CodeBuild 项目角色以授予对连接的访问权限。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "codeconnections:GetConnectionToken",
                   "codeconnections:GetConnection"
               ],
               "Resource": [
                   "arn:aws:iam::*:role/Service*"
               ]
           }
       ]
   }
   ```

------

## 步骤 3：配置 CodeBuild 为使用新连接
<a name="connections-bitbucket-account-credential"></a>

您可以将连接配置为账户级别凭证，并在项目中使用。

------
#### [ AWS 管理控制台 ]

**要将连接配置为账户级别的凭证，请参阅 AWS 管理控制台**

1. 对于**源提供商**，选择 **Bitbucket**。

1. 对于**凭证**，执行以下操作之一：
   + 选择**默认来源凭证**，使用您账户的默认来源凭证应用于所有项目。

     1. 如果未连接到 Bitbucket，请选择**管理默认来源凭证**。

     1. 对于**凭证类型**，选择**CodeConnections**。

     1. 在**连接**中，选择使用现有连接或创建新连接。
   + 选择**自定义来源凭证**，以便使用自定义来源凭证来覆盖您账户的默认设置。

     1. 对于**凭证类型**，选择**CodeConnections**。

     1. 在**连接**中，选择使用现有连接或创建新连接。

------
#### [ AWS CLI ]

**要将连接配置为账户级别的凭证，请参阅 AWS CLI**
+ 打开终端（Linux、macOS 或 Unix）或命令提示符（Windows）。 AWS CLI 使用运行**import-source-credentials**命令，`--token`为您的连接指定`--auth-type``--server-type`、和。

  使用以下命令：

  ```
  aws codebuild import-source-credentials --auth-type CODECONNECTIONS --server-type BITBUCKET --token <connection-arn>
  ```

------

有关在 CodeBuild 项目中设置多个令牌的更多信息，请参阅[将多个令牌配置为源级别凭证](multiple-access-tokens.md#asm-source-credential)。

# Bitbucket 应用程序密码或访问令牌
<a name="access-tokens-bitbucket"></a>

## 先决条件
<a name="access-tokens-bitbucket-prerequisites"></a>

在开始之前，您必须向 Bitbucket 应用程序密码或访问令牌添加适当的权限范围。

对于 Bitbucket，您的应用程序密码或访问令牌必须具有以下权限范围。
+ **repository:read**：授予对授权用户有权访问的所有存储库的读取访问权限。
+ **pullrequest:read**：授予对拉取请求的读取访问权限。如果您的项目具有 Bitbucket webhook，则您的应用程序密码或访问令牌必须具有此权限范围。
+ **Webhook**：授予对 Webhook 的访问权限。如果您的项目具有 webhook 操作，则您的应用程序密码或访问令牌必须具有此权限范围。
+ **账户**：授予对用户账户信息的读取权限。

有关更多信息，请参阅 [Bitbucket Cloud REST API 的作用域](https://developer.atlassian.com/cloud/bitbucket/bitbucket-cloud-rest-api-scopes/)和 Bitbucket [OAuth 网站上的 Bitbucket Clou](https://confluence.atlassian.com/bitbucket/oauth-on-bitbucket-cloud-238027431.html)

## 使用应用程序密码连接 Bitbucket（控制台）
<a name="access-tokens-bitbucket-password-console"></a>

要在控制台中使用应用程序密码将您的项目连接到 Bitbucket，请在创建项目时执行以下操作。有关信息，请参阅[创建构建项目（控制台）](create-project.md#create-project-console)。

1. 对于**源提供商**，选择 **Bitbucket**。

1. 对于**凭证**，执行以下操作之一：
   + 选择使用账户凭证将您账户的默认源凭证应用于所有项目。

     1. 如果未连接到 Bitbucket，请选择**管理账户凭证**。

     1. 对于**凭证类型**，选择**应用程序密码**。
   + 如果您选择为**服务**使用账户级别凭证，请选择要用于存储令牌的服务，然后执行以下操作：

     1. 如果您选择使用 **Secrets Manager**，则可以选择使用现有密钥连接或创建新密钥，然后选择**保存**。有关如何创建新密钥的更多信息，请参阅[在 Secrets Manager 密钥中创建和存储令牌](asm-create-secret.md)。

     1. 如果您选择使用 **CodeBuild**，请输入您的 Bitbucket 用户名和应用程序密码，然后选择 “**保存**”。
   + 选择**仅为此项目使用覆盖凭证**，以便使用自定义源凭证来覆盖账户的凭证设置。

     1. 从填充的凭证列表中，选择**应用程序密码**下的选项之一。

     1. 您也可以通过在描述中选择**创建新的应用程序密码连接**来创建新的应用程序密码令牌。

## 使用访问令牌连接 Bitbucket（控制台）
<a name="access-tokens-bitbucket-console"></a>

要在控制台中使用访问令牌将您的项目连接到 Bitbucket，请在创建项目时执行以下操作。有关信息，请参阅[创建构建项目（控制台）](create-project.md#create-project-console)。

1. 对于**源提供商**，选择 **Bitbucket**。

1. 对于**凭证**，执行以下操作之一：
   + 选择使用账户凭证将您账户的默认源凭证应用于所有项目。

     1. 如果未连接到 Bitbucket，请选择**管理账户凭证**。

     1. 对于**凭证类型**，选择**个人访问令牌**。
   + 如果您选择为**服务**使用账户级别凭证，请选择要用于存储令牌的服务，然后执行以下操作：

     1. 如果您选择使用 **Secrets Manager**，则可以选择使用现有密钥连接或创建新密钥，然后选择**保存**。有关如何创建新密钥的更多信息，请参阅[在 Secrets Manager 密钥中创建和存储令牌](asm-create-secret.md)。

     1. 如果您选择使用 **CodeBuild**，请输入您的 Bitbucket 个人访问令牌，然后选择 “**保存**”。
   + 选择**仅为此项目使用覆盖凭证**，以便使用自定义源凭证来覆盖账户的凭证设置。

     1. 从填充的凭证列表中，选择**个人访问令牌**下的选项之一。

     1. 您也可以通过在描述中选择**创建新的个人访问令牌连接**来创建新的个人访问令牌。

## 使用应用程序密码或访问令牌连接 Bitbucket（CLI）
<a name="access-tokens-bitbucket-cli"></a>

按照以下步骤使用应用程序密码或访问令牌将您的项目连接到 Bitbucket。 AWS CLI 有关 AWS CLI 搭配使用的信息 AWS CodeBuild，请参阅[命令行参考](cmd-ref.md)。

1. 运行 **import-source-credentials** 命令：

   ```
   aws codebuild import-source-credentials --generate-cli-skeleton
   ```

   输出中将显示 JSON 格式的数据。将数据复制到安装的本地计算机或实例上某个位置的文件（例如`import-source-credentials.json`）。 AWS CLI 按照下面所示修改复制的数据，并保存您的结果。

   ```
   {
       "serverType": "BITBUCKET",
       "authType": "auth-type",
       "shouldOverwrite": "should-overwrite",
       "token": "token",
       "username": "username"
       }
   ```

   替换以下内容：
   + *server-type*：必填值。用于此凭证的源提供商。有效值为 GITHUB、BITBUCKET、GITHUB\$1ENTERPRISE、GITLAB 和 GITLAB\$1SELF\$1MANAGED。
   + *auth-type*：必填值。用于连接到存储库的身份验证类型。有效值为 OAUTH、BASIC\$1AUTH、PERSONAL\$1ACCESS\$1TOKEN、CODECONNECTIONS 和 SECRETS\$1MANAGER。对于 GitHub，仅允许使用个人访问令牌。对于 Bitbucket 应用程序密码，仅允许 BASIC\$1AUTH。
   + *should-overwrite*: 可选值。设置为 `false` 可防止覆盖存储库源凭证。设置为 `true` 可覆盖存储库源凭证。默认值为 `true`。
   + *token*：必填值。对于 GitHub 我们的 GitHub 企业服务器，这是个人访问令牌。对于 Bitbucket，这是个人访问令牌或应用程序密码。对于身份验证类型 CODECONNECTIONS，这是连接 ARN。对于身份验证类型 SECRETS\$1MANAGER，这是密钥 ARN。
   + *username*: 可选值。对于 GitHub 和 GitHub 企业服务器源提供程序，将忽略此参数。

1. 要使用应用程序密码或访问令牌连接您的账户，请切换到包含您在步骤 1 中保存的 `import-source-credentials.json` 文件的目录，然后重新运行 **import-source-credentials** 命令。

   ```
   aws codebuild import-source-credentials --cli-input-json file://import-source-credentials.json
   ```

   JSON 格式的数据将使用 Amazon 资源名称 (ARN) 显示在输出中。

   ```
   {
       "arn": "arn:aws:codebuild:region:account-id:token/server-type"
       }
   ```
**注意**  
如果您再次使用相同的服务器类型和身份验证类型运行 **import-source-credentials** 命令，则会更新存储的访问令牌。

   使用应用程序密码关联账户后`create-project`，您可以使用创建 CodeBuild 项目。有关更多信息，请参阅 [创建构建项目 (AWS CLI)](create-project.md#create-project-cli)。

1. 要查看连接的应用程序密码或访问令牌，请运行 **list-source-credentials** 命令。

   ```
   aws codebuild list-source-credentials
   ```

   JSON 格式的 `sourceCredentialsInfos` 对象将显示在输出中：

   ```
   {
           "sourceCredentialsInfos": [
               {
                   "authType": "auth-type",
                   "serverType": "BITBUCKET", 
                   "arn": "arn"
               }
           ]
       }
   ```

   `sourceCredentialsObject` 包含连接的源凭证信息的列表：
   + `authType` 是凭证使用的身份验证类型。这可以是 `OAUTH`、`BASIC_AUTH`、`PERSONAL_ACCESS_TOKEN`、`CODECONNECTIONS` 或 `SECRETS_MANAGER`。
   + `serverType` 是源提供商类型。这可以是 `GITHUB`、`GITHUB_ENTERPRISE`、`BITBUCKET`、`GITLAB` 或 `GITLAB_SELF_MANAGED`。
   + `arn` 是令牌的 ARN。

1. 要断开与源提供商的连接并删除其应用程序密码或访问令牌，请使用其 ARN 运行 **delete-source-credentials** 命令。

   ```
   aws codebuild delete-source-credentials --arn arn-of-your-credentials
   ```

   将返回 JSON 格式的数据，并带有已删除凭证的 ARN。

   ```
   {
       "arn": "arn:aws:codebuild:region:account-id:token/server-type"
       }
   ```

# 比特桶应用程序 OAuth
<a name="oauth-app-bitbucket"></a>

## 使用 OAuth （控制台）连接 Bitbucket
<a name="oauth-app-bitbucket-console"></a>

要使用控制台通过 OAuth 应用程序将您的项目连接到 Bitbucket，请在创建项目时执行以下操作。有关信息，请参阅[创建构建项目（控制台）](create-project.md#create-project-console)。

1. 对于**源提供商**，选择 **Bitbucket**。

1. 对于**凭证**，执行以下操作之一：
   + 选择使用账户凭证将您账户的默认源凭证应用于所有项目。

     1. 如果未连接到 Bitbucket，请选择**管理账户凭证**。

     1. 对于**凭据类型**，请选择**OAuth 应用程序**。
   + 如果您选择为**服务**使用账户级别凭证，请选择要用于存储令牌的服务，然后执行以下操作：

     1. 如果您选择使用 **Secrets Manager**，则可以选择使用现有密钥连接或创建新密钥，然后选择**保存**。有关如何创建新密钥的更多信息，请参阅[在 Secrets Manager 密钥中创建和存储令牌](asm-create-secret.md)。

     1. 如果您选择使用**CodeBuild**然后选择**保存**。
   + 选择**仅为此项目使用覆盖凭证**，以便使用自定义源凭证来覆盖账户的凭证设置。

     1. 从填充的凭据列表中，选择**OAuth 应用程序**下的选项之一。

     1. 您也可以通过在描述中选择 “**创建新 OAuth 的 Oauth 应用程序令牌连接” 来创建新的应用程序令牌**。

要查看您的授权 OAuth 应用程序，请导航到 Bitbucket 上的[应用程序授权](https://bitbucket.org/account/settings/app-authorizations/)，并确认列出了名`AWS CodeBuild (region)`为的应用程序。

# GitLab 进入 CodeBuild
<a name="access-tokens-gitlab-overview"></a>

对于 GitLab，您可以使用 GitLab 连接来访问源提供商。

**Topics**
+ [

## Connect t CodeBuild o GitLab
](#connections-gitlab)

## Connect t CodeBuild o GitLab
<a name="connections-gitlab"></a>

Connections 允许您使用授权和建立将您的第三方提供商与您的 AWS 资源关联的配置 AWS CodeConnections。要将您的第三方存储库关联为构建项目的源，您应使用连接。

要在中添加 GitLab 或 GitLab 自行管理的源提供商 CodeBuild，您可以选择：
+ 使用 CodeBuild 控制台的 “**创建构建项目**” 向导或 **“编辑源**” 页面选择**GitLab**或**GitLab 自管理**提供程序选项。要添加源提供商，请参阅[创建与 GitLab （控制台）的连接](#connections-gitlab-console)。控制台可帮助您创建连接资源。
+ 使用 CLI 来创建连接资源，请参阅 [创建与 GitLab (CLI) 的连接](#connections-gitlab-cli)，以便使用 CLI 创建连接资源。

**注意**  
您也可以使用开发人员工具控制台，在**设置**下创建连接。参阅[创建连接](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create.html)。

**注意**  
在中授权安装此连接 GitLab，即表示您授予我们的服务权限，通过访问您的账户来处理您的数据，并且您可以随时通过卸载应用程序来撤消这些权限。

### 创建与的连接 GitLab
<a name="connections-gitlab-create"></a>

本节介绍如何连接 GitLab 到 CodeBuild。有关 GitLab 连接的更多信息，请参阅 [Connect t CodeBuild o GitLab](#connections-gitlab)。

开始前的准备工作：
+ 您必须已经使用创建了账户 GitLab。
**注意**  
连接只能访问用于创建并授权连接的账户所拥有的存储库。
**注意**  
您可以创建与拥有**所有者**角色的存储库的连接 GitLab，然后可以将该连接与包含诸如之类的资源的存储库一起使用 CodeBuild。对于群组中的仓库，您无需成为群组拥有者。
+ 要为构建项目指定来源，您必须已经在上创建了存储库 GitLab。

**Topics**
+ [

#### 创建与 GitLab （控制台）的连接
](#connections-gitlab-console)
+ [

#### 创建与 GitLab (CLI) 的连接
](#connections-gitlab-cli)

#### 创建与 GitLab （控制台）的连接
<a name="connections-gitlab-console"></a>

使用以下步骤使用 CodeBuild 控制台为中的项目（存储库）添加连接 GitLab。

**注意**  
您可以使用其他账户共享的连接，而不是创建或使用 AWS 账户中的现有连接。有关更多信息，请参阅[与 AWS 账户共享连接](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-share.html)。

**创建或编辑您的构建项目**

1. 登录 CodeBuild 控制台。

1. 选择下列选项之一。
   + 选择创建构建项目。按照中的[创建构建项目（控制台）](create-project.md#create-project-console)步骤完成第一个屏幕，然后在 “**来源**” 部分的 “**源提供者**” 下选择**GitLab**。
   + 选择编辑现有构建项目。选择**编辑**，然后选择**源**。在 **“编辑源”** 页面的 “**源提供商**” 下，选择**GitLab**。

1. 选择下列选项之一：
   + 在**连接**下，选择**默认连接**。默认连接将默认 GitLab 连接应用于所有项目。
   + 在**连接**下，选择**自定义连接**。自定义连接应用的自定义 GitLab连接会覆盖您账户的默认设置。

1. 请执行以下操作之一：
   + 在 “**默认连接**” 或 “**自定义连接**” 下，如果您尚未创建与提供商的连接，请选择**创建新 GitLab连接**。继续执行步骤 5，以便创建连接。
   + 在**连接**下，如果您已创建到提供程序的连接，请选择该连接。继续执行步骤 10。
**注意**  
如果在创建 GitLab 连接之前关闭了弹出窗口，则需要刷新页面。

1. 要创建与 GitLab 存储库的连接，**请在 “选择提供商”** 下选择**GitLab**。在**连接名称**中，输入要创建的连接的名称。选择 **Connect to GitLab**。  
![\[显示所选连接选项的控制台屏幕截图 GitLab。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/connections-create-gitlab.png)

1.  GitLab 显示的登录页面时，使用您的凭据登录，然后选择**登录**。

1. 如果这是您首次授权连接，则会显示一个授权页面，其中包含一条消息，请求授权该连接访问您的 GitLab 账户。

   选择**授权**。  
![\[屏幕截图显示了授权您的 GitLab 账户连接的消息。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/gitlab-authorization.png)

1. 浏览器返回到连接控制台页面。在 **“GitLab 连接设置”** 下，新连接显示在 “**连接名称**” 中。

1. 选择**连接**。

   成功创建 GitLab 连接后，将在顶部显示成功横幅。

1. 在**创建构建项目**页面的**默认连接**或**自定义连接**下拉列表中，确保列出了您的连接 ARN。如果未列出，请点击刷新按钮以使其显示。

1. 在 **Reposit** or GitLab y 中，通过使用命名空间指定项目路径来选择项目名称。例如，对于组级存储库，请按以下格式输入存储库名称：`group-name/repository-name`。有关路径和命名空间的更多信息，请参阅 [https://docs.gitlab.com/ee/api/p get-single-project](https://docs.gitlab.com/ee/api/projects.html#get-single-project) rojects.ht `path_with_namespace` ml\$1 中的字段。有关中 GitLab命名空间的更多信息，请参阅 [https://docs.gitlab.com/ee/user/namespace/](https://docs.gitlab.com/ee/user/namespace/)。
**注意**  
对于中的群组 GitLab，必须使用命名空间手动指定项目路径。例如，对于组 `mygroup` 中名为 `myrepo` 的存储库，请输入以下内容：`mygroup/myrepo`。您可以在的 URL 中找到带有命名空间的项目路径 GitLab。

   

1. 在**源版本 - 可选**中，输入拉取请求 ID、分支、提交 ID、标签或引用以及提交 ID。有关更多信息，请参阅 [源版本示例 AWS CodeBuild](sample-source-version.md)。
**注意**  
我们建议您选择看起来不像提交的 Git 分支名称 IDs，例如`811dd1ba1aba14473856cee38308caed7190c0d`或`5392f7`。这可以帮助您避免 Git 签出与实际提交发生冲突。

   

1. 在 **Git 克隆深度 - 可选**中，可以创建一个浅克隆，其历史记录会截断至指定数量的提交。如果您需要完整克隆，请选择**完整**。

1. 在**构建状态 - 可选**中，如果您希望向源提供商报告构建的开始和完成状态，请选择**在构建开始和完成时向源提供商报告构建状态**。

   为了能够向源提供商报告构建状态，与源提供商关联的用户必须拥有对存储库的写入权限。如果用户没有写入权限，则无法更新构建状态。有关更多信息，请参阅 [源提供商访问权限](access-tokens.md)。

#### 创建与 GitLab (CLI) 的连接
<a name="connections-gitlab-cli"></a>

您可以使用 AWS Command Line Interface (AWS CLI) 来创建连接。

为此，请使用 **create-connection** 命令。

**重要**  
默认情况下，通过 AWS CLI 或创建的连接 AWS CloudFormation 处于`PENDING`状态。使用 CLI 或创建连接后 CloudFormation，使用控制台编辑连接以使其处于状态`AVAILABLE`。

**创建连接**
+ 按照*开发者工具控制台用户指南*中的[创建连接 GitLab (CLI) 中的说明进行](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gitlab.html#connections-create-gitlab-cli)操作。

# 防止跨服务混淆座席
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理问题是一个安全性问题，即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 AWS，跨服务模仿可能会导致混乱的副手问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务，使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况， AWS 提供可帮助您保护所有服务的数据的工具，而这些服务中的服务主体有权限访问账户中的资源。

我们建议在资源策略中使用[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全局条件上下文密钥来限制为资源 AWS CodeBuild 提供其他服务的权限。如果您只希望将一个资源与跨服务访问相关联，请使用。`aws:SourceArn`如果您想允许该账户中的任何资源与跨服务使用操作相关联，请使用。`aws:SourceAccount`

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符字符（`*`）的 `aws:SourceArn` 全局上下文条件键。例如 `arn:aws:codebuild:*:123456789012:*`。

如果 `aws:SourceArn` 值不包含账户 ID，例如 Amazon S3 存储桶 ARN，您必须使用两个全局条件上下文键来限制权限。

的值`aws:SourceArn`必须是 CodeBuild 项目 ARN。

以下示例显示了如何在中使用`aws:SourceArn`和`aws:SourceAccount`全局条件上下文键 CodeBuild 来防止出现混淆的副手问题。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "codebuild.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject"
                }
            }
        }
    ]
}
```

------