암호화(SSE-C, SSE-S3, SSE-KMS, DSSE-KMS)된 객체 복제 - Amazon Simple Storage Service

암호화(SSE-C, SSE-S3, SSE-KMS, DSSE-KMS)된 객체 복제

중요

이제 Amazon S3가 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)를 Amazon S3 내 모든 버킷 암호화의 기본 수준으로 적용합니다. 2023년 1월 5일부터 Amazon S3로의 모든 새 객체 업로드는 추가 비용 없이 성능에 영향을 미치지 않고 자동으로 암호화됩니다. S3 버킷 기본 암호화 구성에 및 신규 객체 업로드에 대한 자동 암호화 상태는 AWS CloudTrail 로그, S3 인벤토리, S3 스토리지 렌즈, Amazon S3 콘솔에서 사용할 수 있으며, AWS Command Line Interface 및 AWS SDK에서 추가 Amazon S3 API 응답 헤더로도 사용할 수 있습니다. 자세한 내용은 기본 암호화 관련 FAQ를 참조하십시오.

서버 측 암호화를 사용하여 암호화된 객체를 복제할 때는 몇 가지 특별한 고려 사항이 있습니다. Amazon S3에서는 다음 유형의 서버 측 암호화를 지원합니다.

  • Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)

  • AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 사용한 서버 측 암호화

  • AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)

  • 고객 제공 키를 사용한 서버 측 암호화(SSE-C)

서버 측 암호화에 대한 자세한 정보는 서버 측 암호화를 사용하여 데이터 보호 섹션을 참조하십시오.

이 주제에서는 서버 측 암호화를 사용하여 암호화된 객체를 복제하도록 Amazon S3에 지시하는 데 필요한 권한에 대해 설명합니다. 이 주제에서는 추가할 수 있는 추가 구성 요소와 암호화된 객체를 복제하는 데 필요한 권한을 부여하는 AWS Identity and Access Management(IAM) 정책의 예도 제공합니다.

단계별 지침이 포함된 예제는 암호화된 객체에 대한 복제 활성화 단원을 참조하십시오. 복제 구성 생성에 대한 자세한 내용은 객체 복제 개요 단원을 참조하십시오.

참고

Amazon S3에서 다중 리전 AWS KMS keys를 사용할 수 있습니다. 그러나 Amazon S3는 현재 다중 리전 키를 단일 리전 키인 것처럼 취급하며, 키의 다중 리전 기능을 사용하지 않습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다중 리전 키 사용을 참조하십시오.

기본 버킷 암호화가 복제에 미치는 영향

복제 대상 버킷에 대한 기본 암호화를 사용 설정하면 다음 암호화 동작이 적용됩니다.

  • 소스 버킷의 객체가 암호화되지 않은 경우 대상 버킷의 복제본 객체는 대상 버킷의 기본 암호화 설정을 사용하여 암호화됩니다. 결과적으로 소스 객체의 엔터티 태그(ETag)는 복제본 객체의 ETag와 다릅니다. ETag를 사용하는 애플리케이션이 있는 경우 이 차이를 고려하도록 해당 애플리케이션을 업데이트해야 합니다.

  • 소스 버킷의 객체가 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3), AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS) 또는 AWS KMS 키를 사용한 이중 계층 서브 측 암호화(DSSE-KMS)를 사용하여 암호화되는 경우, 대상 버킷의 복제본 객체는 소스 객체와 동일한 유형의 암호화를 사용합니다. 대상 버킷의 기본 암호화 설정은 사용되지 않습니다.

SSE-C로 암호화된 객체 복제

고객 제공 키(SSE-C)로 서버 측 암호화를 사용하면 자체 암호화 키를 관리할 수 있습니다. SSE-C를 사용하면 사용자는 키를 관리하고 Amazon S3는 암호화 및 암호 해독 프로세스를 관리합니다. 요청의 일부로 암호화 키를 제공해야 하지만 객체 암호화 또는 암호 해독을 수행하기 위해 코드를 작성할 필요는 없습니다. 객체를 업로드할 때 Amazon S3는 제공된 키를 사용하여 객체를 암호화합니다. 그런 다음 Amazon S3는 해당 키를 메모리에서 삭제합니다. 객체를 검색할 경우 요청에 포함된 것과 동일한 암호화 키를 제공해야 합니다. 자세한 내용은 고객 제공 키(SSE-C)로 서버 측 암호화 사용 단원을 참조하십시오.

S3 복제는 SSE-C로 암호화된 객체를 지원합니다. 암호화되지 않은 객체에 대한 복제를 구성하는 것과 동일한 방식으로 Amazon S3 콘솔 또는 AWS SDK를 사용하여 SSE-C 객체 복제를 구성할 수 있습니다. 현재 복제에 필요한 권한 이외의 추가 SSE-C 권한은 없습니다.

S3 복제는 가능한 경우 새로 업로드된 SSE-C 암호화된 객체를 S3 복제 구성에서 지정된 대로 자동으로 복제합니다. 버킷의 기존 객체를 복제하려면 S3 배치 복제를 사용합니다. 객체 복제에 대한 자세한 내용은 라이브 복제 설정S3 배치 복제를 사용한 기존 객체 복제 섹션을 참조하세요.

SSE-C 객체 복제에 대한 추가 비용은 없습니다. 복제 요금에 대한 자세한 내용은 Amazon S3 요금 페이지를 참조하세요.

SSE-S3, SSE-KMS 또는 DSSE-KMS로 암호화된 객체 복제

기본적으로 Amazon S3는 SSE-KMS 또는 DSSE-KMS로 암호화된 객체를 복제하지 않습니다. 이 섹션에서는 이러한 객체를 복제하도록 Amazon S3에 지시하기 위해 추가할 수 있는 추가 구성 요소를 설명합니다.

단계별 지침이 포함된 예제는 암호화된 객체에 대한 복제 활성화 단원을 참조하십시오. 복제 구성 생성에 대한 자세한 내용은 객체 복제 개요 단원을 참조하십시오.

복제 구성에서 추가 정보 지정

복제 구성에서 다음을 수행합니다.

  • 복제 구성의 Destination 요소에 다음 복제 구성 예시와 같이 Amazon S3에서 객체 복제본을 암호화하는 데 사용할 대칭 AWS KMS 고객 관리 키의 ID를 추가합니다.

  • KMS 키를 사용하여 암호화(SSE-KMS 또는 DSSE-KMS)된 객체의 복제를 사용 설정함으로써 명시적으로 옵트인합니다. 옵트인하려면 다음 예제 복제 구성에 표시된 대로 SourceSelectionCriteria 요소를 추가합니다.

<ReplicationConfiguration> <Rule> ... <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> ... <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ARN or Key Alias ARN that's in the same AWS 리전 as the destination bucket.</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> ... </Rule> </ReplicationConfiguration>
중요

KMS 키는 대상 버킷과 동일한 AWS 리전에서 생성되어야 합니다.

KMS 키가 유효해야 합니다. PutBucketReplication API 작업은 KMS 키가 유효한지 확인하지 않습니다. 잘못된 KMS 키를 사용할 경우 응답에서 HTTP 200 OK 상태 코드를 받지만 복제는 실패합니다.

다음 예시는 선택적 구성 요소가 포함된 복제 구성을 보여줍니다. 이 복제 구성에는 한 가지 규칙이 있습니다. 이 규칙은 Tax 키 접두사를 포함하는 모든 객체에 적용됩니다. Amazon S3는 지정된 AWS KMS key ID를 사용하여 이러한 객체 복제본을 암호화합니다.

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration> <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> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ARN or Key Alias ARN that's in the same AWS 리전 as the destination bucket. (S3 uses this key to encrypt object replicas.)</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> </Rule> </ReplicationConfiguration>

IAM 역할에 추가 권한 부여

SSE-S3, SSE-KMS 또는 DSSE-KMS를 사용하여 저장 시 암호화된 객체를 복제하려면 복제 구성에 지정하는 AWS Identity and Access Management(IAM) 역할에 다음 추가 권한을 부여합니다. IAM 역할과 연결된 권한 정책을 업데이트하여 이러한 권한을 부여합니다.

  • 소스 객체에 대한 s3:GetObjectVersionForReplication 작업 – 이 작업은 Amazon S3가 SSE-S3, SSE-KMS 또는 DSSE-KMS를 사용한 서버 측 암호화로 생성된 객체와 암호화되지 않은 객체를 모두 복제할 수 있도록 허용합니다.

    참고

    s3:GetObjectVersionForReplication은 복제에 필요한 최소한의 권한만 Amazon S3에 제공하므로 s3:GetObjectVersion 작업 대신 s3:GetObjectVersionForReplication 작업을 사용하는 것이 좋습니다. 또한 s3:GetObjectVersion 작업을 사용하면 암호화되지 않은 객체와 SSE-S3로 암호화된 객체를 복제할 수 있지만 KMS 키를 사용하여 암호화(SSE-KMS 또는 DSSE-KMS)된 객체는 복제할 수 없습니다.

  • KMS 키에 대한 kms:Decryptkms:Encrypt AWS KMS 작업

    • 소스 객체의 암호를 해독하는 데 사용되는 AWS KMS key에 kms:Decrypt 권한을 부여해야 합니다.

    • 객체 복제본의 암호를 해독하는 데 사용되는 AWS KMS key에 kms:Encrypt 권한을 부여해야 합니다.

  • 일반 텍스트 객체 복제를 위한 kms:GenerateDataKey 작업 - 기본적으로 SSE-KMS 또는 DSSE-KMS 암호화가 활성화된 버킷에 일반 텍스트 객체를 복제하는 경우, 대상 암호화 컨텍스트에 대한 kms:GenerateDataKey 권한과 KMS 키를 IAM 정책에 포함시켜야 합니다.

AWS KMS 조건 키를 사용하여 대상 버킷과 객체로만 이러한 권한을 제한하는 것이 좋습니다. IAM 역할을 소유한 AWS 계정은 정책에 나열된 KMS 키의 이러한 kms:Encrypt 및 kms:Decrypt 작업에 대한 권한이 있어야 합니다. 다른 AWS 계정이 KMS 키를 소유한 경우 KMS 키 소유자는 IAM 역할을 소유한 AWS 계정에 이러한 권한을 부여해야 합니다. 이러한 KMS 키에 대한 액세스를 관리하는 방법에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드AWS KMS에서 IAM 정책 사용을 참조하세요.

S3 버킷 키 및 복제

S3 버킷 키와 함께 복제를 사용하려면 객체 복제본을 암호화하는 데 사용되는 KMS 키에 대한 AWS KMS key 정책에 호출 보안 주체에 대한 kms:Decrypt 권한이 포함되어야 합니다. kms:Decrypt에 대한 호출은 S3 버킷 키를 사용하기 전에 S3 버킷 키의 무결성을 확인합니다. 자세한 내용은 복제와 함께 S3 버킷 키 사용 단원을 참조하십시오.

소스 또는 대상 버킷에 대해 S3 버킷 키가 활성화되면 암호화 컨텍스트는 객체 ARN(예: arn:aws:s3:::bucket_ARN)이 아니라 버킷 Amazon 리소스 이름(ARN)이 됩니다. 암호화 컨텍스트에 버킷 ARN을 사용하려면 IAM 정책을 업데이트해야 합니다.

"kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::bucket_ARN" ]

자세한 내용은 암호화 컨텍스트(x-amz-server-side-encryption-context)("REST API 사용" 섹션) 및 S3 버킷 키를 사용 설정하기 전에 유의할 변경 사항을 참조하세요.

예시 정책 - 복제와 함께 SSE-S3 및 SSE-KMS를 사용

다음 IAM 정책 예는 복제와 함께 SSE-S3 및 SSE-KMS를 사용하기 위한 스테이트먼트를 보여줍니다.

예 – 별도의 대상 버킷과 함께 SSE-KMS 사용

다음 정책 예는 별도의 대상 버킷과 함께 SSE-KMS를 사용하기 위한 스테이트먼트를 보여줍니다.

{ "Version":"2012-10-17", "Statement":[ { "Action": ["kms:Decrypt"], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*" ] } }, "Resource": [ "List of AWS KMS key ARNs that are used to encrypt source objects." ] }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-1-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket1/key-prefix1*" ] } }, "Resource": [ "AWS KMS key ARNs (in the same AWS 리전 as destination bucket 1). Used to encrypt object replicas created in destination bucket 1." ] }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-2-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket2/key-prefix1*" ] } }, "Resource": [ "AWS KMS key ARNs (in the same AWS 리전 as destination bucket 2). Used to encrypt object replicas created in destination bucket 2." ] } ] }
예 – SSE-S3 및 SSE-KMS로 생성된 객체 복제

다음은 암호화되지 않은 객체, SSE-S3로 생성된 객체, SSE-KMS로 생성된 객체를 복제하는 데 필요한 권한을 부여하는 완전한 IAM 정책입니다.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/key-prefix1*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*" ] } }, "Resource":[ "List of the AWS KMS key ARNs that are used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.destination-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::amzn-s3-demo-destination-bucket/prefix1*" ] } }, "Resource":[ "AWS KMS key ARNs (in the same AWS 리전 as the destination bucket) to use for encrypting object replicas" ] } ] }
예 – S3 버킷 키를 사용하여 객체 복제

다음은 S3 버킷 키로 객체를 복제하는 데 필요한 권한을 부여하는 전체 IAM 정책입니다.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/key-prefix1*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] } }, "Resource":[ "List of the AWS KMS key ARNs that are used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.destination-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::amzn-s3-demo-destination-bucket" ] } }, "Resource":[ "AWS KMS key ARNs (in the same AWS 리전 as the destination bucket) to use for encrypting object replicas" ] } ] }

교차 계정 시나리오를 위한 추가 권한 부여

소스 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유하는 교차 계정 시나리오에서는 KMS 키를 사용하여 객체 복제본을 암호화할 수 있습니다. 그러나 KMS 키 소유자는 원본 버킷 소유자에게 KMS 키를 사용할 수 있는 권한을 부여해야 합니다.

참고

계정 간 SSE-KMS 데이터를 복제해야 하는 경우 복제 규칙에 대상 계정에 대해 AWS KMS의 고객 관리형 키를 지정해야 합니다. AWS 관리형 키에서는 계정 간 사용을 허용하지 않으므로 계정 간 복제를 수행하는 데 사용할 수 없습니다.

소스 버킷 소유자에게 KMS 키 사용 권한 부여(AWS KMS 콘솔)
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/kms에서 AWS KMS 콘솔을 엽니다.

  2. AWS 리전을 변경하려면 페이지의 오른쪽 상단 모서리에 있는 리전 선택기를 사용합니다.

  3. 해당 계정에서 직접 생성하고 관리하는 키를 보려면 탐색 창에서 고객 관리형 키를 선택합니다.

  4. KMS 키를 선택합니다.

  5. 일반 구성 섹션에서 키 정책 탭을 선택합니다.

  6. 아래로 스크롤하여 Other AWS 계정(기타 AWS 계정)로 이동합니다.

  7. Add other AWS 계정(다른 AWS 계정 추가)를 선택합니다.

    기타 AWS 계정 대화 상자가 나타납니다.

  8. 대화 상자에서 다른 AWS 계정 추가를 선택합니다. arn:aws:iam::의 경우 소스 버킷 계정 ID를 입력합니다.

  9. Save changes(변경 사항 저장)를 선택합니다.

원본 버킷 소유자에게 KMS 키 사용 권한 부여(AWS CLI)

AWS KMS 트랜잭션 할당량 고려 사항

교차 지역 복제(CRR)를 사용 설정한 후 AWS KMS 암호화를 사용하여 새 객체를 많이 추가하면 조절(HTTP 503 503 Service Unavailable 오류)이 발생할 수 있습니다. 제한은 초당 AWS KMS 트랜잭션 수가 현재 할당량을 초과할 경우 발생합니다. 자세한 내용은 개발자 안내서에서 AWS Key Management Service 할당량을 참조하십시오.

할당량 증가를 요청하려면 Service Quotas를 사용합니다. 자세한 내용은 할당량 증가 요청을 참조하십시오. 해당 리전에서 Service Quotas가 지원되지 않을 경우AWS Support 사례를 엽니다.

암호화된 객체에 대한 복제 활성화

기본적으로 Amazon S3는 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS) 또는 AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)를 사용하여 암호화된 객체를 복제하지 않습니다. SSE-KMS 또는 DSS-KMS로 암호화된 객체를 복제하려면 버킷 복제 구성을 수정하여 이러한 객체를 복제하도록 Amazon S3에 지시해야 합니다. 이 예제에서는 Amazon S3 콘솔 및 AWS Command Line Interface(AWS CLI)를 사용해 암호화된 객체 복제를 사용하도록 버킷 복제 구성을 변경하는 방법을 설명합니다.

자세한 내용은 암호화(SSE-C, SSE-S3, SSE-KMS, DSSE-KMS)된 객체 복제 단원을 참조하십시오.

참고

소스 또는 대상 버킷에 대해 S3 버킷 키를 사용하도록 설정하면 암호화 컨텍스트는 객체의 ARN이 아니라 버킷의 ARN(Amazon 리소스 이름)이 됩니다. 암호화 컨텍스트에 버킷 ARN을 사용하려면 IAM 정책을 업데이트해야 합니다. 자세한 내용은 S3 버킷 키 및 복제 단원을 참조하십시오.

참고

Amazon S3에서 다중 리전 AWS KMS keys를 사용할 수 있습니다. 그러나 Amazon S3는 현재 다중 리전 키를 단일 리전 키인 것처럼 취급하며, 키의 다중 리전 기능을 사용하지 않습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다중 리전 키 사용을 참조하세요.

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

AWS CLI를 사용하여 암호화된 객체를 복제하려면 다음을 수행합니다.

  • 소스 및 대상 버킷을 생성하고 버킷에 버전 관리를 사용 설정합니다.

  • Amazon S3에 객체 복제 권한을 제공하는 AWS Identity and Access Management(IAM) 역할을 생성합니다. IAM 역할의 권한은 암호화된 객체를 복제하는 데 필요한 권한을 포함합니다.

  • 소스 버킷에 복제 구성을 추가합니다. 복제 구성이 KMS 키를 사용하여 암호화된 객체를 복제하는 데 관련된 정보를 제공합니다.

  • 소스 버킷에 암호화된 객체를 추가합니다.

  • 설정을 테스트하여 암호화된 객체가 대상 버킷에 복제되고 있는지 확인합니다.

아래에서 절차를 알아볼 수 있습니다.

서버 측 암호화된 객체 복제(AWS CLI)
  1. 이 예시에서는 동일한 AWS 계정에 amzn-s3-demo-source-bucket 및 amzn-s3-demo-destination-bucket 버킷을 모두 생성합니다. AWS CLI의 보안 인증 프로필도 설정합니다. 이 예시에서는 acctA라는 프로필 이름을 사용합니다.

    자격 증명 프로파일 설정에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서의 명명된 프로파일을 참조하세요. 이 예시에서 CLI 명령을 사용하려면 user input placeholders를 실제 정보로 대체합니다.

  2. 다음 명령을 사용하여 DOC-EXAMPLE-SOURCE-BUCKET 버킷을 생성하고 버킷에서 버전 관리를 활성화합니다. 다음 예시 명령은 미국 동부(버지니아 북부)(us-east-1) 리전에 DOC-EXAMPLE-SOURCE-BUCKET 버킷을 생성합니다.

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 다음 명령을 사용하여 DOC-EXAMPLE-DESTINATION-BUCKET 버킷을 생성하고 버킷에서 버전 관리를 활성화합니다. 다음 예시 명령은 미국 서부(오레곤)(us-west-2) 리전에 DOC-EXAMPLE-DESTINATION-BUCKET 버킷을 생성합니다.

    참고

    DOC-EXAMPLE-SOURCE-BUCKET 및 DOC-EXAMPLE-DESTINATION-BUCKET 버킷이 모두 동일한 AWS 계정에 있을 때 복제 구성을 설정하려면 동일한 프로필을 사용합니다. 이 예제에서는 acctA을 사용합니다. 버킷을 서로 다른 AWS 계정에서 소유한 경우 복제 구성을 테스트하려면 각각 다른 프로필을 지정합니다.

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  4. IAM 서비스 역할을 생성합니다. 나중에 DOC-EXAMPLE-SOURCE-BUCKET 버킷에 추가하는 복제 구성에서 이 역할을 지정합니다. Amazon S3는 사용자를 대신하여 객체를 복제하기 위해 이 역할을 맡습니다. IAM 역할은 다음의 두 단계로 생성합니다.

    • 서비스 역할을 만듭니다.

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

    1. IAM 서비스서비스 역할을 생성하려면 다음을 수행합니다.

      1. 다음 신뢰 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 s3-role-trust-policy-kmsobj.json 파일로 저장합니다. 이 정책은 Amazon S3가 사용자를 대신해 작업을 수행할 수 있도록 역할을 맡을 권한을 Amazon S3 서비스 보안 주체에 부여합니다.

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

        $ aws iam create-role \ --role-name replicationRolekmsobj \ --assume-role-policy-document file://s3-role-trust-policy-kmsobj.json \ --profile acctA
    2. 다음으로, 역할에 권한 정책을 연결합니다. 이 정책은 다양한 Amazon S3 버킷 및 객체 작업에 대한 권한을 부여합니다.

      1. 다음 권한 정책을 복사하여 로컬 컴퓨터의 현재 디렉터리에 s3-role-permissions-policykmsobj.json 파일로 저장합니다. IAM 역할을 생성하여 나중에 정책을 여기에 연결할 것입니다.

        중요

        권한 정책에서 amzn-s3-demo-source-bucket 및 amzn-s3-demo-destination-bucket 버킷 암호화에 사용할 AWS KMS 키 ID를 지정합니다. amzn-s3-demo-source-bucketamzn-s3-demo-destination-bucket 버킷에 대해 별도의 KMS 키 2개를 생성해야 합니다. AWS KMS keys는 생성된 AWS 리전 외부에서 공유되지 않습니다.

        { "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket", "arn:aws:s3:::amzn-s3-demo-source-bucket/*" ] }, { "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Effect":"Allow", "Condition":{ "StringLikeIfExists":{ "s3:x-amz-server-side-encryption":[ "aws:kms", "AES256", "aws:kms:dsse" ], "s3:x-amz-server-side-encryption-aws-kms-key-id":[ "AWS KMS key IDs(in ARN format) to use for encrypting object replicas" ] } }, "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/*" ] } }, "Resource":[ "AWS KMS key IDs(in ARN format) used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-west-2.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } }, "Resource":[ "AWS KMS key IDs(in ARN format) to use for encrypting object replicas" ] } ] }
      2. 정책을 생성하여 역할에 연결합니다.

        $ aws iam put-role-policy \ --role-name replicationRolekmsobj \ --policy-document file://s3-role-permissions-policykmsobj.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
  5. 다음 복제 구성을 amzn-s3-demo-source-bucket 버킷에 추가합니다. 이 구성은 Tax/ 접두사가 있는 객체를 amzn-s3-demo-destination-bucket 버킷으로 복제하도록 Amazon S3에 지시합니다.

    중요

    복제 구성에서 Amazon S3가 맡을 수 있는 IAM 역할을 지정합니다. iam:PassRole 권한이 있을 경우 이 권한만 사용할 수 있습니다. CLI 명령에서 지정한 프로필에 이 권한이 있어야 합니다. 자세한 내용은 IAM 사용 설명서에서 사용자에게 AWS 서비스에 역할을 전달할 권한 부여를 참조하세요.

    <ReplicationConfiguration> <Role>IAM-Role-ARN</Role> <Rule> <Priority>1</Priority> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Status>Enabled</Status> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

    amzn-s3-demo-source-bucket 버킷에 복제 구성을 추가하려면 다음을 수행합니다.

    1. AWS CLI를 사용하려면 복제 구성을 JSON으로 지정해야 합니다. 다음 JSON을 로컬 컴퓨터의 현재 디렉터리에 파일(replication.json)로 저장합니다.

      { "Role":"IAM-Role-ARN", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ "Prefix":"Tax" }, "Destination":{ "Bucket":"arn:aws:s3:::amzn-s3-demo-destination-bucket", "EncryptionConfiguration":{ "ReplicaKmsKeyID":"AWS KMS key IDs (in ARN format) to use for encrypting object replicas" } }, "SourceSelectionCriteria":{ "SseKmsEncryptedObjects":{ "Status":"Enabled" } } } ] }
    2. JSON을 편집하여 amzn-s3-demo-destination-bucket 버킷, AWS KMS key IDs (in ARN format) 및 IAM-role-ARN에 대한 값을 제공합니다. 변경 사항을 저장합니다.

    3. 다음 명령을 사용하여 amzn-s3-demo-source-bucket 버킷에 복제 구성을 추가합니다. 반드시 amzn-s3-demo-source-bucket 버킷 이름을 제공해야 합니다.

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket amzn-s3-demo-source-bucket \ --profile acctA
  6. 구성을 테스트하여 암호화된 객체가 복제되는지 확인합니다. Amazon S3 콘솔에서 다음과 같이 수행합니다.

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

    2. amzn-s3-demo-source-bucket 버킷에서 이름이 Tax인 폴더를 생성합니다.

    3. 폴더에 샘플 객체를 추가합니다. 반드시 암호화 옵션을 선택하고 객체를 암호화할 KMS 키를 지정해야 합니다.

    4. amzn-s3-demo-destination-bucket 버킷에 객체 복제본이 있으며 해당 복제본이 구성에서 지정한 KMS 키를 사용하여 암호화되었는지 확인합니다. 자세한 내용은 복제 상태 정보 가져오기 단원을 참조하십시오.

복제 구성을 추가하는 코드 예시는 AWS SDK 사용 섹션을 참조하세요. 복제 구성을 적절히 수정해야 합니다.

개념적 정보는 암호화(SSE-C, SSE-S3, SSE-KMS, DSSE-KMS)된 객체 복제 단원을 참조하십시오.