AWS CodeBuild를 사용하여 AWS 계정 전체에서 AWS Command Line Interface(AWS CLI) 명령을 실행하고 싶습니다.
해결 방법
참고: AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
다음 해결 방법은 계정 A의 CodeBuild 프로젝트가 계정 B에서 AWS CLI 명령을 실행하도록 구성합니다.
사전 요구 사항: 계정 A에서 빌드 프로젝트를 만듭니다.
계정 B에서 IAM 역할을 만들어 AWS CLI 명령을 수행합니다.
다음 단계를 완료하십시오.
- 계정 B에서 AWS Identity and Access Management(AWS IAM) 콘솔을 엽니다.
- 탐색 창에서 역할을 선택한 다음, 역할 생성을 선택합니다.
- AWS 계정 역할 유형을 선택합니다.
- AWS 계정 섹션에서 다른 AWS 계정을 선택합니다.
- 계정 ID에 계정 A의 계정 ID를 입력합니다.
- 다음을 선택합니다.
- 계정 B에서 AWS CLI 명령을 실행할 권한이 있는 정책을 선택합니다.
- 다음을 선택합니다.
- 역할 이름 필드에 역할 이름을 입력합니다.
- 역할 생성을 선택합니다.
- IAM 역할의 Amazon 리소스 이름(ARN)을 기록합니다.
IAM 정책을 CodeBuild 서비스 역할에 연결하여 역할 수임
다음 단계를 완료하십시오.
- 계정 A에서 CodeBuild 콘솔을 엽니다.
- 탐색 창에서 빌드 프로젝트를 선택합니다.
- 교차 계정 작업을 수행하는 빌드 프로젝트를 선택합니다.
- CodeBuild 프로젝트에서 프로젝트 세부 정보 탭을 선택합니다.
- 환경 섹션에서 서비스 역할 ARN을 선택합니다.
- 새 IAM 콘솔 창에서 권한 추가를 선택한 다음 인라인 정책 추가를 선택합니다.
- JSON 탭에 다음 정책을 입력합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCrossAccountAccess",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "ACCOUNT_B_ROLE_ARN"
}
]
}
참고: ACCOUNT_B_ROLE_ARN을 IAM 역할의 ARN으로 바꾸십시오.
- 다음을 선택합니다.
- 정책 이름 필드에 정책 이름을 입력합니다.
- 정책 만들기를 선택합니다.
CodeBuild 프로젝트 buildspec 수정
buildspec 파일이 CodeBuild 프로젝트에 있는 경우 다음 단계를 완료하십시오.
- CodeBuild 콘솔을 엽니다.
- 탐색 창에서 빌드 프로젝트를 선택합니다.
- 빌드 프로젝트를 선택한 다음 편집을 선택합니다.
- Buildspec 섹션에서 assume-role AWS CLI 명령과 교차 계정 명령을 다음 순서로 추가합니다.
- CREDS=$(aws sts assume-role \
--role-arn $ACCOUNT_B_ROLE_ARN \
--role-session-name "session")
- export AWS_ACCESS_KEY_ID=$(echo $CREDS | jq -r '.Credentials.AccessKeyId')
- export AWS_SECRET_ACCESS_KEY=$(echo $CREDS | jq -r '.Credentials.SecretAccessKey')
- export AWS_SESSION_TOKEN=$(echo $CREDS | jq -r '.Credentials.SessionToken')
참고: ACCOUNT_B_ROLE_ARN을 IAM 역할의 ARN으로 바꾸십시오. buildspec 파일이 소스 코드에 있는 경우 buildspec 파일의 교차 계정 명령 앞에 assume-role AWS CLI 명령을 추가하십시오.
- 프로젝트 업데이트를 선택합니다.
계정 B에서 AWS CLI 명령을 실행하려면 assume-role 및 export 명령 다음에 CLI 명령을 실행합니다.
이전 CodeBuild 서비스 역할 권한으로 되돌리려면 다음 unset 명령을 실행합니다.
- unset AWS_ACCESS_KEY_ID
- unset AWS_SECRET_ACCESS_KEY
- unset AWS_SESSION_TOKEN