CodePipeline과 미리 제공된 ACL을 사용해 여러 AWS 계정의 Amazon S3에 아티팩트를 배포하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 1월 5일

Amazon Simple Storage Service(Amazon S3) 버킷에 다른 계정의 아티팩트를 배포하려고 합니다. AWS CodePipeline을 사용해 이 작업을 수행하면서 Amazon S3 배포 작업 공급자와 미리 제공된 액세스 제어 목록(ACL)을 사용할 방법이 있나요?

해결 방법

참고: 다음 예제 절차에서는 다음과 같이 가정하였습니다.

  • AWS 계정이 두 개입니다. 하나는 개발 계정, 다른 하는 프로덕션 계정입니다.
  • 개발 계정의 입력 버킷을 codepipeline-input-bucket이라고 합니다(버전 관리를 활성화한 상태).
  • 개발 계정의 기본 아티팩트 버킷을 codepipeline-us-east-1-0123456789라고 합니다.
  • 프로덕션 계정의 출력 버킷을 codepipeline-output-bucket이라고 합니다.
  • 이 경우 개발 계정의 아티팩트를 프로덕션 계정의 S3 버킷에 배포하고자 합니다.
  • 미리 제공된 ACL을 사용하여 프로덕션 계정의 버킷 소유자에게 개발 계정이 소유한 객체에 대한 액세스를 제공합니다.
    참고: 아티팩트를 배포하고 프로덕션 계정을 객체 소유자로 설정하는 방법은 CodePipeline을 사용하여 다른 계정의 Amazon S3에 아티팩트를 배포하려면 어떻게 해야 하나요?를 참조하세요.

개발 계정에서 CodePipeline 생성

1.    CodePipeline 콘솔을 엽니다. 그런 다음, 파이프라인 생성(Create pipeline)을 선택합니다.

2.    파이프라인 이름(Pipeline name)에 파이프라인의 이름을 입력합니다. 예를 들면 crossaccountdeploy입니다.

참고: 역할 이름(Role name) 텍스트 입력란은 서비스 역할 이름 AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy로 자동으로 채워져 있습니다. 다른, 기존 서비스 역할을 선택할 수도 있습니다.

3.    [고급 설정] 섹션을 확장합니다.

4.    아티팩트 스토어(Artifact store)에는 기본 위치(Default location)를 선택합니다.
참고: 사용 사례에 필요한 경우 사용자 지정 위치(Custom location)를 선택할 수도 있습니다.

5.    [암호화 키]에서 [기본 AWS 관리형 키]를 선택합니다.

6.    [다음]을 선택합니다.

7.    [소스 단계 추가] 페이지의 [소스 공급자]에서 Amazon S3를 선택합니다.

8.    버킷(Bucket)에는 개발 입력 S3 버킷의 이름을 입력합니다. 예를 들면 codepipeline-input-bucket입니다.
중요: 입력 버킷에서 버전 관리를 활성화해야 CodePipeline과 함께 사용할 수 있습니다.

9.    S3 객체 키(S3 object key)sample-website.zip을 입력합니다.

중요: 자체 웹 사이트 대신 예제 AWS 웹사이트를 사용하는 방법은 자습서: Amazon S3를 배포 공급자로 사용하는 파이프라인 생성을 참조하세요. 그런 다음 1: Amazon S3에 정적 웹 사이트 배포 섹션의 사전 조건에서 "샘플 정적 웹 사이트"를 검색합니다.

10.    [변경 탐지 옵션]에서 [Amazon CloudWatch Events(권장)]를 선택합니다.

11.    [다음]을 선택합니다.

12.    구축 단계 추가(Add build stage) 페이지에서 구축 단계 건너뛰기(Skip build stage)를 선택합니다. 그런 다음 건너뛰기(Skip)를 선택합니다.

13.    [배포 단계 추가] 페이지의 [배포 공급자]에서 [Amazon S3]를 선택합니다.

14.    리전(Region)에 출력 S3 버킷이 속한 AWS 리전을 선택합니다. 예를 들면 미국 동부(버지니아 북부)입니다.

15.    버킷(Bucket)에는 프로덕션 출력 S3 버킷 이름을 입력합니다. 예를 들면 codepipeline-output-bucket입니다.

16.    [배포 전 파일 추출] 확인란을 선택합니다.
참고: 필요한 경우 [배포 경로]에 대한 경로를 입력합니다.

17.    [추가 구성]을 확장합니다.

18.    미리 제공된 ACL(Canned ACL)bucket-owner-full-control을 선택합니다.
참고: bucket-owner-full-control을 선택하면 프로덕션 계정의 버킷 소유자에게 개발 계정이 배포하고 소유한 객체에 대한 전체 액세스를 부여합니다. 자세한 정보는 미리 제공된 ACL을 참조하세요.

19.    [다음]을 선택합니다.

20.    파이프라인 생성(Create pipeline)을 선택합니다. 파이프라인이 실행되지만, 소스 단계가 실패합니다. 다음과 같은 오류 "The object with key 'sample-website.zip' does not exist(‘sample-website.zip’ 키를 포함한 객체가 존재하지 않습니다)."가 표시됩니다.

이 문서의 입력 버킷에 샘플 웹 사이트 업로드 섹션에 이 오류를 해결하는 방법을 설명하였습니다.

프로덕션 계정의 출력 버킷에 S3 액세스를 추가하는 AWS Identity and Access Management(IAM) 정책을 포함한 CodePipeline 서비스 역할 구성

1.    개발 계정에서 IAM 콘솔을 엽니다.

2.    탐색 창에서 정책(Policies)을 선택합니다. 그런 다음, 정책 생성(Create Policy)을 선택합니다.

3.    JSON 탭을 선택합니다. 다음과 같은 정책을 JSON 편집기에 입력합니다.

중요: codepipeline-output-bucket을 프로덕션 출력 S3 버킷 이름으로 바꿔야 합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::codepipeline-output-bucket"
        }
    ]
}

4.    [정책 검토(Review policy)]를 선택합니다.

5.    이름(Name)에 정책의 이름을 입력합니다. 예를 들면 prodbucketaccess입니다.

6.    [정책 생성]을 선택합니다.

7.    탐색 창에서 [역할]을 선택합니다.

8.    역할 목록에서 AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy를 선택합니다. 이것이 CodePipeline 서비스 역할입니다.
참고: 사용 사례에 따라 필요한 경우 자체 서비스 역할을 사용할 수 있습니다.

9.    [정책 연결]을 선택합니다.

10.    생성한 정책(prodbucketaccess)을 선택합니다. 그런 다음 정책 연결(Attach policy)을 선택하여 CodePipeline에 프로덕션 출력 S3 버킷에 대한 액세스를 허용합니다.

프로덕션 계정의 출력 버킷이 개발 계정의 액세스를 허용하도록 구성

1.    프로덕션 계정에서 Amazon S3 콘솔을 엽니다.

2.    버킷 이름(Bucket name) 목록에서 프로덕션 출력 S3 버킷을 선택합니다. 예를 들면 codepipeline-output-bucket입니다.

3.    권한(Permissions)을 선택합니다. 그런 다음 버킷 정책(Bucket Policy)을 선택합니다.

4.    텍스트 편집기에 다음과 같은 정책을 입력한 다음 저장(Save)을 선택합니다.

중요: dev-account-id를 개발 환경의 AWS 계정 ID로 바꿉니다. codepipeline-output-bucket을 프로덕션 출력 S3 버킷의 이름으로 바꿉니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::dev-account-id:root"
            },
            "Action": "s3:Put*",
            "Resource": "arn:aws:s3:::codepipeline-output-bucket/*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::dev-account-id:root"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::codepipeline-output-bucket"
        }
    ]
}

샘플 웹 사이트를 입력 버킷에 업로드

1.    개발 계정에서 Amazon S3 콘솔을 엽니다.

2.    버킷 이름(Bucket name) 목록에서 개발 입력 S3 버킷을 선택합니다. 예를 들면 codepipeline-input-bucket입니다.

3.    업로드(Upload)를 선택합니다. 그런 다음 파일 추가(Add files)를 선택합니다.

4.    다운로드한 sample-website.zip 파일을 선택합니다.

5.    업로드(Upload)를 선택하여 파이프라인을 실행합니다. 파이프라인이 실행되면 다음과 같은 상황이 발생합니다.

  • 소스 작업이 개발 입력 S3 버킷(codepipeline-input-bucket)에서 sample-website.zip을 선택합니다. 그런 다음 소스 작업이 이 zip 파일을 개발 계정의 기본 아티팩트 버킷(codepipeline-us-east-1-0123456789) 내 소스 아티팩트로 배치합니다.
  • 배포 작업에서 CodePipeline 서비스 역할(AWSCodePipelineServiceRole-us-east-1-crossaccountdeploy)이 자신의 액세스를 사용하여 프로덕션 출력 S3 버킷(codepipeline-output-bucket)에 배포합니다. 또한 배포 작업은 미리 제공된 ACL bucket-owner-full-control도 적용합니다.

참고: 개발 계정이 프로덕션 출력 S3 버킷(codepipeline-output-bucket)의 추출된 객체 소유자입니다. 프로덕션 계정의 버킷 소유자에게는 배포된 아티팩트에 대한 전체 액세스 권한도 부여됩니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?