の複数のアクセストークン CodeBuild - AWS CodeBuild

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

の複数のアクセストークン CodeBuild

CodeBuild は、 内 AWS Secrets Manager または AWS CodeConnections 接続を介したシークレットからのサードパーティープロバイダーへのアクセストークンの調達をサポートします。シークレットまたは接続は、、 GitHub GitHub エンタープライズ、Bitbucket などの指定されたサードパーティープロバイダーとのやり取りのデフォルトの認証情報として設定できます。

ソース認証情報は、次の 3 つの異なるレベルで設定できます。

  1. すべてのプロジェクトのアカウントレベルの認証情報: これらは AWS 、アカウント内のすべてのプロジェクトのデフォルトの認証情報です。これらは、プロジェクトまたはソースレベルの認証情報が指定されていない場合、プロジェクトで使用されます。

  2. 特定のリポジトリのソースレベルの認証情報: これは、プロジェクトソースで Secrets Manager のシークレットまたは CodeConnections 接続が定義されている場合です。これらの認証情報は、指定されたソースリポジトリでのオペレーションにのみ使用されます。これにより、同じプロジェクト内で異なるアクセス許可スコープを持つ複数のアクセストークンをセットアップでき、デフォルトのアカウントレベルの認証情報を使用することはできません。

  3. プロジェクトレベルのフォールバック認証情報: をプライマリソースタイプNO_SOURCEとして使用して、プロジェクトレベルのフォールバック認証情報を設定し、そこにシークレットまたは接続を定義できます。これは、プロジェクトに複数のソースがあるが、それらのソースに同じ認証情報を使用する場合、またはプロジェクトにデフォルトのアカウントレベルの認証情報を使用しない場合に使用できます。

ステップ 1: Secrets Manager シークレットまたは CodeConnections 接続を作成する

Secrets Manager シークレットまたは CodeConnections 接続を作成するには、次の手順に従います。

ステップ 2: Secrets Manager シークレットへのアクセス権を CodeBuild プロジェクトIAMロールに付与する

注記

続行する前に、Secrets Manager または で作成されたトークンにアクセスできる必要があります CodeConnections。

Secrets Manager または へのアクセス権を CodeBuild プロジェクトIAMロールに付与するには CodeConnections、次のIAMポリシーを追加する必要があります。

CodeBuild プロジェクトIAMロールにアクセス権を付与するには
  1. CodeBuild プロジェクトの の手順に従って、 CodeBuild プロジェクトの IAMロール CodeBuild が他の AWS サービスとやり取りすることを許可するを作成します。

  2. 次のいずれかを行います。

    • 次の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 トークンを使用して、ソース認証情報を 3 つの異なるレベルで設定できます。

Secrets Manager または CodeConnections トークンをアカウントレベルの認証情報として設定する

Secrets Manager のシークレットまたは CodeConnections 接続をアカウントレベルの認証情報として設定し、プロジェクトで使用できます。

AWS Management Console
でアカウントレベルの認証情報として接続を設定するには AWS Management Console
  1. ソースプロバイダー で、Bitbucket GitHub、またはGitHub エンタープライズ を選択します。

  2. 認証情報 では、次のいずれかを実行します。

    • デフォルトのソース認証情報を選択して、アカウントのデフォルトのソース認証情報を使用してすべてのプロジェクトに適用します。

      1. ソースプロバイダーに接続していない場合は、デフォルトのソース認証情報の管理 を選択します。

      2. 認証情報タイプ で、認証情報タイプを選択します。

      3. を選択した場合はCodeConnections、既存の接続を使用するか、新しい接続を作成するかを選択します。

        別の認証情報タイプを選択した場合は、 サービスでトークンの保存に使用するサービスを選択し、次の操作を行います。

        • Secrets Manager の使用を選択した場合は、既存のシークレット接続を使用するか、新しいシークレットを作成して の保存 を選択できます。新しいシークレットを作成する方法の詳細については、「」を参照してくださいSecrets Manager シークレットにトークンを作成して保存する

        • の使用を選択した場合はCodeBuild、トークンまたはユーザー名とパスワードを入力し、保存 を選択します。

    • カスタムソース認証情報を選択して、カスタムソース認証情報を使用してアカウントのデフォルト設定を上書きします。

      1. 認証情報タイプ で、認証情報タイプを選択します。

      2. 接続 で、既存の接続を使用するか、新しい接続を作成するかを選択します。

AWS CLI
でアカウントレベルの認証情報として接続を設定するには AWS CLI
  • ターミナル (Linux/macOS/Unix) またはコマンドプロンプト (Windows) を開きます。 AWS CLI を使用して import-source-credentials コマンドを実行します。

    Secrets Manager シークレットを設定するには、次のコマンドを使用します。

    aws codebuild import-source-credentials \ --token "<secret-arn>" \ --server-type <source-provider> \ --auth-type SECRETS_MANAGER \ --region <aws-region>

    CodeConnections 接続を設定するには、次のコマンドを使用します。

    aws codebuild import-source-credentials \ --token "<connection-arn>" \ --server-type <source-provider> \ --auth-type CODECONNECTIONS \ --region <aws-region>

    このコマンドを使用すると、アカウントレベルのデフォルトのソース認証情報としてトークンをインポートできます。を使用して認証情報をインポートするとAPI、 ImportSourceCredentials CodeBuild は、プロジェクトでより具体的な認証情報のセットが設定されていない限り、ウェブフック、ビルドステータスレポート、git クローンオペレーションなど、ソースプロバイダーとのすべてのやり取りにトークンを使用します。

トークンをビルドプロジェクトで使用して実行できるようになりました。詳細については、「でビルドプロジェクトを作成する AWS CodeBuild」および「AWS CodeBuild ビルドを手動で実行する」を参照してください。

ソースレベルの認証情報として複数のトークンを設定する

Secrets Manager のシークレットまたは CodeConnections 接続をソースレベルの認証情報として使用するには、 CodeBuild プロジェクト内のトークンを直接参照し、ビルドを開始します。

AWS Management Console
でソースレベルの認証情報として複数のトークンを設定するには AWS Management Console
  1. ソースプロバイダー で、 を選択しますGitHub

  2. 認証情報 では、次のいずれかを実行します。

    • デフォルトのソース認証情報を選択して、アカウントのデフォルトのソース認証情報を使用してすべてのプロジェクトに適用します。

      1. に接続していない場合は GitHub、デフォルトのソース認証情報の管理 を選択します。

      2. 認証情報タイプ でGitHub アプリケーション を選択します。

      3. 接続 で、既存の接続を使用するか、新しい接続を作成するかを選択します。

    • カスタムソース認証情報を選択して、カスタムソース認証情報を使用してアカウントのデフォルト設定を上書きします。

      1. 認証情報タイプ でGitHub アプリ を選択します。

      2. 接続 で、既存の接続を使用するか、新しい接続を作成するかを選択します。

  3. ソースを追加を選択し、ソースプロバイダーと認証情報を選択するプロセスを繰り返します。

AWS CLI
でソースレベルの認証情報として複数のトークンを設定するには AWS CLI
  • ターミナル (Linux/macOS/Unix) またはコマンドプロンプト (Windows) を開きます。 AWS CLI を使用して create-project コマンドを実行します。

    以下のコマンドを使用します。

    aws codebuild create-project --region <aws-region> \ --name <project-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=GITHUB, location=<github-repository-1>, auth={type=SECRETS_MANAGER,resource=<secret-or-connection-arn-1>}" \ --secondary-sources "type=GITHUB, location=<github-repository-2>, auth={type=SECRETS_MANAGER,resource=<secret-or-connection-arn-2>}, sourceIdentifier=secondary" aws codebuild start-build --region <aws-region> --project-name <project-name>

プロジェクトレベルのソース認証情報のフォールバックを設定する

プロジェクトレベルのソース認証情報のフォールバックを設定するには、プロジェクトのプライマリソース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 属性を使用して、プロジェクトの前に AccountCredential が作成されDependsOnていることを確認します。

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