기존 데이터의 서버 측 암호화 업데이트
기존 데이터의 서버 측 암호화 업데이트 (Updating server-side encryption for existing data)
UpdateObjectEncryption API 작업을 사용하면 기존 암호화 객체의 서버 측 암호화 유형을 SSE-S3에서 SSE-KMS로 원자적으로 업데이트할 수 있어요.
출처: 문서
본문
모든 Amazon S3 버킷에는 기본적으로 암호화가 구성되어 있고, 객체는 Amazon S3 관리 키(SSE-S3)를 사용한 서버 측 암호화로 자동 암호화돼요. 이 기본 암호화 설정은 Amazon S3 버킷의 모든 새 객체에 적용돼요.
UpdateObjectEncryption API 작업을 사용하면 범용 버킷의 기존 암호화 객체에 대한 서버 측 암호화 유형을 Amazon S3 관리 암호화(SSE-S3)를 사용한 서버 측 암호화에서 AWS Key Management Service(AWS KMS) 암호화 키를 사용한 서버 측 암호화(SSE-KMS)로 원자적으로 업데이트할 수 있어요. UpdateObjectEncryption API 작업은 봉투 암호화를 사용해 객체를 암호화하고 복호화하는 데 사용되는 데이터 키를 새로 지정한 서버 측 암호화 유형으로 다시 암호화해요.
Amazon S3는 데이터 이동 없이 이 암호화 유형 업데이트를 수행해요. 즉, UpdateObjectEncryption 작업을 사용할 때 데이터가 복사되지 않고, S3 Glacier Flexible Retrieval 또는 S3 Glacier Deep Archive의 보관된 객체가 복원되지 않으며, S3 Intelligent-Tiering 스토리지 클래스의 객체가 계층 간에 이동되지 않아요. 또한 UpdateObjectEncryption 작업은 스토리지 클래스, 생성 날짜, 마지막 수정 날짜, ETag 및 체크섬 속성을 포함한 모든 객체 메타데이터 속성을 보존해요.
UpdateObjectEncryption 작업은 범용 버킷이 지원하는 모든 S3 스토리지 클래스를 지원해요. UpdateObjectEncryption 작업으로 다음을 수행할 수 있어요.
- 암호화 객체를 Amazon S3 관리 암호화(SSE-S3)를 사용한 서버 측 암호화에서 AWS Key Management Service(AWS KMS) 암호화 키를 사용한 서버 측 암호화(SSE-KMS)로 변경해요.
- 객체 수준 SSE-KMS 암호화 객체를 S3 Bucket Keys를 사용하도록 업데이트하면 Amazon S3에서 AWS KMS로 가는 AWS KMS 요청 트래픽이 줄어들어요. 자세한 내용은 Amazon S3 Bucket Keys로 SSE-KMS 비용 절감하기를 참고하세요.
- 데이터를 암호화하는 데 사용되는 고객 관리 KMS 키를 변경해 사용자 지정 키 회전 표준을 준수할 수 있어요.
참고 암호화되지 않은 원본 객체나 AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 또는 고객 제공 암호화 키(SSE-C)로 암호화된 원본 객체는 이 작업에서 지원되지 않아요.
UpdateObjectEncryption 작업은 객체의 크기나 스토리지 클래스(S3 Glacier Flexible Retrieval 또는 S3 Glacier Deep Archive 포함)와 관계없이 일반적으로 밀리초 내에 완료돼요. 이 작업은 S3 Intelligent-Tiering의 접근으로 계산되지 않으므로 객체의 서버 측 암호화 유형을 변경해도 Infrequent Access 계층 또는 Archive Instant Access 계층의 객체가 자동으로 Frequent Access 계층으로 이동하지 않아요.
UpdateObjectEncryption은 Amazon S3 서버 액세스 로그와 AWS CloudTrail 데이터 이벤트에 기록되는 객체 수준(데이터 플레인) API 작업이에요. 자세한 내용은 Amazon S3 로깅 옵션을 참고하세요.
UpdateObjectEncryption 작업은 PUT, COPY, POST 및 LIST 요청과 동일한 가격(1,000개 요청당)이며 기본 객체의 스토리지 클래스와 관계없이 항상 S3 Standard 스토리지 클래스 요청으로 청구돼요. 자세한 내용은 Amazon S3 요금을 참고하세요.
제한 사항 및 고려 사항
UpdateObjectEncryption 작업을 사용할 때는 다음 제한 사항과 고려 사항이 적용돼요.
UpdateObjectEncryption작업은 암호화되지 않은 객체나 AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 또는 고객 제공 암호화 키(SSE-C)로 암호화된 객체를 지원하지 않아요. 또한UpdateObjectEncryption요청에서 요청된 새 암호화 유형으로 SSE-S3를 지정할 수 없어요.UpdateObjectEncryption작업으로 S3 버전 관리가 활성화된 버킷의 객체를 업데이트할 수 있어요. 특정 버전의 암호화 유형을 업데이트하려면UpdateObjectEncryption요청에 버전 ID를 지정해야 해요. 버전 ID를 지정하지 않으면UpdateObjectEncryption요청은 객체의 현재 버전에 대해 동작해요. S3 버전 관리에 대한 자세한 내용은 S3 버전 관리로 객체의 여러 버전 유지하기를 참고하세요.UpdateObjectEncryption작업은 S3 Object Lock 보존 모드 또는 법적 보존이 적용된 객체에서는 실패해요. 객체에 governance 모드 보존 기간이나 법적 보존이 있다면UpdateObjectEncryption요청을 발행하기 전에 먼저 객체의 Object Lock 상태를 제거해야 해요. Object Lock compliance 모드 보존 기간이 적용된 객체에는UpdateObjectEncryption작업을 사용할 수 없어요. S3 Object Lock에 대한 자세한 내용은 Object Lock으로 객체 잠금하기를 참고하세요.- 라이브 복제가 활성화된 소스 버킷에 대한
UpdateObjectEncryption요청은 대상 버킷에서 복제본 이벤트를 시작하지 않아요. 소스 버킷과 대상 버킷 모두에서 객체의 암호화 유형을 변경하려면 소스 및 대상 버킷의 객체에 대해 별도의UpdateObjectEncryption요청을 시작해야 해요. - 기본적으로 고객 관리 KMS 키를 지정하는 모든
UpdateObjectEncryption요청은 버킷 소유자의 AWS 계정이 소유한 KMS 키로 제한돼요. AWS Organizations를 사용 중이라면 AWS Support에 문의해 조직 내 다른 멤버 계정이 소유한 AWS KMS 키를 사용할 수 있는 기능을 요청할 수 있어요. - S3 Batch Replication을 사용해 데이터 세트를 리전 간 복제하고 객체의 서버 측 암호화 유형이 이전에 SSE-S3에서 SSE-KMS로업데이트되었다면 추가 권한이 필요할 수 있어요. 소스 리전 버킷에는
kms:decrypt권한이 있어야 해요. 그런 다음 대상 리전의 버킷에는kms:decrypt및kms:encrypt권한이 필요해요. UpdateObjectEncryption요청에 전체 KMS 키 ARN을 제공해야 해요. 별칭 이름이나 별칭 ARN은 사용할 수 없어요. 전체 KMS 키 ARN은 AWS KMS 콘솔에서 또는 AWS KMSDescribeKeyAPI를 사용해 확인할 수 있어요.
필요한 권한
UpdateObjectEncryption 작업을 수행하려면 다음 권한이 있어야 해요.
s3:UpdateObjectEncryptionkms:Encryptkms:Decryptkms:GenerateDataKeykms:ReEncrypt*
AWS Organizations를 사용 중이라면 조직 내 다른 AWS 계정의 고객 관리 KMS 키와 함께 이 작업을 사용하려면 organizations:DescribeAccount 권한이 있어야 해요. 또한 AWS Support에 문의해 조직 내 다른 멤버 계정이 소유한 AWS KMS 키를 사용할 수 있는 기능을 요청해야 해요.
UpdateObjectEncryption 작업을 수행하려면 IAM 역할에 다음 AWS Identity and Access Management(IAM) 정책을 추가하세요. 이 정책을 사용하려면 amzn-s3-demo-bucket을 범용 버킷의 이름으로 바꾸고 다른 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUpdateObjectEncryption",
"Effect": "Allow",
"Action": [
"s3:UpdateObjectEncryption",
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:ReEncrypt*",
"organizations:DescribeAccount"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket",
"arn:aws:s3:::amzn-s3-demo-bucket/*",
"arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
]
}
]
}
암호화 일괄 업데이트
단일 요청으로 둘 이상의 Amazon S3 객체의 서버 측 암호화 유형을 업데이트하려면 S3 Batch Operations를 사용할 수 있어요. S3 Batch Operations에 작업할 객체 목록을 제공하거나, 접두사, 스토리지 클래스, 생성 날짜, 암호화 유형, KMS 키 ARN 또는 S3 Bucket Key 상태와 같은 객체 메타데이터를 기반으로 객체 목록을 생성하도록 Batch Operations에 지시할 수 있어요. S3 Batch Operations는 지정된 작업을 수행하기 위해 해당 API 작업을 호출해요. 단일 Batch Operations 작업은 페타바이트 규모의 데이터가 포함된 버킷 내 수십억 개의 객체에 지정된 작업을 수행할 수 있어요. Batch Operations에 대한 자세한 내용은 Batch Operations로 객체 작업을 일괄 수행하기를 참고하세요.
S3 Batch Operations 기능은 진행 상황을 추적하고, 알림을 보내며, 모든 작업의 자세한 완료 보고서를 저장하여 완전히 관리되고 감사 가능한 서버리스 경험을 제공해요. Amazon S3 콘솔, AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 통해 S3 Batch Operations를 사용할 수 있어요. 자세한 내용은 객체 암호화 업데이트를 참고하세요.
객체의 암호화 업데이트
AWS Command Line Interface(AWS CLI), AWS SDK 또는 Amazon S3 REST API를 통해 객체의 서버 측 암호화 유형을 업데이트할 수 있어요.
객체의 암호화 업데이트
다음 명령을 실행하려면 AWS CLI가 설치되고 구성되어 있어야 해요. AWS CLI가 설치되어 있지 않다면 AWS Command Line Interface 사용자 안내서의 최신 AWS CLI 설치 또는 업데이트를 참고하세요.
또는 AWS CloudShell을 사용해 콘솔에서 AWS CLI 명령을 실행할 수 있어요. AWS CloudShell은 AWS Management Console에서 직접 실행할 수 있는 브라우저 기반의 사전 인증된 셸이에요. 자세한 내용은 AWS CloudShell 사용자 안내서의 CloudShell이란 무엇인가요? 및 AWS CloudShell 시작하기를 참고하세요.
AWS CLI로 객체의 암호화를 업데이트하려면
다음 예제 명령을 사용하려면 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
-
다음 명령을 사용해 범용 버킷(예:
amzn-s3-demo-bucket)의 단일 객체(index.html)의 암호화를 S3 Bucket Key를 사용하는 SSE-KMS로 업데이트해요.aws s3api update-object-encryption \ --bucket amzn-s3-demo-bucket \ --key index.html \ --object-encryption '{ "SSEKMS": { "KMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/f12a345a-678e-9bbb-1025-62e317037583", "BucketKeyEnabled": true }}'참고 전체 AWS KMS 키 Amazon Resource Name(ARN)을 지정해야 해요. KMS 키 ID와 KMS 키 별칭은 지원되지 않아요.
-
head-object명령을 실행해 객체의 업데이트된 암호화 유형을 확인해요.aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html
REST 요청을 보내 객체의 암호화를 업데이트할 수 있어요. 자세한 내용은 UpdateObjectEncryption을 참고하세요.
AWS SDK를 사용해 객체의 암호화를 업데이트할 수 있어요. 자세한 내용은 지원되는 SDK 목록을 참고하세요.
-
Java: 예제 다음 AWS SDK for Java 2.x 예제는 범용 버킷의 객체에 대한 암호화 유형을 SSE-KMS로 업데이트해요.
public void updateObjectEncryption(String bucketName, String objectKey, String versionId, String kmsKeyArn, boolean bucketKeyEnabled) { // Create the target object encryption type. ObjectEncryption objectEncryption = ObjectEncryption.builder() .ssekms(SSEKMSEncryption.builder() .kmsKeyArn(kmsKeyArn) .bucketKeyEnabled(bucketKeyEnabled) .build()) .build(); // Create the UpdateObjectEncryption request. UpdateObjectEncryptionRequest request = UpdateObjectEncryptionRequest.builder() .bucket(bucketName) .key(objectKey) .versionId(versionId) .objectEncryption(objectEncryption) .build(); // Update the object encryption. try { getS3Client().updateObjectEncryption(request); logger.info("Object encryption updated to SSE-KMS for {} in bucket {}", objectKey, bucketName); } catch (S3Exception e) { logger.error("Failed to update to object encryption: {} - Error code: {}", e.awsErrorDetails().errorMessage(), e.awsErrorDetails().errorCode()); throw e; } } -
Python: 예제 다음 AWS SDK for Python(Boto3) 예제는 범용 버킷의 객체에 대한 암호화 유형을 SSE-KMS로 업데이트하는 방법을 보여줘요.
response = client.update_object_encryption( Bucket='string', Key='string', VersionId='string', ObjectEncryption={ 'SSEKMS': { 'KMSKeyArn': 'string', 'BucketKeyEnabled': True|False } } )