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

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

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

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

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

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

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

  3. プロジェクトレベルのフォールバック認証情報: プライマリソースタイプとして 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 ロールにアクセスを許可するには
  1. CodeBuild プロジェクトの CodeBuild が他の AWS のサービスとやり取りすることを許可 の手順に従って、CodeBuild プロジェクトの IAM ロールを作成します。

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

    • 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
でアカウントレベルの認証情報として接続を設定するには AWS Management Console
  1. [ソースプロバイダ] には、[Bitbucket][GitHub]、または [GitHub Enterprise] を選択します。

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

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

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

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

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

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

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

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

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

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

      2. [接続] で、既存の接続を使用するか、新規の接続を作成することを選択します。

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

    次のコマンドを使用して 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>

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

これで、ビルドプロジェクトでトークンを使用して実行できるようになりました。詳細については、でビルドプロジェクトを作成する 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) を開きます。を使用して create-project コマンド AWS CLI を実行します。

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

    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/amazonlinux-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/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