

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

# CodeBuild の複数のアクセストークン
<a name="multiple-access-tokens"></a>

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

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

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

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

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

**Topics**
+ [ステップ 1: Secrets Manager シークレットまたは CodeConnections 接続を作成](#create-secret-connection)
+ [ステップ 2: CodeBuild プロジェクトの IAM ロールに Secrets Manager シークレットへのアクセスを許可](#asm-role-access)
+ [ステップ 3: Secrets Manager または CodeConnections トークンを設定](#asm-account-credential)
+ [追加のセットアップオプション](#asm-credential-cfn)

## ステップ 1: Secrets Manager シークレットまたは CodeConnections 接続を作成
<a name="create-secret-connection"></a>

Secrets Manager シークレットまたは CodeConnections 接続を作成するには、次の手順に従います。
+ [Secrets Manager シークレットにトークンを作成して保存](asm-create-secret.md).
+ [GitHub への接続を作成](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-github.html)
+ [GitHub Enterprise Server への接続を作成](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-gheserver.html)
+ [Bitbucket への接続を作成](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create-bitbucket.html)

## ステップ 2: CodeBuild プロジェクトの IAM ロールに Secrets Manager シークレットへのアクセスを許可
<a name="asm-role-access"></a>

**注記**  
続行する前に、Secrets Manager または CodeConnections で作成されたトークンにアクセスできるようにしておく必要があります。

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

**CodeBuild プロジェクトの IAM ロールにアクセスを許可するには**

1. CodeBuild プロジェクトの [CodeBuild が他の AWS サービスとやり取りすることを許可する](setting-up-service-role.md) の手順に従って、CodeBuild プロジェクトの IAM ロールを作成します。

1. 次のいずれかを行います。
   + CodeBuild プロジェクトロールに次の IAM ポリシーを追加して、シークレットへのアクセスを許可します。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "secretsmanager:GetSecretValue"
                 ],
                 "Resource": [
                     "arn:aws:iam::*:role/Service*"
                 ]
             }
         ]
     }
     ```

------

     (オプション) AWS KMS カスタマーマネージドキーを使用して Secrets Manager シークレットを暗号化する場合は、次のポリシーステートメントを追加してアクセスを許可できます。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "kms:Decrypt"
                 ],
                 "Resource": "arn:aws:iam::*:role/Service*",
                 "Condition": {
                     "StringEquals": {
                         "kms:EncryptionContext:SecretARN": "arn:aws:iam::*:role/Service*"
                     }
                 }
             }
         ]
     }
     ```

------
   + CodeBuild プロジェクトロールに次の IAM ポリシーを追加して、接続へのアクセスを許可します。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "codeconnections:GetConnectionToken",
                     "codeconnections:GetConnection"
                 ],
                 "Resource": [
                     "arn:aws:iam::*:role/Service*"
                 ]
             }
         ]
     }
     ```

------

## ステップ 3: Secrets Manager または CodeConnections トークンを設定
<a name="asm-account-credential"></a>

Secrets Manager トークンまたは CodeConnections トークンを使用して、ソース認証情報を 3 つの異なるレベルで設定できます。

### Secrets Manager または CodeConnections トークンをアカウントレベルの認証情報として設定
<a name="asm-account-credential"></a>

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

------
#### [ AWS マネジメントコンソール ]

**でアカウントレベルの認証情報として接続を設定するには AWS マネジメントコンソール**

1. **[ソースプロバイダ]** には、**[Bitbucket]**、**[GitHub]**、または **[GitHub Enterprise]** を選択します。

1. **[認証情報]** で、次のいずれかを実行します。
   + **[デフォルトソース認証情報]** を選択し、アカウントのデフォルトソース認証情報を使用して、すべてのプロジェクトに適用します。

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

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

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

        別の認証情報タイプを選択した場合は、**[サービス]** でトークンの保存に使用するサービスを選択し、以下を実行します。
        + **[Secrets Manager]** を使用することを選択した場合は、既存のシークレット接続を使用するか、新しいシークレットを作成して **[保存]** を選択できます。新しいシークレットの作成方法の詳細については、「[Secrets Manager シークレットにトークンを作成して保存](asm-create-secret.md)」を参照してください。
        + **[CodeBuild]** を使用することを選択した場合は、トークンまたはユーザー名とアプリパスワードを入力し、**[保存]** を選択します。
   + **[カスタムソース認証情報]** を選択し、カスタムソース認証情報を使用してアカウントのデフォルト設定を上書きします。

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

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

------
#### [ 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>
  ```

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

------

これで、ビルドプロジェクトでトークンを使用して実行できるようになりました。詳細については、「[でのビルドプロジェクトの作成AWS CodeBuild](create-project.md)」および「[AWS CodeBuild ビルドを手動で実行する](run-build.md)」を参照してください。

### 複数のトークンをソースレベルの認証情報として設定
<a name="asm-source-credential"></a>

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

------
#### [ AWS マネジメントコンソール ]

**でソースレベルの認証情報として複数のトークンを設定するには AWS マネジメントコンソール**

1. [**ソースプロバイダー**] で [**GitHub**] を選択します。

1. **[認証情報]** で、次のいずれかを実行します。
   + **[デフォルトソース認証情報]** を選択し、アカウントのデフォルトソース認証情報を使用して、すべてのプロジェクトに適用します。

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

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

     1. **[接続]** で、既存の接続を使用するか、新規の接続を作成することを選択します。
   + **[カスタムソース認証情報]** を選択し、カスタムソース認証情報を使用してアカウントのデフォルト設定を上書きします。

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

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

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

------
#### [ 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/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>
  ```

------

### プロジェクトレベルのソース認証情報のフォールバックを設定
<a name="asm-project-credential"></a>

プロジェクトレベルのソース認証情報のフォールバックを設定するには、プロジェクトのプライマリソースに `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](build-spec-ref.md) を取得するように直接設定されていないため、ソースモデル内で提供されます。通常、`NO_SOURCE` ソースは buildspec 内からすべての関連するリポジトリのクローンを作成します。設定済みの認証情報をこれらのオペレーションで使用できるようにするには、buildspec で `git-credential-helper` オプションを有効にします。

```
env:
  git-credential-helper: yes
```

ビルド中、CodeBuild は設定されたトークンから `AuthServer` フィールドを読み取り、その特定のサードパーティソースプロバイダへのすべての git リクエストにトークン認証情報を使用します。

## 追加のセットアップオプション
<a name="asm-credential-cfn"></a>

 CloudFormation テンプレートを使用して Secrets Manager のアカウントレベルの認証情報を設定できます。次の 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
```

**注記**  
同じスタックにプロジェクトを作成する場合は、[DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) CloudFormation 属性を使用して、プロジェクトの前に `AccountCredential` が作成されていることを確認します。

 CloudFormation テンプレートを使用して Secrets Manager の複数のソースレベルの認証情報を設定することもできます。次の 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
```