서버 측 암호화(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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-SOURCE-BUCKET" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-SOURCE-BUCKET" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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:::DOC-EXAMPLE-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 키를 사용할 수 있는 권한을 부여해야 합니다.

참고

AWS 관리형 키를 통해 암호화된 객체는 키 정책을 수정할 수 없으므로 계정 간에 공유할 수 없습니다. 계정 간 SSE-KMS 데이터를 복제해야 하는 경우 AWS KMS의 고객 관리형 키를 사용해야 합니다.

소스 버킷 소유자에게 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 사례를 엽니다.