원본 버킷과 대상 버킷을 서로 다른 계정에서 소유한 경우 복제본 소유자 변경 - Amazon Simple Storage Service

원본 버킷과 대상 버킷을 서로 다른 계정에서 소유한 경우 복제본 소유자 변경

복제 구성의 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유한 경우 대상 버킷을 소유한 AWS 계정으로 복제본 소유권을 변경하도록 Amazon S3에 지시할 수 있습니다. 이 예제에서는 Amazon S3 콘솔 및 AWS CLI를 사용하여 복제본 소유권을 변경하는 방법을 설명합니다. 자세한 정보는 복제본 소유자 변경을 참조하십시오.

참고

S3 복제를 사용하고 서로 다른 AWS 계정이 소스 버킷과 대상 버킷을 소유하는 경우 대상 버킷의 버킷 소유자는 ACL을 사용 중지하여(객체 소유권에 대해 버킷 소유자 시행 설정 사용) 복제본 소유권을 대상 버킷을 소유하는 AWS 계정으로 변경할 수 있습니다. 이 설정은 s3:ObjectOwnerOverrideToBucketOwner 권한 없이 기존 소유자 재정의 동작을 모방합니다. 즉, 버킷 소유자 시행 설정으로 대상 버킷에 복제되는 모든 객체는 대상 버킷 소유자가 소유합니다. 객체 소유권에 대한 자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 섹션을 참조하세요.

교차 계정 시나리오에서 AWS Key Management Service를 사용한 서버 측 암호화를 사용하여 복제를 구성하는 방법에 대한 자세한 내용은 교차 계정 시나리오를 위한 추가 권한 부여 단원을 참조하세요.

단계별 지침은 동일한 계정이 소유한 원본 및 대상 버킷에 대한 복제 구성 섹션을 참조하세요. 이 주제에서는 버킷을 동일한 및 서로 다른 AWS 계정이 소유한 경우에 복제 구성을 설정하는 지침을 제공합니다.

AWS CLI를 사용하여 복제본 소유권을 변경하려면 버킷을 생성하고 버킷에서 버전 관리를 사용하며 객체를 복제할 권한을 Amazon S3에 부여하는 IAM 역할을 생성하고 복제 구성을 소스 버킷에 추가합니다. 복제 구성에서 복제본 소유자를 변경하도록 Amazon S3에 지시합니다. 또한 다음 설정을 테스트합니다.

소스 버킷과 대상 버킷을 서로 다른 AWS 계정(AWS CLI)에서 소유한 경우 복제본 소유권을 변경하려면

  1. 이 예제에서는 소스 버킷과 대상 버킷을 서로 다른 두 AWS 계정에서 생성합니다. 2개의 명명된 프로파일을 포함하는 AWS CLI를 구성합니다. 이 예제에서는 이름이 acctAacctB인 프로필을 사용합니다. 자격 증명 프로파일 설정에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서명명된 프로파일을 참조하세요.

    중요

    이 연습에 사용하는 프로필에 필요한 권한이 있어야 합니다. 예를 들어 복제 구성에서 Amazon S3가 맡을 수 있는 IAM 역할을 지정합니다. 사용하는 프로필에 iam:PassRole 권한이 있을 경우 이 권한만 사용할 수 있습니다. 관리자 사용자 자격 증명을 사용하여 명명된 프로필을 생성할 경우 모든 작업을 수행할 수 있습니다. 자세한 내용은 IAM 사용 설명서에서 사용자에게 AWS 서비스 역할을 전달할 수 있는 권한 부여를 참조하세요.

    이들 프로필에 필요한 권한이 있는지 확인해야 합니다. 예를 들어 복제 구성은 Amazon S3가 맡을 수 있는 IAM 역할을 포함합니다. 그러한 구성을 버킷에 연결하는 데 사용하는 명명된 프로필은 iam:PassRole 권한이 있어야만 연결 작업을 수행할 수 있습니다. 이러한 명명된 프로필을 생성할 때 관리자 사용자 자격 증명을 지정할 경우 모든 권한이 부여됩니다. 자세한 내용은 IAM 사용 설명서에서 사용자에게 AWS 서비스 역할을 전달할 수 있는 권한 부여를 참조하세요.

  2. 원본 버킷을 생성하고 버전 관리를 사용 설정합니다. 이 예제는 원본 버킷을 미국 동부(버지니아 북부)(us-east-1) 리전에서 생성합니다.

    aws s3api create-bucket \ --bucket source \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket source \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 대상 버킷을 생성하고 버전 관리를 사용 설정합니다. 이 예제에서는 대상 버킷을 미국 서부(오레곤)(us-west-2) 리전에서 생성합니다. 소스 버킷을 생성할 때 사용한 것과 다른 AWS 계정 프로파일을 사용합니다.

    aws s3api create-bucket \ --bucket destination \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctB
    aws s3api put-bucket-versioning \ --bucket destination \ --versioning-configuration Status=Enabled \ --profile acctB
  4. 대상 버킷 정책에 복제본 소유권 변경을 허용할 권한을 추가해야 합니다.

    1. 다음 정책을 destination-bucket-policy.json에 저장합니다.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "destination_bucket_policy_sid", "Principal": { "AWS": "source-bucket-owner-account-id" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::destination/*" ] } ] }
    2. 대상 버킷에 위의정책을 적용합니다.

      aws s3api put-bucket-policy --region $ {destination_region} --bucket $ {destination} --policy file://destination_bucket_policy.json
  5. IAM 역할 생성. 나중에 원본 버킷에 추가하는 복제 구성에서 이 역할을 지정합니다. Amazon S3는 사용자를 대신하여 객체를 복제하기 위해 이 역할을 맡습니다. IAM 역할은 다음의 두 단계로 생성합니다.

    • 역할을 생성합니다.

    • 역할에 권한 정책을 연결합니다.

    1. IAM 역할 생성.

      1. 다음 신뢰 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 s3-role-trust-policy.json이라는 이름의 파일로 저장합니다. 이 정책은 역할을 맡을 권한을 Amazon S3에 부여합니다.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
      2. 다음 AWS CLI 명령을 실행해 역할을 생성합니다.

        $ aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
    2. 역할에 권한 정책을 연결합니다.

      1. 다음 권한 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 s3-role-perm-pol-changeowner.json 파일로 저장합니다. 이 정책은 다양한 Amazon S3 버킷 및 객체 작업에 대한 권한을 부여합니다. 다음 단계에서 IAM 역할을 생성하여 이 정책을 역할에 연결합니다.

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Resource":"arn:aws:s3:::destination/*" } ] }
      2. 정책을 생성하고 역할에 연결하려면 다음 명령을 실행합니다.

        $ aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-perm-pol-changeowner.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
  6. 원본 버킷에 복제 구성을 추가합니다.

    1. AWS CLI를 사용하려면 복제 구성을 JSON으로 지정해야 합니다. 다음 JSON을 로컬 컴퓨터의 현재 디렉터리에 replication.json 파일로 저장합니다. 구성에서 AccessControlTranslation을 추가하여 복제본 소유권 변경을 표시합니다.

      { "Role":"IAM-role-ARN", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ }, "Status":"Enabled", "Destination":{ "Bucket":"arn:aws:s3:::destination", "Account":"destination-bucket-owner-account-id", "AccessControlTranslation":{ "Owner":"Destination" } } } ] }
    2. 대상 버킷 소유자 계정 ID 및 IAM-role-ARN에 값을 입력하여 JSON을 편집합니다. 변경 사항을 저장합니다.

    3. 원본 버킷에 복제 구성을 추가하려면 다음 명령을 실행합니다. 원본 버킷 이름을 제공합니다.

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket source \ --profile acctA
  7. Amazon S3 콘솔에서 복제본 소유권을 확인합니다.

    1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

    2. 원본 버킷에 객체를 추가합니다. 대상 버킷에 객체 복제본이 저장되었는지, 복제본 소유권이 대상 버킷을 소유한 AWS 계정으로 변경되었는지 확인합니다.

복제 구성을 추가하는 코드 예제는 AWS SDK 사용 단원을 참조하십시오. 복제 구성을 적절히 수정해야 합니다. 개념적 정보는 복제본 소유자 변경 단원을 참조하십시오.