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

4분 분량
0

Amazon Simple Storage Service(S3) 개체를 AWS 계정 간에 복사하고 싶습니다. 그런 다음 대상 계정이 복사된 개체를 소유하고 있는지 확인하고 싶습니다.

해결 방법

중요: S3의 개체가 항상 업로드하는 AWS 계정에 의해 자동으로 소유되는 것은 아닙니다. 개체 소유권을 변경할 때는 버킷 소유자 적용 설정을 사용하는 것이 가장 좋습니다. 그러나 이 옵션은 모든 버킷 ACL과 버킷에 있는 모든 개체에 대한 ACL을 끕니다.

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

기존 개체 공유 방법이 ACL 사용에 의존하는 경우, ACL을 사용하여 개체에 액세스하는 주체를 식별하세요. ACL을 끄기 전에 권한을 검토하는 방법에 대한 자세한 내용은 ACL을 끄기 위한 전제 조건을 참조하세요.

ACL을 끌 수 없는 경우 다음 단계에 따라 버킷 정책을 조정할 수 있을 때까지 개체에 대한 소유권을 가져가세요.

  1. 소스 계정에서 IAM ID(사용자 또는 역할)에 적절한 권한을 부여하는 AWS IAM(Identity and Access Management) 고객 관리형 정책을 생성합니다. 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에 대한 권한도 부여해야 합니다. 오류가 발생하면 admin 사용자로 이 단계를 수행해 보세요.

  1. 소스 계정에서 대상 버킷에 개체를 복사하는 데 사용할 IAM ID에 고객 관리형 정책을 연결합니다.

  2. 대상 계정에서 대상 버킷의 S3 개체 소유권을 버킷 소유자 선호로 설정합니다. S3 Object Ownership을 설정하고 나면 액세스 제어 목록(ACL)이 버킷 소유자-전부 제어로 설정된 상태에서 업로드된 새 개체는 자동으로 버킷 계정의 소유가 됩니다.

  3. 대상 계정에서 대상 버킷의 버킷 정책을 수정하여 소스 계정에 개체를 업로드할 수 있는 권한을 부여합니다. 또한 버킷 정책에 오브젝트 업로드가 ACL을 버킷 소유자-전부 제어로 설정해야 한다는 조건을 포함하세요. 다음 예제와 유사한 문을 사용할 수 있습니다.

참고: destination-DOC-EXAMPLE-BUCKET을 대상 버킷의 이름으로 바꿉니다. 그런 다음 arn:aws:iam::222222222222:user/Jane을 소스 계정의 IAM ID의 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에 대한 권한도 부여해야 합니다.

  1. IAM 정책 및 버킷 정책을 구성한 후에는 소스 계정의 IAM ID가 대상 버킷에 개체를 업로드해야 합니다. ACL이 버킷 소유자 전체 제어로 설정되어 있는지 확인하세요. 예를 들어, 소스 IAM ID는 --acl 옵션과 함께 cp AWS CLI 명령을 실행해야 합니다.
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로 업로드하는 개체는 대상 버킷의 계정에서 소유하게 됩니다.

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

관련 정보

버킷 소유자가 계정 간 버킷 권한을 부여하는 중

다른 AWS 계정에서 개체를 업로드할 때 Amazon S3 버킷의 개체 소유권을 변경하려면 어떻게 해야 하나요?

리소스 기반 정책을 사용하여 다른 계정의 Amazon S3 버킷에 대한 액세스 위임

AWS 공식
AWS 공식업데이트됨 일 년 전