

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CodeBuild의 다중 액세스 토큰
<a name="multiple-access-tokens"></a>

CodeBuild는 AWS Secrets Manager 또는 AWS CodeConnections 연결을 통해 보안 암호에서 타사 공급자에게 액세스 토큰 소싱을 지원합니다. 보안 암호 또는 연결을 GitHub, GitHub Enterprise 또는 Bitbucket과 같은 지정된 타사 공급자와의 상호 작용을 위한 기본 자격 증명으로 설정할 수 있습니다.

소스 자격 증명을 세 가지 다른 수준에서 설정할 수 있습니다.

1. **모든 프로젝트의 계정 수준 자격 증명:** 이는 AWS 계정의 모든 프로젝트에 대한 기본 자격 증명입니다. 프로젝트 또는 소스 수준 자격 증명이 지정되지 않은 경우 프로젝트에 사용됩니다.

1. **특정 리포지토리의 소스 수준 자격 증명:** Secrets Manager 보안 암호 또는 CodeConnections 연결이 프로젝트 소스에 정의된 경우입니다. 이러한 자격 증명은 지정된 소스 리포지토리의 작업에만 사용됩니다. 이렇게 하면 동일한 프로젝트에서 서로 다른 권한 범위를 가진 다중 액세스 토큰을 설정할 수 있으며 기본 계정 수준 자격 증명을 사용하지 않을 수 있습니다.

1. **프로젝트 수준 대체 자격 증명:** `NO_SOURCE`를 기본 소스 유형으로 사용하여 프로젝트 수준 대체 자격 증명을 설정하고 보안 암호 또는 연결을 정의할 수 있습니다. 프로젝트에 여러 소스가 있지만 동일한 자격 증명을 사용하려는 경우 또는 프로젝트에 기본 계정 수준 자격 증명을 사용하지 않으려는 경우에 사용할 수 있습니다.

**Topics**
+ [

## 1단계: Secrets Manager 보안 암호 또는 CodeConnections 연결 생성
](#create-secret-connection)
+ [

## 2단계: Secrets Manager 보안 암호에 대한 IAM 역할 액세스 권한을 CodeBuild 프로젝트에 부여
](#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단계: Secrets Manager 보안 암호에 대한 IAM 역할 액세스 권한을 CodeBuild 프로젝트에 부여
<a name="asm-role-access"></a>

**참고**  
계속하려면 Secrets Manager 또는 CodeConnections에서 생성된 토큰에 액세스할 수 있어야 합니다.

CodeBuild 프로젝트에 Secrets Manager 또는 CodeConnections에 대한 IAM 역할 액세스 권한을 부여하려면 다음 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 토큰을 사용하여 소스 자격 증명을 세 가지 다른 수준으로 설정할 수 있습니다.

### Secrets Manager 또는 CodeConnections 토큰을 계정 수준 자격 증명으로 구성
<a name="asm-account-credential"></a>

Secrets Manager 보안 암호 또는 CodeConnections 연결을 계정 수준 자격 증명으로 구성하고 프로젝트에서 사용할 수 있습니다.

------
#### [ AWS Management Console ]

**에서 연결을 계정 수준 자격 증명으로 구성하려면 AWS Management Console**

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 복제 작업과 같은 소스 공급자와의 모든 상호 작용에 토큰을 사용합니다.

------

이제 빌드 프로젝트에서 토큰을 사용하고 실행할 수 있습니다. 자세한 내용은 [에서 빌드 프로젝트 생성AWS CodeBuild](create-project.md) 및 [수동으로 AWS CodeBuild 빌드 실행](run-build.md) 섹션을 참조하세요.

### 여러 토큰을 소스 수준 자격 증명으로 구성
<a name="asm-source-credential"></a>

Secrets Manager 보안 암호 또는 CodeConnections 연결을 소스 수준 자격 증명으로 사용하려면 CodeBuild 프로젝트의 토큰을 직접 참조하고 빌드를 시작합니다.

------
#### [ AWS Management Console ]

**에서 여러 토큰을 소스 수준 자격 증명으로 구성하려면 AWS Management Console**

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](build-spec-ref.md)을 가져오도록 직접 구성되지 않았으므로 소스 모델 내에 buildspec이 제공됩니다. 일반적으로 `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
```