다른 AWS 계정의 S3 객체를 복사하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 3월 27일

다른 AWS 계정의 버킷에서 Amazon Simple Storage Service(Amazon S3) 객체를 복사하려고 합니다. 그런 다음 내 계정(대상 계정)이 복사된 객체를 소유하는지 확인하려고 합니다. 어떻게 해야 합니까?

간략한 설명

대상 계정이 다른 계정에서 복사한 S3 객체를 소유하도록 하려면 대상 계정에 교차 계정 복사를 수행할 수 있는 권한을 부여합니다. 다음 단계에 따라 계정 A의 원본 버킷에서 계정 B의 대상 버킷으로 객체를 복사할 수 있는 교차 계정 권한을 구성합니다.

1.    계정 A의 원본 버킷에 버킷 정책을 연결합니다.

2.    계정 B의 사용자 또는 역할에 AWS Identity and Access Management(IAM) 정책을 연결합니다.

3.    계정 B의 IAM 사용자 또는 역할을 사용하여 교차 계정 복사를 수행합니다.

중요: 소스 또는 대상 버킷의 기본 암호화에서 AWS Key Management Service(AWS KMS)가 활성화된 경우 이 AWS KMS 키와 관련된 권한도 수정해야 합니다. 지침은 Amazon S3 버킷에 사용자 지정 AWS KMS 키를 사용하는 기본 암호화가 설정되어 있습니다. 사용자가 버킷에서 다운로드하고 버킷에 업로드하도록 허용하려면 어떻게 해야 합니까?를 참조하십시오. 

기본적으로 S3 객체는 객체를 업로드한 계정이 소유합니다. 따라서 대상 계정에 교차 계정 복사를 수행할 수 있는 권한을 부여하면 대상이 복사된 객체를 소유하게 됩니다. 또한 객체의 ACL(액세스 제어 목록)bucket-owner-full-control로 변경하여 객체의 소유권을 변경할 수도 있습니다. 하지만 객체 ACL은 여러 객체에 대해 관리하기 어려울 수 있으므로 대상 계정에 프로그래밍 방식의 교차 계정 권한을 부여하는 것이 모범 사례입니다.

객체 소유권은 버킷 정책을 사용하여 권한을 관리하는 데 중요합니다. 버킷 정책을 버킷의 객체에 적용하려면 해당 버킷을 소유한 계정이 객체를 소유해야 합니다. 객체의 ACL을 사용하여 객체 권한을 관리할 수도 있습니다. 그러나 객체 ACL에서 여러 객체를 관리하기 어려울 수 있으므로 버킷 정책을 중앙 집중식 권한 설정 방법으로 사용하는 것이 가장 좋습니다.

해결 방법

계정 A의 원본 버킷에 버킷 정책 연결

1.    계정 B(대상 계정)의 IAM 자격 증명(사용자 또는 역할)의 Amazon 리소스 이름(ARN)을 가져옵니다.

2.    계정 A에서 다음과 같이 계정 B의 IAM 자격 증명으로 객체를 가져오는 것을 허용하는 버킷 정책을 원본 버킷에 연결합니다. 

중요: Principal의 값에서 arn:aws:iam::222222222222:user/Jane을 계정 B의 IAM 자격 증명에 대한 ARN으로 바꿉니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {"AWS": "arn:aws:iam::222222222222:user/Jane"},
            "Action": ["s3:ListBucket","s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::awsexamplesourcebucket/*",
                "arn:aws:s3:::awsexamplesourcebucket"
            ]
        }
    ]
}

계정 B의 사용자 또는 역할에 IAM 정책 연결

1.    계정 B에서 IAM 사용자 또는 역할이 계정 A의 원본 버킷에서 계정 B의 대상 버킷으로 객체를 복사할 수 있도록 허용하는 IAM 고객 관리형 정책을 생성합니다. 이 정책은 다음 예와 비슷할 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplesourcebucket",
                "arn:aws:s3:::awsexamplesourcebucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::awsexampledestinationbucket",
                "arn:aws:s3:::awsexampledestinationbucket/*"
            ]
        }
    ]
}

2.    계정 간에 객체를 복사하는 데 사용할 IAM 사용자 또는 역할에 고객 관리형 정책을 연결합니다.

계정 B의 IAM 사용자 또는 역할을 사용하여 교차 계정 복사 수행

버킷 정책과 IAM 정책을 설정한 후 계정 B의 IAM 사용자 또는 역할은 계정 A에서 계정 B로 복사를 수행할 수 있습니다. 그러면 계정 B가 복사된 객체를 소유합니다.

계정 A의 원본 버킷에서 계정 B의 대상 버킷으로 모든 콘텐츠를 동기화하려면 계정 B의 IAM 사용자 또는 역할이 AWS 명령줄 인터페이스(AWS CLI)를 사용하여 sync 명령을 실행할 수 있습니다.

aws s3 sync s3://awsexamplesourcebucket s3://awsexampledestinationbucket