다중 액세스 토큰 입력 CodeBuild - AWS CodeBuild

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

다중 액세스 토큰 입력 CodeBuild

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

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

  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 또는 CodeConnections 에 CodeBuild 프로젝트 IAM 역할 액세스 권한을 부여하려면 다음 IAM 정책을 추가해야 합니다.

CodeBuild 프로젝트 IAM 역할 액세스 권한을 부여하려면
  1. 프로젝트의 지침에 따라 CodeBuild 프로젝트의 IAM 역할을 다른 AWS 서비스와 상호 작용할 수 CodeBuild 있도록 허용 생성하세요 CodeBuild .

  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 토큰을 사용하여 소스 자격 증명을 세 가지 수준으로 설정할 수 있습니다.

Secrets Manager 또는 CodeConnections 토큰을 계정 수준 자격 증명으로 구성

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

AWS Management Console
연결을 계정 수준 자격 증명으로 구성하려면 AWS Management Console
  1. 소스 공급자의 경우 Bitbucket 또는 GitHub 엔터프라이즈를 GitHub선택합니다.

  2. 자격 증명의 경우 다음 중 하나를 수행하십시오.

    • 계정의 기본 소스 자격 증명을 사용하여 모든 프로젝트에 적용하려면 기본 소스 자격 증명을 선택합니다.

      1. 소스 공급자에 연결되지 않은 경우 기본 소스 자격 증명 관리를 선택합니다.

      2. 자격 증명 유형에서는 자격 증명 유형을 선택합니다.

      3. 선택한 CodeConnections경우 기존 연결을 사용하거나 새 연결을 생성하도록 선택하십시오.

        다른 자격 증명 유형을 선택한 경우 서비스에 대해 토큰을 저장하는 데 사용할 서비스를 선택하고 다음을 수행하십시오.

        • Secrets Manager를 사용하기로 선택한 경우 기존 암호 연결을 사용하거나 새 암호를 만들고 [Save] 를 선택할 수 있습니다. 새 암호를 만드는 방법에 대한 자세한 내용은 을 참조하십시오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>

    이 명령을 사용하면 토큰을 계정 수준의 기본 소스 자격 증명으로 가져올 수 있습니다. 를 사용하여 자격 증명을 가져오면 프로젝트에 보다 구체적인 자격 증명 세트가 구성되어 있지 않는 한 웹후크, 빌드 상태 보고, git clone 작업과 같은 소스 공급자와의 모든 상호 작용에 토큰이 사용됩니다. ImportSourceCredentialsAPI CodeBuild

이제 빌드 프로젝트에서 토큰을 사용하고 실행할 수 있습니다. 자세한 내용은 에서 빌드 프로젝트 생성 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. Add source (소스 추가) 를 선택하고 소스 제공자 및 자격 증명을 선택하는 과정을 반복합니다.

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 빌드 스펙을 가져오도록 직접 구성되지 않기 때문에 일반적으로 빌드 스펙은 소스 모델 내에 제공됩니다. 일반적으로 NO_SOURCE 소스는 buildspec 내에서 모든 관련 리포지토리를 복제하는 작업을 처리합니다. 구성된 자격 증명을 해당 작업에 사용할 수 있도록 하기 위해 buildspec에서 옵션을 활성화할 수 있습니다. git-credential-helper

env: git-credential-helper: yes

빌드하는 동안 구성된 토큰에서 AuthServer 필드를 읽고 특정 타사 소스 공급자에 대한 모든 git 요청에 토큰 자격 증명을 사용합니다. CodeBuild

추가 설정 옵션

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