

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

# 带有 AWS Secrets Manager 示例的私有注册表 CodeBuild
<a name="sample-private-registry"></a>

 此示例向您展示如何使用存储在私有注册表中的 Docker 镜像作为 AWS CodeBuild 运行时环境。私有注册表的凭证存储在 AWS Secrets Manager中。任何私有注册表均可使用 CodeBuild。此示例使用 Docker Hub。

**注意**  
密钥对操作可见，在写入文件时不会被屏蔽。

**Topics**
+ [私有注册表示例要求](#sample-private-registry-requirements)
+ [使用私有注册表创建 CodeBuild 项目](private-registry-sample-create-project.md)
+ [为自托管运行程序配置私有注册表凭证](private-registry-sample-configure-runners.md)

## 私有注册表示例要求
<a name="sample-private-registry-requirements"></a>

 要将私有注册表与一起使用 AWS CodeBuild，您必须具备以下条件：
+  一个 Secrets Manager 密钥，用于储存您的 Docker Hub 凭证。该凭证可用于访问您的私有存储库。
**注意**  
您将需要为您创建的密钥付费。
+  一个私有存储库或账户。
+  一项 CodeBuild 服务角色 IAM 策略，用于授予对你的 Secrets Manager 密钥的访问权限。

 按照以下步骤创建这些资源，然后使用存储在私有注册表中的 Docker 镜像创建 CodeBuild 构建项目。

# 使用私有注册表创建 CodeBuild 项目
<a name="private-registry-sample-create-project"></a>

1. 有关如何创建免费的私有存储库的更多信息，请参阅 [Docker Hub 上的存储库](https://docs.docker.com/docker-hub/repos/)。您还可以在终端中运行以下命令来提取映像、获取其ID，并将其推送到新的存储库。

   ```
   docker pull amazonlinux
   docker images amazonlinux --format {{.ID}}
   docker tag image-id your-username/repository-name:tag
   docker login
   docker push your-username/repository-name
   ```

1.  按照《*AWS Secrets Manager 用户指南》*中[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)中的步骤进行操作。

   

   1.  在步骤 3 中，在**选择密钥类型**，选择**其他密钥类型**。

   1. 在**密钥/值对**中，为您的 Docker Hub 用户名创建一个键值对，为您的 Docker Hub 密码创建一个键值对。

   1.  继续按照[创建 AWS Secrets Manager 密钥中的步骤进行](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)操作。

   1.  在步骤 5 中，在**配置自动轮换**页面上，将其关闭，因为密钥对应于您的 Docker Hub 凭证。

   1.  按照[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)中的步骤完成操作。

    有关更多信息，请参阅[什么是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 

1.  在控制台中创建 AWS CodeBuild 项目时，会 CodeBuild 附上所需的权限。如果您使用的 AWS KMS 密钥除外`DefaultEncryptionKey`，则必须将其添加到服务角色中。有关更多信息，请参阅《IAM 用户指南》**中的[修改角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html#roles-managingrole-editing-console)。

    要使您的服务角色与 Secrets Manager 配合使用，它必须至少具有 `secretsmanager:GetSecretValue` 权限。  
![\[服务角色配置。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/private-registry-sample-iam.png)

1.  要使用控制台创建一个具有在私有注册表中存储的环境的项目，请在创建项目时执行以下操作。有关信息，请参阅[创建构建项目（控制台）](create-project.md#create-project-console)。
**注意**  
 如果您的私有注册表位于您的 VPC 中，则它必须具有公共互联网访问权限。 CodeBuild 无法从 VPC 中的私有 IP 地址提取镜像。

   1.  对于**环境映像**，选择**自定义映像**。

   1.  对于**环境类型**，选择 **Linux** 或 **Windows**。

   1.  对于**映像注册表**，请选择**其他注册表**。

   1.  在**外部注册表 URL** 中，输入映像位置，在**注册表凭证 - 可选**中输入您的 Secrets Manager 凭证的 ARN 或名称。
**注意**  
 如果您的凭证在当前区域中不存在，则必须使用 ARN。如果凭证存在于其他区域中，则无法使用凭证名称。

# 为自托管运行程序配置私有注册表凭证
<a name="private-registry-sample-configure-runners"></a>

按照以下说明为自托管运行程序配置注册表凭证。

**注意**  
请注意，只有当映像被私有注册表中的映像覆盖时，才会使用这些凭证。

------
#### [ AWS Management Console ]

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1. 创建构建项目或选择现有项目。有关更多信息，请参阅 [创建构建项目（控制台）](create-project.md#create-project-console) 和 [更改构建项目的设置（控制台）](change-project.md#change-project-console)。

1.  在**环境**中，选择**其他配置**。

1.  在**其他配置**中，输入**注册凭据的密钥名称或 ARN（ AWS Secrets Manager 可选**）。  
![\[注册表凭证配置。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/registry-credential.png)

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

1. 如果要创建一个新项目，请运行 **create-project** 命令。

   ```
   aws codebuild create-project \
       --name project-name \
       --source type=source-type,location=source-location \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn},imagePullCredentialsType=CODEBUILD|SERVICE_ROLE" \
       --artifacts type=artifacts-type \
       --service-role arn:aws:iam::account-ID:role/service-role/service-role-name
   ```

1. 如果要更新现有项目，请运行 **update-project** 命令。

   ```
   aws codebuild update-project \
       --name project-name \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn}"
   ```

------