KMS 키를 사용하여 서버 측 암호화(SSE)로 생성된 객체 복제 - Amazon Simple Storage Service

KMS 키를 사용하여 서버 측 암호화(SSE)로 생성된 객체 복제

기본적으로 Amazon S3는 AWS KMS에 저장된 고객 관리형 키를 사용한 서버 측 암호화로 유휴 시 저장된 객체를 복제하지 않습니다. 이 섹션에서는 이러한 객체를 복제하도록 Amazon S3에 지시하기 위해 추가하는 추가 구성을 설명합니다.

참고

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

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

중요

암호화된 데이터의 복제는 완전히 Amazon S3 내에서 수행되는 서버 측 프로세스입니다. 고객 제공 암호화 키를 사용하는 서버 측 암호화(SSE-C)로 생성된 객체는 복제되지 않습니다.

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

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

  • Destination 구성에서 Amazon S3가 객체 복제본을 암호화하는 데 사용할 대칭 암호화 AWS KMS 고객 관리형 키를 추가합니다.

  • SourceSelectionCriteria 요소를 추가하여 KMS 키를 사용하는 암호화된 객체 복제를 사용 설정함으로써 명시적으로 옵트인합니다.

<ReplicationConfiguration> <Rule> ... <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> ... <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ID for the AWS 리전 of the destination bucket.</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> ... </Rule> </ReplicationConfiguration>
중요

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

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

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

<?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:::destination-bucket</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>The AWS KMS key ID for the AWS 리전 of the destination buckets (S3 uses it to encrypt object replicas).</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> </Rule> </ReplicationConfiguration>

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

IAM 역할에 추가 권한 부여

AWS Key Management Service(AWS KMS)에서 유휴 시 암호화된 객체를 복제하려면 복제 구성에 지정하는 IAM 역할에 다음 추가 권한을 부여합니다. IAM 역할과 연결된 권한 정책을 업데이트하여 이러한 권한을 부여합니다. 고객 제공 암호화 키를 사용하는 서버 측 암호화(SSE-C)로 생성된 객체는 복제되지 않습니다.

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

    참고

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

  • kms:Decryptkms:Encrypt AWS KMS 작업:

    • 원본 객체의 암호를 복호화하는 데 사용된 KMS 키에 대한 kms:Decrypt 권한

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

      참고

      키 정책은 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하도록 허용해야 합니다. 키 정책에서 허용하지 않는 경우 KMS 키에 대한 액세스를 제어하려는 IAM 정책은 효과가 없습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서의 기본 키 정책을 참조하세요.

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

Amazon S3 버킷 키 및 복제

원본 및 대상 버킷에 대해 S3 버킷 키가 사용 설정되면 암호화 컨텍스트는 객체 ARN이 아니라 버킷 Amazon 리소스 이름(ARN)이 됩니다. 예: arn:aws:s3:::bucket_ARN. 암호화 컨텍스트에 버킷 ARN을 사용하려면 IAM 정책을 업데이트해야 합니다. 그러나 S3 버킷 키가 대상 버킷에서만 사용 설정되고 원본 버킷에서는 사용 설정되지 않은 경우 암호화 컨텍스트에 버킷 ARN을 사용하도록 IAM 정책을 업데이트할 필요가 없습니다.

아래 예는 버킷 ARN을 사용한 암호화 컨텍스트를 보여 줍니다.

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

자세한 내용은 암호화 컨텍스트S3 버킷 키를 사용 설정하기 전에 유의할 변경 사항 단원을 참조하십시오.

정책 예 - 복제와 함께 AWS KMS 서버 측 암호화(SSE-KMS) 사용

다음 IAM 정책 예는 복제와 함께 AWS KMS 서버 측 암호화를 사용하는 방법을 보여줍니다.

이 예제에서 암호화 컨텍스트는 객체 ARN입니다. S3 버킷 키가 사용 설정된 상태에서 SSE-KMS를 사용하는 경우 버킷 ARN을 암호화 컨텍스트로 사용해야 합니다. 자세한 정보는 암호화 컨텍스트을 참조하세요.

예 AWS KMS 서버 측 암호화(SSE-KMS) 사용 – 별도의 대상 버킷

다음 정책 예제는 별도의 대상 버킷과 함께 AWS KMS을(를) 사용하기 위한 문을 보여 줍니다.

{ "Version": "2012-10-17", "Statement": [{ "Action": ["kms:Decrypt"], "Effect": "Allow", "Resource": "List of AWS KMS key ARNs used to encrypt source objects.", "Condition": { "StringLike": { "kms:ViaService": "s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::source-bucket-name/key-prefix1/*" } } }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Resource": "AWS KMS key ARNs (for the AWS 리전 of the destination bucket 1). Used to encrypt object replicas created in destination bucket 1.", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-1-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::destination-bucket-name-1/key-prefix1/*" } } }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Resource": "AWS KMS key ARNs (for the AWS 리전 of destination bucket 2). Used to encrypt object replicas created in destination bucket 2.", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-2-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::destination-bucket-2-name/key-prefix1*" } } } ] }

예 Amazon S3 관리형 암호화 키 및 KMS 키를 사용하여 서버 측 암호화로 생성된 객체 복제

다음은 암호화되지 않은 객체, Amazon S3 관리형 암호화 키 및 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/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::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:::source-bucket-name/key-prefix1*" ] } }, "Resource":[ "List of AWS KMS key ARNs 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":[ "AWS KMS key ARNs (for the AWS 리전 of the destination buckets) to use for encrypting object replicas" ] } ] }

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

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

원본 버킷 소유자에게 KMS 키 사용 권한 부여(IAM 콘솔)

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/kms에서 AWS Key Management Service(AWS KMS) 콘솔을 엽니다.

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

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

  4. KMS 키를 선택합니다.

  5. General configuration(일반 구성)에서 Key policy(키 정책) 탭을 선택합니다.

  6. 다른 AWS 계정을 선택합니다.

  7. 다른 AWS 계정 추가를 선택합니다.

  8. arn:aws:iam::에 원본 버킷 계정 ID를 입력합니다.

  9. 변경 사항 저장을 선택합니다.

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

AWS KMS 트랜잭션 제한 고려 사항

교차 리전 복제(CRR)을 사용 설정한 후, AWS KMS 암호화로 많은 수의 새 객체를 추가할 때 조절(HTTP 503 속도 하락 오류)가 발생할 수 있습니다. 조절은 초당 AWS KMS 트랜잭션 수가 현재 제한을 초과할 경우 발생합니다. 자세한 정보는 AWS Key Management Service 개발자 안내서제한을 참조하세요.

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