本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
多個訪問令牌 CodeBuild
CodeBuild 支持從您的秘密 AWS Secrets Manager 或通過 AWS CodeConnections 連接向第三方提供商採購訪問令牌。您可以將密碼或連線設定為與指定協力廠商提供者 (例如 GitHub GitHub 企業或 Bitbucket) 互動的預設憑證。
您可以在三個不同層級設定來源認證:
-
所有專案的帳戶層級憑證:這些是 AWS 帳戶中所有專案的預設憑證。如果未指定專案或來源層級認證,則會在專案中使用它們。
-
特定儲存庫的來源層級認證:這是在專案來源上定義 Secrets Manager 密碼或 CodeConnections 連線的時候。這些證明資料只會用於指定來源儲存區域的作業。這使您可以在同一項目中設置具有不同權限範圍的多個訪問令牌,而不使用默認帳戶級憑據。
-
專案層級後援認證:您可以使用
NO_SOURCE
作為主要來源類型來設定專案層級後援認證,並在其上定義密碼或連線。當您在一個項目上有多個源,但想要為它們使用相同的憑據,或者當您不想為項目使用默認帳戶級憑據時,可以使用此功能。
主題
步驟 1:建立密碼管理員密碼或 CodeConnections 連線
使用下列指示來建立密碼管理員密碼或 CodeConnections 連線:
步驟 2:將 CodeBuild 專案IAM角色存取權授與 Secrets Manager
注意
在您繼續之前,您必須能夠存取在 Secrets Manager 或中建立的權杖 CodeConnections。
若要將 CodeBuild 專案IAM角色存取權授予 Secrets Manager CodeConnections,或者,您必須新增下列IAM原則。
若要授與 CodeBuild 專案IAM角色存取權
-
依照 CodeBuild 專案的指示,為您的專 CodeBuild 案建立IAM角色。允許 AWS 與其他 服務 CodeBuild 互動
-
執行以下任意一項:
-
將下列IAM原則新增至您的 CodeBuild 專案角色,以授與密碼的存取權。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "
<secret-arn>
" ] } ] }(選擇性) 如果您使用 AWS KMS 客戶管理的金鑰來加密 Secrets Manager 密碼,您可以新增下列原則陳述式來授與存取權。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "
<kms-key-arn>
", "Condition": { "StringEquals": { "kms:EncryptionContext:SecretARN": "<secret-arn>
" } } } ] } -
將下列IAM原則新增至您的 CodeBuild 專案角色,以授與連線的存取權。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeconnections:GetConnectionToken", "codeconnections:GetConnection" ], "Resource": [
<connection-arn>
] } ] }
-
步驟 3:設定 Secrets Manager 或 CodeConnections 權杖
您可以使用 Secrets Manager 或 CodeConnections 權杖,在三個不同層級設定來源認證。
將 Secrets Manager 或 CodeConnections 權杖設定為帳戶層級認證
您可以將 Secrets Manager 密碼或 CodeConnections 連線設定為帳戶層級認證,並在專案中使用它。
現在,您可以在構建項目中使用令牌並運行它。如需詳細資訊,請參閱 在 中建立建置專案 AWS CodeBuild 和 手動執行 AWS CodeBuild 建置。
將多個權杖設定為來源層級認證
若要使用 Secrets Manager 密碼或 CodeConnections 連線做為來源層級認證,請直接參考 CodeBuild 專案中的權杖,然後啟動組建。
設置項目級源憑據後備
要設置項目級別源憑據回退,請用NO_SOURCE
於項目的主要源並引用令牌。
aws codebuild create-project \ --name
<project-name>
\ --service-role<service-role-name>
\ --artifacts type=NO_ARTIFACTS \ --environment "type=LINUX_CONTAINER, computeType=BUILD_GENERAL1_SMALL, image=aws/codebuild/amazonlinux2-x86_64-standard:5.0" \ --service-role<service-role-name>
\ --source "type=NO_SOURCE, auth={type=SECRETS_MANAGER,resource=<secret-or-connection-arn>
}, buildspec=<buildspec>
" --secondary-sources "type=GITHUB, location=<github-repository>
, sourceIdentifier=secondary" aws codebuild start-build --region<aws-region>
--project-name<project_name>
使用時NO_SOURCE,buildspec 通常在源模型中提供,因為它沒有直接配置為使用外部源來獲取 buildspec。通常,NO_SOURCE
源代碼將處理從 buildspec 中克隆所有相關的存儲庫。為了確保配置的憑證可用於這些操作,您可以在 buildspec 中啟用該git-credential-helper
選項。
env: git-credential-helper: yes
在構建過程中, CodeBuild 將從配置的令牌中讀取該AuthServer
字段,並將令牌憑據用於向該特定第三方源提供程序的所有 git 請求。
其他設定選項
您可以使用 AWS CloudFormation 範本來設定 Secrets Manager 帳戶層級認證。您可以使用下列 AWS CloudFormation 範本來設定帳戶層級認證:
Parameters: GitHubToken: Type: String NoEcho: true Default: placeholder Resources: CodeBuildAuthTokenSecret: Type: AWS::SecretsManager::Secret Properties: Description: CodeBuild auth token Name: codebuild-auth-token SecretString: !Join - '' - - '{"ServerType":"GITHUB","AuthType":"PERSONAL_ACCESS_TOKEN","Token":"' - !Ref GitHubToken - '"}' Tags: - Key: codebuild:source:provider Value: github - Key: codebuild:source:type Value: personal_access_token CodeBuildSecretsManagerAccountCredential: Type: AWS::CodeBuild::SourceCredential Properties: ServerType: GITHUB AuthType: SECRETS_MANAGER Token: !Ref CodeBuildAuthTokenSecret
注意
如果您還在同一堆棧中創建項目,請使用該 AWS CloudFormation 屬性DependsOn以確保在項AccountCredential
目之前創建該項目。
您也可以使用 AWS CloudFormation 範本來設定 Secrets Manager 多個來源層級認證。您可以使用以下 AWS CloudFormation 模板使用多個令牌來提取多個源:
Parameters: GitHubTokenOne: Type: String NoEcho: true Default: placeholder GitHubTokenTwo: Type: String NoEcho: true Default: placeholder Resources: CodeBuildSecretsManagerProject: Type: AWS::CodeBuild::Project Properties: Name: codebuild-multitoken-example ServiceRole:
<service-role>
Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/amazonlinux2-x86_64-standard:5.0 Source: Type: GITHUB Location:<github-repository-one>
Auth: Type: SECRETS_MANAGER Resource: !Ref CodeBuildAuthTokenSecretOne SecondarySources: - Type: GITHUB Location:<github-repository-two>
Auth: Type: SECRETS_MANAGER Resource: !Ref CodeBuildAuthTokenSecretTwo SourceIdentifier: secondary Artifacts: Type: NO_ARTIFACTS LogsConfig: CloudWatchLogs: Status: ENABLED CodeBuildProjectIAMRoleSecretAccess: Type: AWS::IAM::RolePolicy Properties: RoleName:<role-name>
PolicyName: CodeBuildProjectIAMRoleSecretAccessPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - secretsmanager:GetSecretValue Resource: - !Ref CodeBuildAuthTokenSecretOne - !Ref CodeBuildAuthTokenSecretTwo CodeBuildAuthTokenSecretOne: Type: AWS::SecretsManager::Secret Properties: Description: CodeBuild auth token one Name: codebuild-auth-token-one SecretString: !Join - '' - - '{"ServerType":"GITHUB","AuthType":"PERSONAL_ACCESS_TOKEN","Token":"' - !Ref GitHubTokenOne - '"}' Tags: - Key: codebuild:source:provider Value: github - Key: codebuild:source:type Value: personal_access_token CodeBuildAuthTokenSecretTwo: Type: AWS::SecretsManager::Secret Properties: Description: CodeBuild auth token two Name: codebuild-auth-token-two SecretString: !Join - '' - - '{"ServerType":"GITHUB","AuthType":"PERSONAL_ACCESS_TOKEN","Token":"' - !Ref GitHubTokenTwo - '"}' Tags: - Key: codebuild:source:provider Value: github - Key: codebuild:source:type Value: personal_access_token