

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

# 具有 CodeBuild AWS Secrets Manager 範例的私有登錄檔
<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，您必須具有下列項目：
+  存放 Docker Hub 登入資料的 Secrets Manager 秘密。這些登入資料會用來存取您的私有儲存庫。
**注意**  
您需要為建立的秘密付費。
+  私有儲存庫或帳戶。
+  授予 Secrets Manager 秘密存取權的 CodeBuild 服務角色 IAM 政策。

 請依照下列步驟建立這些資源，然後使用存放在私有登錄檔中的 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_tw/codebuild/latest/userguide/images/private-registry-sample-iam.png)

1.  若要使用主控台搭配私有登錄檔中所儲存的環境來建立專案，請在建立專案的同時執行下列動作。如需相關資訊，請參閱[建立組建專案 (主控台)](create-project.md#create-project-console)。
**注意**  
 如果您的私有登錄檔位於 VPC 中，則必須具有公有網際網路存取。CodeBuild 無法從 VPC 中的私有 IP 地址提取映像。

   1.  在**環境映像**中，選擇**自訂映像**。

   1.  針對 **Environment type (環境類型)**，選擇 **Linux** 或 **Windows**。

   1.  針對**映像登錄**檔，選擇**其他登錄檔**。

   1.  在**外部登錄 URL** 中，輸入映像位置，然後在**登錄登入資料中 - 選擇性**輸入 Secrets Manager 登入資料的 ARN 或名稱。
**注意**  
 如果您目前所在區域不存在您的登入資料，則您必須使用 ARN。如果登入資料存在於不同的區域，則無法使用登入資料名稱。

# 設定自我託管執行器的私有登錄登入資料
<a name="private-registry-sample-configure-runners"></a>

使用下列指示來設定自我託管執行器的登錄登入資料。

**注意**  
請注意，只有在映像被私有登錄檔的映像覆寫時，才會使用這些登入資料。

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

1. 在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

1. 建立建置專案或選取現有的專案。如需詳細資訊，請參閱 [建立組建專案 (主控台)](create-project.md#create-project-console) 及 [變更建置專案的設定 (主控台)](change-project.md#change-project-console)。

1.  在**環境中**，選擇**其他組態**。

1.  **在其他組態**中，輸入來自 的秘密名稱或 ARN AWS Secrets Manager for **Registry 登入資料 - 選用**。  
![\[登錄檔登入資料組態。\]](http://docs.aws.amazon.com/zh_tw/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}"
   ```

------