CodeBuild は、AWS Secrets Manager のシークレットから、または AWS CodeConnections 接続を介したサードパーティープロバイダへのアクセストークンの調達をサポートします。シークレットまたは接続は、GitHub 、GitHub Enterprise、Bitbucket などの指定されたサードパーティープロバイダとのやり取りのデフォルトの認証情報として設定できます。
ソース認証情報は、次の 3 つの異なるレベルで設定できます。
-
すべてのプロジェクトのアカウントレベルの認証情報: これらは、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 が他の AWS のサービスとやり取りすることを許可 の手順に従って、CodeBuild プロジェクトの IAM ロールを作成します。
-
次のいずれかを行います。
-
CodeBuild プロジェクトロールに次の IAM ポリシーを追加して、シークレットへのアクセスを許可します。
{ "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>
" } } } ] } -
CodeBuild プロジェクトロールに次の IAM ポリシーを追加して、接続へのアクセスを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeconnections:GetConnectionToken", "codeconnections:GetConnection" ], "Resource": [
<connection-arn>
] } ] }
-
ステップ 3: Secrets Manager または CodeConnections トークンを設定
Secrets Manager トークンまたは CodeConnections トークンを使用して、ソース認証情報を 3 つの異なるレベルで設定できます。
Secrets Manager または CodeConnections トークンをアカウントレベルの認証情報として設定
Secrets Manager シークレットまたは CodeConnections 接続をアカウントレベルの認証情報として設定し、プロジェクトで使用できます。
AWS Management Console でアカウントレベルの認証情報として接続を設定するには
-
[ソースプロバイダ] には、[Bitbucket]、[GitHub]、または [GitHub Enterprise] を選択します。
-
[認証情報] で、次のいずれかを実行します。
-
[デフォルトソース認証情報] を選択し、アカウントのデフォルトソース認証情報を使用して、すべてのプロジェクトに適用します。
-
ソースプロバイダに接続していない場合は、[デフォルトソース認証情報を管理] を選択します。
-
[認証情報タイプ] では、認証情報タイプを選択します。
-
[CodeConnections] を選択した場合は、既存の接続を使用するか、新しい接続を作成します。
別の認証情報タイプを選択した場合は、[サービス] でトークンの保存に使用するサービスを選択し、以下を実行します。
-
[Secrets Manager] を選択した場合は、既存のシークレット接続を使用するか、新しいシークレットを作成して [保存] を選択できます。新しいシークレットの作成方法の詳細については、「Secrets Manager シークレットにトークンを作成して保存」を参照してください。
-
[CodeBuild] を選択した場合は、トークンまたはユーザー名とアプリパスワードを入力し、[保存] を選択します。
-
-
-
[カスタムソース認証情報] を選択し、カスタムソース認証情報を使用してアカウントのデフォルト設定を上書きします。
-
[認証情報タイプ] では、認証情報タイプを選択します。
-
[接続] で、既存の接続を使用するか、新規の接続を作成するかを選択します。
-
-
これで、ビルドプロジェクトでトークンを使用して実行できるようになりました。詳細については、AWS CodeBuild でのビルドプロジェクトの作成およびAWS CodeBuild ビルドを手動で実行を参照してください。
複数のトークンをソースレベルの認証情報として設定
Secrets Manager シークレットまたは CodeConnections 接続をソースレベルの認証情報として使用するには、CodeBuild プロジェクトのトークンを直接参照し、ビルドを開始します。
AWS Management Console で複数のトークンをソースレベルの認証情報として設定するには
-
[ソースプロバイダー] で [GitHub] を選択します。
-
[認証情報] で、次のいずれかを実行します。
-
[デフォルトソース認証情報] を選択し、アカウントのデフォルトソース認証情報を使用して、すべてのプロジェクトに適用します。
-
GitHub に接続していない場合は、[デフォルトソース認証情報を管理] を選択します。
-
[認証情報タイプ] では、[GitHub アプリ] を選択します。
-
[接続] で、既存の接続を使用するか、新規の接続を作成するかを選択します。
-
-
[カスタムソース認証情報] を選択し、カスタムソース認証情報を使用してアカウントのデフォルト設定を上書きします。
-
[認証情報タイプ] では、[GitHub アプリ] を選択します。
-
[接続] で、既存の接続を使用するか、新規の接続を作成するかを選択します。
-
-
-
[ソースを追加] を選択し、ソースプロバイダと認証情報を選択するプロセスを繰り返します。
プロジェクトレベルのソース認証情報のフォールバックを設定
プロジェクトレベルのソース認証情報のフォールバックを設定するには、プロジェクトのプライマリソースに 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