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

최종 업데이트 날짜: 2022년 10월 25일

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

해결 방법

중요: 객체를 업로드하는 AWS 계정이 항상 S3에 있는 객체를 자동으로 소유하지 않습니다. 객체 소유권을 변경할 때는 버킷 소유자 적용(Bucket owner enforced) 설정을 사용하는 것이 가장 좋습니다. 하지만 이 옵션은 버킷의 모든 객체에 대한 모든 버킷 ACL 및 ACL을 끕니다.

S3 객체 소유권의 버킷 소유자 적용(Bucket owner enforced) 설정을 사용하면 버킷 소유자가 Amazon S3 버킷의 모든 객체를 자동으로 소유할 수 있게 됩니다. 또한 버킷 소유자 적용(Bucket owner enforced) 기능은 모든 액세스 제어 목록(ACL)을 끄고 S3에 저장된 데이터에 대한 액세스 관리를 간소화합니다. 그러나 기존 버킷의 경우 ACL을 명시적으로 끄지 않는 한 Amazon S3 객체를 업로드한 AWS 계정에서 해당 객체를 계속 소유합니다.

기존 객체 공유 방법이 ACL 사용에 의존하는 경우 ACL을 사용하여 객체에 액세스하는 보안 주체를 식별합니다. ACL을 끄기 전에 권한을 검토하는 방법에 대한 자세한 내용은 ACL을 끄기 위한 사전 요구 사항을 참조하세요.

ACL을 끌 수 없는 경우 버킷 정책을 조정할 수 있을 때까지 다음 단계에 따라 객체의 소유권을 가져옵니다.

1.    원본 계정에서 IAM 자격 증명(사용자 또는 역할) 에 적절한 권한을 부여하는 AWS Identity and Access Management(IAM) 고객 관리형 정책을 생성합니다. IAM 사용자는 원본 버킷에서 객체를 검색하고 객체를 대상 버킷에 다시 넣을 수 있는 액세스 권한이 있어야 합니다. 다음과 같이 IAM 정책을 사용할 수 있습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*"
      ]
    }
  ]
}

참고: 이 IAM 정책 예에는 여러 계정의 버킷 간에 객체를 나열하고 객체를 복사하는 데 필요한 최소 권한만 포함됩니다. 사용 사례에 따라 허용되는 S3 작업을 사용자 지정해야 합니다. 예를 들어 사용자가 객체 태그를 포함한 객체를 복사해야 하는 경우 s3:GetObjectTagging에 대한 사용 권한도 부여해야 합니다. 오류가 발생하면 관리자 권한으로 다음 단계를 수행해 보세요.

2.    원본 계정에서 대상 버킷에 객체를 복사하는 데 사용할 IAM 자격 증명에 고객 관리형 정책을 연결합니다.

3.    대상 계정에서 대상 버킷의 S3 객체 소유권을 버킷 소유자로 설정합니다. S3 객체 소유권을 설정하면 ACL(액세스 제어 목록)이 bucket-owner-full-control로 설정된 상태로 새 객체가 업로드되어 버킷의 계정이 자동으로 소유하게 됩니다.

4.    대상 계정에서 대상 버킷의 버킷 정책을 수정하여 원본 계정에 객체 업로드 권한을 부여합니다. 또한 버킷 정책에 ACL을 bucket-owner-full-control로 설정하기 위해 객체 업로드가 필요한 조건을 포함합니다. 다음과 비슷한 문을 사용할 수 있습니다.

참고: destination-DOC-EXAMPLE-BUCKET을 대상 버킷 이름으로 바꿉니다. 그런 다음 arn:aws:iam::222222222222:user/Jane을 소스 계정의 IAM 자격 증명에 대한 Amazon 리소스 이름(ARN)으로 바꿉니다.

{
  "Version": "2012-10-17",
  "Id": "Policy1611277539797",
  "Statement": [
    {
      "Sid": "Stmt1611277535086",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "Stmt1611277877767",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
    }
  ]
}

참고: 이 예제 버킷 정책에는 필수 ACL이 있는 객체를 업로드하는 데 필요한 최소 권한만 포함됩니다. 사용 사례에 따라 허용되는 S3 작업을 사용자 지정해야 합니다. 예를 들어, 사용자가 객체 태그를 포함한 객체를 복사해야 하는 경우 s3:GetObjectTagging에 대한 권한도 부여해야 합니다.

5.    IAM 정책 및 버킷 정책을 구성한 후 소스 계정의 IAM 자격 증명은 대상 버킷에 객체를 업로드해야 합니다. ACL이 bucket-owner-full-control로 설정되어 있는지 확인합니다. 예를 들어 소스 IAM 자격 증명은 cp AWS CLI 명령—acl 옵션과 함께 실행해야 합니다.

aws s3 cp s3://source-DOC-EXAMPLE-BUCKET/object.txt s3://destination-DOC-EXAMPLE-BUCKET/object.txt --acl bucket-owner-full-control

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

S3 객체 소유권이 버킷 소유자 선호로 설정된 경우 bucket-owner-full-control ACL로 업로드된 객체는 자동으로 대상 버킷의 계정에서 소유됩니다.

중요: S3 버킷에 AWS Key Management Service(AWS KMS)가 활성화된 기본 암호화가 있는 경우, AWS KMS 키 권한도 수정해야 합니다. 지침은 Amazon S3 버킷에 사용자 정의 AWS KMS 키를 사용하는 기본 암호화가 적용됨을 참조하세요. 사용자가 버킷에서 다운로드하고 버킷에 업로드하도록 허용하려면 어떻게 해야 합니까?를 참조하세요.