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

CRR 추가 구성: AWS KMS-관리형 암호화 키를 사용하는 서버 측 암호화(SSE)로 생성된 객체 복제

AWS KMS 관리형 키를 사용하는 서버 측 암호화를 사용하여 생성되는 객체가 원본 버킷에 있을 수 있습니다. 기본적으로 Amazon S3는 AWS KMS 암호화 객체를 복제하지 않습니다. Amazon S3에서 이러한 객체를 복제하려는 경우 기본 복제 구성 외에도 다음을 수행해야 합니다.

  • Amazon S3에서 객체 복제본을 암호화하는 데 사용할 AWS KMS 관리형 키를 대상 버킷 리전에 제공합니다.

  • Amazon S3가 AWS KMS 키를 사용하여 객체에 액세스할 수 있도록 IAM 역할에 추가 권한을 부여합니다.

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

기본 복제 구성에서 다음 추가 정보를 추가합니다.

  • 이 기능(Amazon S3에서 AWS KMS 관리형 키를 사용하여 암호화되는 객체를 복제)을 사용하려면 고객은 <SourceSelectionCriteria> 요소를 추가하여 명시적으로 옵트인해야 합니다.

    <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria>
  • <EncryptionConfiguration> 요소를 추가하여 Amazon S3에서 객체 복제본을 암호화하는 데 사용할 AWS KMS 관리형 키를 제공합니다.

    <EncryptionConfiguration> <ReplicaKmsKeyID>The AWS KMS key ID (S3 can use to encrypt object replicas).</ReplicaKmsKeyID> </EncryptionConfiguration>

    중요

    AWS KMS 키 리전은 대상 버킷의 리전과 동일해야 합니다. AWS KMS 키가 올바른지 확인하십시오. PUT 버킷 복제 API는 잘못된 AWS KMS 키를 확인하지 않습니다. 200개의 확인 응답을 받지만, AWS KMS 키가 잘못된 경우 복제가 실패합니다.

다음은 선택적 구성 요소가 포함된 교차 리전 복제 구성의 예입니다.

<ReplicationConfiguration> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <Prefix>prefix1</Prefix> <Status>Enabled</Status> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::destination-bucket</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>The AWS KMS key ID (that S3 can use to encrypt object replicas).</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

이 복제 구성에는 한 가지 규칙이 있습니다. 이 규칙은 지정된 키 접두사를 포함하는 객체에 적용됩니다. Amazon S3는 AWS KMS 키 ID를 사용하여 이러한 객체 복제본을 암호화합니다.

IAM 역할 추가 권한

Amazon S3는 AWS KMS 관리형 키를 사용하는 서버 측 암호화를 사용하여 생성된 객체를 복제하려면 추가 권한이 필요합니다. IAM 역할에 다음과 같은 추가 권한을 부여해야 합니다.

  • 원본 객체에 s3:GetObjectVersionForReplication 작업에 대한 권한을 부여합니다. 이 작업에 대한 권한은 Amazon S3가 암호화되지 않은 객체와 SSE-S3(Amazon S3 관리형 암호화 키) 또는 AWS KMS 관리형 암호화(SSE-KMS) 키를 사용하는 서버 측 암호화로 생성된 객체를 복제할 수 있도록 허용합니다.

    참고

    s3:GetObjectVersion 작업에 대한 권한은 암호화되지 않은 객체 및 SSE-S3로 암호화된 객체의 복제를 허용합니다. 하지만 이 권한은 AWS KMS 관리형 암호화 키를 사용하여 생성된 객체의 복제를 허용하지 않습니다.

    참고

    Amazon S3에 교차 리전 복제에 필요한 최소한의 권한만 제공하므로 s3:GetObjectVersionForReplication 작업을 s3:GetObjectVersion 작업 대신 사용하는 것이 좋습니다.

  • 다음 AWS KMS 작업에 대한 권한을 부여합니다.

    • 원본 객체를 암호화하는 데 사용된 AWS KMS 키에 대한 kms:Decrypt 권한입니다.

    • 객체 복제본을 암호화하는 데 사용된 AWS KMS 키에 대한 kms:Encrypt 권한입니다.

    다음 예제 정책 설명과 같이 이러한 권한을 AWS KMS 조건 키를 사용하는 특정 버킷 및 객체로 제한하는 것이 좋습니다.

    { "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/prefix1*", ] } }, "Resource": [ "List of AWS KMS key IDs that was 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:::destination-bucket-name/prefix1*", ] } }, "Resource": [ "List of AWS KMS key IDs, that you want S3 to use to encrypt object replicas.", ] }

    IAM 역할을 소유하는 AWS 계정은 정책에 나열된 AWS KMS 키의 이러한 AWS KMS 작업(kms:Encryptkms:Decrypt)에 대한 권한이 있어야 합니다. 다른 AWS 계정이 AWS KMS 키를 소유하는 경우 키 소유자는 IAM 역할을 소유하는 AWS 계정에 이러한 권한을 부여해야 합니다. 이러한 키에 대한 액세스를 관리하는 방법에 대한 자세한 내용은 AWS Key Management Service Developer Guide의 AWS KMS에서 IAM 정책 사용을 참조하십시오.

    다음은 암호화되지 않은 객체, Amazon S3 관리형 암호화 키 및 AWS KMS 관리형 암호화 키를 사용하는 서버 측 암호화로 생성된 객체를 복제하는 데 필요한 권한을 부여하는 완전한 IAM 정책입니다.

    참고

    고객 제공 암호화 키를 사용하는 서버 측 암호화(SSE-C)로 생성된 객체는 복제되지 않습니다.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source-bucket/prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::destination-bucket/prefix1*" }, { "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/prefix1*" ] } }, "Resource":[ "List of AWS KMS key IDs 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:::destination-bucket-name/prefix1*" ] } }, "Resource":[ "List of AWS KMS key IDs that you want S3 to use to encrypt object replicas." ] } ] }

교차 계정 시나리오: 추가 권한

교차 계정 시나리오에서 대상 AWS KMS 키는 고객 마스터 키(CMK)여야 합니다. 키 소유자는 다음 방법 중 하나를 사용하여 원본 버킷 소유자에게 키를 사용할 수 있는 권한을 부여해야 합니다.

  • IAM 콘솔을 사용합니다.

    1. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

    2. [Encryption keys]를 선택합니다.

    3. AWS KMS 키를 선택합니다.

    4. [Key Policy], [Key Users], [External Accounts]에서 [Add External Account]를 선택합니다.

    5. [arn:aws:iam::] 상자에서 원본 버킷 계정 ID를 지정합니다.

    6. [Save Changes]를 선택합니다.

  • AWS CLI를 사용합니다. 자세한 내용은 AWS CLI 명령 참조의 put-key-policy를 참조하십시오. 기본 API에 대한 자세한 내용은 AWS Key Management Service API ReferencePutKeyPolicy를 참조하십시오.

관련 고려 사항

CRR을 활성화한 후, AWS KMS 암호화로 많은 수의 새 객체를 추가할 때 조절(HTTP 503 속도 하락 오류)가 발생할 수 있습니다. 이 오류는 AWS KMS에서 지원되는 초당 KMS 트랜잭션 제한과 관련됩니다. 자세한 내용은 AWS Key Management Service Developer Guide의 Limits 단원을 참조하십시오.

이 경우 AWS 지원 센터에서 사례를 생성하여 AWS KMS API 속도 제한 증가를 요청하는 것이 좋습니다.  자세한 내용은 https://console.aws.amazon.com/support/home#/ 단원을 참조하십시오.