本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CodeBuild 中的多個存取字符
CodeBuild 支援從 AWS Secrets Manager 中或透過 AWS CodeConnections 連線的秘密,將存取權杖來源至第三方供應商。您可以將秘密或連線設定為與指定第三方供應商互動的預設登入資料,例如 GitHub、GitHub Enterprise 或 Bitbucket。
您可以將來源登入資料設定為三個不同的層級:
-
所有專案的帳戶層級登入資料:這些是 AWS 帳戶中所有專案的預設登入資料。當未指定專案或來源層級登入資料時,它們將用於專案。
-
特定儲存庫的來源層級登入資料:這是在專案來源上定義 Secrets Manager 秘密或 CodeConnections 連線時。這些登入資料只會用於指定來源儲存庫上的操作。這可讓您在相同專案中設定具有不同許可範圍的多個存取權杖,而不使用預設帳戶層級登入資料。
-
專案層級備用憑證:您可以使用
NO_SOURCE
做為主要來源類型來設定專案層級備用憑證,並在其中定義秘密或連線。當您在專案上有多個來源,但想要為它們使用相同的登入資料,或者您不想為專案使用預設帳戶層級登入資料時,即可使用此功能。
主題
步驟 1:建立 Secrets Manager 秘密或 CodeConnections 連線
使用下列指示來建立 Secrets Manager 秘密或 CodeConnections 連線:
步驟 2:授予 CodeBuild 專案 IAM 角色對 Secrets Manager 秘密的存取權
注意
在繼續之前,您必須能夠存取 Secrets Manager 或 CodeConnections 中建立的權杖。
若要授予 CodeBuild 專案 IAM 角色對 Secrets Manager 或 CodeConnections 的存取權,您必須新增下列 IAM 政策。
授予 CodeBuild 專案 IAM 角色存取權
-
遵循 CodeBuild 專案的 指示,為您的 CodeBuild 專案建立 允許 CodeBuild 與其他 AWS 服務互動 IAM 角色。
-
執行以下任意一項:
-
將下列 IAM 政策新增至 CodeBuild 專案角色,以授予對秘密的存取權。
(選用) 如果您使用 AWS KMS 客戶受管金鑰來加密 Secrets Manager 秘密,您可以新增下列政策陳述式來授予存取權。
-
將下列 IAM 政策新增至 CodeBuild 專案角色,以授予連線的存取權。
-
步驟 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/amazonlinux-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/amazonlinux-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