메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

CRR 연습 4: AWS KMS 관리형 암호화 키를 사용하는 서버 측 암호화로 생성된 객체를 복제하도록 Amazon S3에 지시

AWS KMS 관리형 키를 사용하는 서버 측 암호화를 사용하여 생성되는 객체가 원본 버킷에 있을 수 있습니다. 기본적으로 Amazon S3는 이러한 객체를 복제하지 않습니다. 하지만 Amazon S3에 이러한 객체를 복제하도록 지시하는 선택적 구성을 버킷 복제 구성에 추가할 수 있습니다.

이 연습에서는 먼저 원본 버킷과 대상 버킷을 서로 다른 AWS 계정에서 소유한 교차 계정 시나리오에서 복제 구성을 설정합니다. 그런 다음 AWS KMS 관리형 키로 암호화된 객체를 복제하도록 Amazon S3에 지시하는 구성을 업데이트하는 방법을 설명합니다.

참고

이 예에서는 기존 연습을 사용하여 교차 계정 시나리오에서 CRR을 설정하지만, 원본 버킷과 대상 버킷의 소유자가 동일한 경우에도 SSE-KMS로 암호화된 객체를 복제하도록 구성할 수 있습니다.

  1. CRR 연습 2를 완료합니다. 지침은 연습 2: 원본과 대상 버킷을 서로 다른 AWS 계정이 소유하는 교차 리전 복제 구성 단원을 참조하십시오.

  2. 원본 버킷의 복제 구성을 다음과 같이 바꿉니다(AWS KMS 키로 암호화된 원본 객체를 복제하도록 Amazon S3에 지시하는 옵션 추가).

    <ReplicationConfiguration> <Role>IAM role ARN</Role> <Rule> <Prefix>Tax</Prefix> <Status>Enabled</Status> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::dest-bucket-name</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ID to use for encrypting object replicas.</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

    이 예에서는 AWS CLI 또는 AWS SDK를 사용하여 복제 구성을 추가할 수 있습니다.

    • AWS CLI 사용

      AWS CLI를 사용하려면 복제 구성을 JSON으로 지정해야 합니다. 다음 JSON을 파일(replication.json)에 저장합니다.

      { "Role": "IAM role ARN", "Rules": [ { "Prefix": "Tax", "Status": "Enabled", "SourceSelectionCriteria": { "SseKmsEncryptedObjects" : { "Status" : "Enabled" } }, "Destination": { "Bucket": "arn:aws:s3:::dest-bucket-name", "EncryptionConfiguration" : { "ReplicaKmsKeyID": "AWS KMS key ARN(created in the same region as the destination bucket)." } } } ] }

      버킷 이름과 역할 ARN을 제공하여 JSON을 업데이트합니다. 그런 다음, AWS CLI 명령을 실행해 복제 구성을 원본 버킷에 추가합니다.

      $ aws s3api put-bucket-replication \ --bucket source-bucket \ --replication-configuration file://replication.json \ --profile accountA

      AWS CLI를 설정하는 자세한 방법은 예제 안내를 위한 도구 설정 단원을 참조하십시오.

      계정 A는 get-bucket-replication 명령을 사용해 복제 구성을 검색할 수 있습니다.

      $ aws s3api get-bucket-replication \ --bucket source-bucket \ --profile accountA
    • AWS SDK for Java 사용

      코드에 대한 예는 AWS SDK for Java를 사용하여 교차 리전 복제 설정 단원을 참조하십시오.

  3. AWS KMS 작업에 대한 권한을 추가하여 IAM 역할의 권한 정책을 업데이트합니다.

    { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::source-bucket-name/Tax" ] } }, "Resource":[ "List of AWS KMS key IDs used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.dest-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::dest-bucket-name/Tax" ] } }, "Resource":[ "List of AWS KMS key IDs that you want S3 to use to encrypt object replicas." ] }
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource": [ "arn:aws:s3:::source-bucket/Tax" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource": [ "arn:aws:s3:::source-bucket" ] }, { "Effect": "Allow", "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource": "arn:aws:s3:::dest-bucket/*" }, { "Action": [ "kms:Decrypt" ], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::source-bucket/Tax*" ] } }, "Resource": [ "List of AWS KMS key IDs used to encrypt source objects." ] }, { "Action": [ "kms:Encrypt" ], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.dest-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::dest-bucket/Tax*" ] } }, "Resource": [ "List of AWS KMS key IDs that you want S3 to use to encrypt object replicas." ] } ] }
  4. 설정을 테스트합니다. 콘솔에서 AWS KMS 관리형 키를 사용하여 객체를 원본 버킷의 /Tax 폴더에 업로드합니다. Amazon S3가 대상 버킷에 객체를 복제했는지 확인합니다.