복제본 소유자 변경 - Amazon Simple Storage Service

복제본 소유자 변경

복제에서는 기본적으로 소스 객체 소유자가 복제본도 소유합니다. 단, 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유한 경우 복제본 소유권을 변경할 수 있습니다. 예를 들어, 객체 복제본에 대한 액세스를 제한할 목적으로 소유권을 변경할 수 있습니다. 복제 구성에서 복제본 소유권을 대상 버킷을 소유한 AWS 계정으로 변경하는 선택적 구성 설정을 추가할 수 있습니다.

복제본 소유자를 변경하려면 다음을 수행합니다.

  • 복제본 소유권을 변경하도록 Amazon S3에 지시하는 소유자 재정의 옵션을 복제 구성에 추가합니다.

  • Amazon S3에 복제본 소유권을 변경할 수 있는 s3:ObjectOwnerOverrideToBucketOwner 권한을 부여합니다.

  • 대상 버킷 정책에 복제본 소유권 변경을 허용할 s3:ObjectOwnerOverrideToBucketOwner 권한을 추가합니다. s3:ObjectOwnerOverrideToBucketOwner 권한을 통해 대상 버킷의 소유자가 객체 복제본의 소유권을 수락할 수 있습니다.

자세한 내용은 소유권 재정의 옵션에 대한 고려 사항복제 구성에 소유자 재정의 옵션 추가 단원을 참조하세요. 단계별 지침이 포함된 예제는 복제본 소유자 변경 방법 단원을 참조하십시오.

중요

소유자 재정의 옵션을 사용하는 대신 객체 소유권에 대해 버킷 소유자 적용 설정을 사용할 수 있습니다. 복제를 사용하고 소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유하는 경우, 대상 버킷의 버킷 소유자는 객체 소유권에 대한 버킷 소유자 적용 설정을 사용하여 복제 소유권을 대상 버킷을 소유하는 AWS 계정으로 변경할 수 있습니다. 이 설정은 객체 액세스 제어 목록(ACL)을 비활성화합니다.

버킷 소유자 적용 설정은 s3:ObjectOwnerOverrideToBucketOwner 권한 없이도 기존 소유자 재정의 동작을 모방합니다. 버킷 소유자 시행 설정으로 대상 버킷에 복제되는 모든 객체는 대상 버킷 소유자가 소유합니다. 객체 소유권에 대한 자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 섹션을 참조하십시오.

소유권 재정의 옵션에 대한 고려 사항

소유권 재정의 옵션을 구성할 때는 다음 사항을 고려해야 합니다.

  • 기본적으로 원본 객체의 소유자도 복제본을 소유합니다. Amazon S3는 객체 버전 및 이와 연결된 ACL을 복제합니다.

    복제 구성에 소유자 재정의 옵션을 추가하면 Amazon S3는 ACL이 아닌 객체 버전만 복제합니다. 또한 Amazon S3는 원본 객체 ACL에 대한 후속 변경 사항을 복제하지 않습니다. Amazon S3는 복제본에서 대상 버킷 소유자에게 모든 권한을 부여하는 ACL을 설정합니다.

  • 소유자 재정의를 활성화하거나 비활성화하도록 복제 구성을 업데이트하면 다음과 같은 동작이 발생합니다.

    • 복제 구성에 소유자 재정의 옵션을 추가할 경우:

      Amazon S3는 객체 버전을 복제할 때 소스 객체에 연결된 ACL을 무시합니다. 대신 Amazon S3는 복제본에서 대상 버킷 소유자에게 모든 권한을 부여하는 ACL을 설정합니다. Amazon S3는 소스 객체 ACL에 대한 후속 변경 사항을 복제하지 않습니다. 하지만 이 ACL 변경은 소유자 재정의 옵션을 설정하기 이전에 복제된 객체 버전에 적용되지 않습니다. 소유자 재정의를 설정하기 이전에 복제된 원본 객체에 대한 ACL 업데이트의 경우 객체와 복제본의 소유자가 동일하므로 계속해서 복제됩니다.

    • 복제 구성에서 소유자 재정의 옵션을 제거할 경우

      Amazon S3는 원본 버킷에 나타나는 새 객체 및 연결된 ACL을 대상 버킷으로 복제합니다. 소유자 재정의를 제거하기 전에 복제된 객체의 경우 Amazon S3가 ACL을 복제하지 않습니다. 그 이유는 Amazon S3가 수행한 객체 소유권 변경이 유효하기 때문입니다. 즉, 소유자 재정의가 설정되었을 때 복제된 객체 버전에 적용된 ACL은 계속해서 복제되지 않습니다.

복제 구성에 소유자 재정의 옵션 추가

주의

소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유한 경우에만 소유자 재정의 옵션을 추가합니다. Amazon S3에서는 버킷을 소유한 계정이 동일한지 여부를 확인하지 않습니다. 두 버킷을 동일한 AWS 계정에서 모두 소유한 경우에도 소유자 재정의를 추가하면 Amazon S3가 소유자 재정의를 적용합니다. 이 옵션은 대상 버킷의 소유자에게 전체 권한을 부여하며 소스 객체의 액세스 제어 목록(ACL)에 대한 후속 업데이트를 복제하지 않습니다. 복제본 소유자는 PutObjectAcl 요청을 사용하여 복제본과 연결된 ACL을 직접 변경할 수 있지만, 복제를 통해서는 변경할 수 없습니다.

소유자 재정의 옵션을 지정하려면 다음을 각 Destination 요소에 추가합니다.

  • 복제본 소유자 변경을 Amazon S3에 지시하는 AccessControlTranslation 요소

  • 대상 버킷 소유자의 AWS 계정을 지정하는 Account 요소

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> ... <Destination> ... <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> <Account>destination-bucket-owner-account-id</Account> </Destination> </Rule> </ReplicationConfiguration>

다음 복제 구성 예제는 키 접두사가 Tax인 객체를 amzn-s3-demo-destination-bucket 대상 버킷으로 복제하고 복제본 소유권을 변경하도록 Amazon S3에 지시합니다. 이 예제를 사용하려면 user input placeholders를 사용자의 정보로 대체합니다.

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <ID>Rule-1</ID> <Priority>1</Priority> <Status>Enabled</Status> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket> <Account>destination-bucket-owner-account-id</Account> <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> </Destination> </Rule> </ReplicationConfiguration>

복제본 소유권을 변경할 수 있는 Amazon S3 권한 부여

AWS Identity and Access Management(IAM) 역할과 연결된 권한 정책에 s3:ObjectOwnerOverrideToBucketOwner 작업에 대한 권한을 추가하여 복제본 소유권을 변경할 권한을 Amazon S3에 부여합니다. 이 역할은 Amazon S3가 사용자를 대신하여 객체를 맡고 복제할 수 있도록 복제 구성에서 지정한 IAM 역할입니다. 다음 예제를 사용하려면 amzn-s3-demo-destination-bucket을 대상 버킷의 이름으로 바꿉니다.

... { "Effect":"Allow", "Action":[ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ...

대상 버킷 정책에 복제본 소유권 변경을 허용할 권한 추가

대상 버킷 소유자가 원본 버킷 소유자에게 복제본 소유권을 변경할 수 있는 권한을 부여해야 합니다. 대상 버킷 소유자는 원본 버킷 소유자에게 s3:ObjectOwnerOverrideToBucketOwner 작업에 대한 권한을 부여합니다. 이 권한을 통해 대상 버킷 소유자는 객체 복제본의 소유권을 수락할 수 있습니다. 다음 버킷 정책 문 예제에서는 이를 수행하는 방법을 보여줍니다. 이 예제를 사용하려면 user input placeholders를 사용자의 정보로 대체합니다.

... { "Sid":"1", "Effect":"Allow", "Principal":{"AWS":"source-bucket-account-id"}, "Action":["s3:ObjectOwnerOverrideToBucketOwner"], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ...

복제본 소유자 변경 방법

복제 구성의 소스 및 대상 버킷을 서로 다른 AWS 계정에서 소유하는 경우, Amazon S3에 대상 버킷을 소유한 AWS 계정으로 복제 소유권을 변경하도록 지시할 수 있습니다. 다음 예제에서는 Amazon S3 콘솔, AWS Command Line Interface(AWS CLI) 및 AWS SDK를 사용하여 복제본 소유권을 변경하는 방법을 보여줍니다.

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

다음 절차에서는 AWS CLI를 사용하여 복제본 소유권을 변경하는 방법을 설명합니다. 이 절차에서는 다음을 수행합니다.

  • 소스 및 대상 버킷을 만듭니다.

  • 버킷의 버전 관리를 활성화합니다.

  • Amazon S3에 객체 복제 권한을 제공하는 AWS Identity and Access Management(IAM) 역할을 만듭니다.

  • 소스 버킷에 복제 구성을 추가합니다.

  • 복제 구성에서 복제본 소유권을 변경하도록 Amazon S3에 지시합니다.

  • 복제 구성을 테스트합니다.

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

이 절차에서 예제 AWS CLI 명령을 사용하려면 user input placeholders를 자체 정보로 대체합니다.

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

    중요

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

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

    aws s3api create-bucket \ --bucket amzn-s3-demo-source-bucket \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket amzn-s3-demo-source-bucket \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 대상 버킷을 생성하고 버전 관리를 사용 설정합니다. 이 예제에서는 미국 서부(오리건)(us-west-2) 리전에 amzn-s3-demo-destination-bucket이라는 이름의 대상 버킷을 만듭니다. 소스 버킷에 사용했던 것과는 다른 AWS 계정 프로파일을 사용합니다.

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

    1. 다음 정책을 destination-bucket-policy.json 이름의 파일에 저장합니다. user input placeholders를 자체 정보로 바꿉니다.

      { "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:::amzn-s3-demo-destination-bucket/*" ] } ] }
    2. 다음 put-bucket-policy 명령을 사용하여 이전 정책을 대상 버킷에 추가합니다.

      aws s3api put-bucket-policy --region $ {destination-region} --bucket $ {amzn-s3-demo-destination-bucket} --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 create-role 명령을 실행하여 IAM 역할을 만듭니다.

        $ aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA

        사용자가 만든 IAM 역할의 Amazon 리소스 이름(ARN)을 적어 둡니다. 이후 단계에서 이 ARN이 필요합니다.

    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:::amzn-s3-demo-source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ] }
      2. 이전 권한 정책을 역할에 연결하려면 다음 put-role-policy 명령을 실행합니다.

        $ 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:::amzn-s3-demo-destination-bucket", "Account":"destination-bucket-owner-account-id", "AccessControlTranslation":{ "Owner":"Destination" } } } ] }
    2. 대상 버킷 이름, 대상 버킷 소유자 계정 ID 및 IAM-role-ARN에 값을 입력하여 JSON을 편집합니다. IAM-role-ARN을 이전에 생성한 IAM 역할의 ARN으로 바꿉니다. 변경 사항을 저장합니다.

    3. 소스 버킷에 복제 구성을 추가하려면 다음 명령을 실행합니다.

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket amzn-s3-demo-source-bucket \ --profile acctA
  7. Amazon S3 콘솔에서 복제본 소유권을 확인하여 복제 구성을 테스트합니다.

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

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

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