디렉터리 버킷의 기본 암호화 설정 및 모니터링 - Amazon Simple Storage Service

디렉터리 버킷의 기본 암호화 설정 및 모니터링

Amazon S3 버킷에는 기본적으로 버킷 암호화가 활성화되어 있으며, 새로운 객체는 Amazon S3 관리형 키(SSE-S3)를 통한 서버 측 암호화를 사용하여 자동으로 암호화됩니다. 이 암호화는 Amazon S3 버킷의 모든 새 객체에 적용되며 무료로 제공됩니다.

키 교체 및 액세스 정책 권한 부여 관리와 같이 암호화 키를 더 세밀하게 제어해야 하는 경우 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화를 사용하는 방법도 있습니다.

참고
  • 버킷의 기본 암호화는 원하는 암호화 구성을 사용하고 CreateSession 요청 또는 PUT 객체 요청에서 버킷 기본 암호화를 재정의하지 않는 것이 좋습니다. 그러면 새 객체가 원하는 암호화 설정으로 자동 암호화됩니다. 디렉터리 버킷의 암호화 재정의 동작에 대한 자세한 내용은 Specifying server-side encryption with AWS KMS for new object uploads를 참조하세요.

  • SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 영역 엔드포인트 API 작업을 위한 세션이 생성되면 세션 중에 SSE-KMS 및 S3 버킷 키를 사용하여 새 객체가 자동으로 암호화되고 해독됩니다.

  • 기본 버킷 암호화를 SSE-KMS로 설정하면 S3 버킷 키는 디렉터리 버킷의 GETPUT 작업에 대해 항상 활성화되며 비활성화할 수 없습니다. CopyObject, UploadPartCopy, 배치 운영의 Copy 작업 또는 import 작업을 통해 SSE-KMS로 암호화된 객체를 범용 버킷에서 디렉터리 버킷으로, 디렉터리 버킷에서 범용 버킷으로 또는 디렉터리 버킷 간에 복사하는 경우 S3 버킷 키는 지원되지 않습니다. 이 경우 Amazon S3는 KMS 암호화 개체에 대한 사본 요청이 있을 때마다 AWS KMS를 직접적으로 호출합니다. S3 버킷 키로 AWS KMS 요청 비용을 절감하는 방법에 대한 자세한 내용은 Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감 섹션을 참조하세요.

  • 디렉터리 버킷에서 암호화를 위한 AWS KMS 고객 관리형 키를 지정할 때는 키 ID 또는 키 ARN만 사용하세요. KMS 키의 키 별칭 형식은 지원되지 않습니다.

  • AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 및 고객 제공 키를 사용한 서버 측 암호화(SSE-C)는 디렉터리 버킷의 기본 암호화에서 지원되지 않습니다.

기본 암호화 구성 방법에 대한 자세한 내용은 기본 암호화 구성 섹션을 참조하세요.

기본 암호화에 필요한 권한에 대한 자세한 내용은 Amazon Simple Storage Service API 참조의 PutBucketEncryption 섹션을 참조하세요.

Amazon S3 콘솔, AWS SDK, Amazon S3 REST API 및 AWS Command Line Interface(AWS CLI)를 사용하여 S3 버킷에 대한 Amazon S3 기본 암호화를 구성할 수 있습니다.

Amazon S3 버킷에 대해 기본 암호화를 구성하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 버킷(Buckets)을 선택합니다.

  3. 버킷 목록에서 원하는 버킷의 이름을 선택합니다.

  4. 속성(Properties) 탭을 선택합니다.

  5. 서버 측 암호화 설정에서 디렉터리 버킷이 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)를 통해 데이터를 암호화합니다.

  6. Save changes(변경 사항 저장)를 선택합니다.

다음 예시에서는 SSE-S3를 사용하거나 S3 버킷 키와 함께 SSE-KMS를 사용하여 기본 암호화를 구성하는 방법을 보여줍니다.

기본 암호화에 대한 자세한 내용은 Amazon S3 버킷에 대한 기본 서버 측 암호화 동작 설정 섹션을 참조하십시오. AWS CLI를 사용하여 기본 암호화를 구성하는 방법에 대한 자세한 내용은 put-bucket-encryption을 참조하세요.

예 – SSE-S3를 사용한 기본 암호화

이 예시에서는 Amazon S3 관리형 키를 사용하여 기본 버킷 암호화를 구성합니다. 명령을 사용하려면 사용자 입력 자리 표시자를 사용자의 정보로 대체합니다.

aws s3api put-bucket-encryption --bucket bucket-base-name--azid--x-s3 --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" } } ] }'
예 - S3 버킷 키와 SSE-KMS를 사용한 기본 암호화

이 예제에서는 S3 버킷 키와 SSE-KMS를 사용하여 기본 버킷 암호화를 구성합니다. 명령을 사용하려면 사용자 입력 자리 표시자를 사용자의 정보로 대체합니다.

aws s3api put-bucket-encryption --bucket bucket-base-name--azid--x-s3 --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "KMS-Key-ARN" }, "BucketKeyEnabled": true } ] }'

REST API PutBucketEncryption 작업을 사용하여 사용할 서버 측 암호화 유형(SSE-S3 또는 SSE-KMS)으로 기본 암호화를 설정합니다.

자세한 내용은 Amazon Simple Storage Service API 참조에서 PutBucketEncryption를 참조하십시오.

AWS SDK를 사용하는 경우 서버 측 암호화에 AWS KMS keys를 사용하도록 Amazon S3에 요청할 수 있습니다. 다음 AWS SDKs for Java 및 .NET 예제에서는 SSE-KMS 및 S3 버킷 키로 디렉터리 버킷의 기본 암호화 구성을 구성합니다. 다른 SDK 사용에 대한 자세한 내용은 AWS 개발자 센터의 샘플 코드 및 라이브러리를 참조하세요.

중요

Amazon S3에서 서버 측 암호화에 AWS KMS key을 사용하는 경우 대칭 암호화 KMS 키를 선택해야 합니다. Amazon S3는 대칭 암호화 KMS 키만 지원합니다. 이들 키에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서대칭 암호화 KMS 키를 참조하십시오.

Java

AWS SDK for Java 2.x 사용 시 applyServerSideEncryptionByDefault 메서드를 통해 SSE-KMS로 데이터 암호화를 위한 디렉터리 버킷의 기본 암호화 구성을 지정하여 Amazon S3에 AWS KMS key 사용을 요청할 수 있습니다. 대칭 암호화 KMS 키를 만들고 요청에서 지정할 수 있습니다.

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.PutBucketEncryptionRequest; import software.amazon.awssdk.services.s3.model.ServerSideEncryption; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionByDefault; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionConfiguration; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionRule; public class Main { public static void main(String[] args) { S3Client s3 = S3Client.create(); String bucketName = "bucket-base-name--azid--x-s3"; String kmsKeyId = "your-kms-customer-managed-key-id"; // AWS managed KMS keys aren't supported. Only customer-managed keys are supported. ServerSideEncryptionByDefault serverSideEncryptionByDefault = ServerSideEncryptionByDefault.builder() .sseAlgorithm(ServerSideEncryption.AWS_KMS) .kmsMasterKeyID(kmsKeyId) .build(); // The bucketKeyEnabled field is enforced to be true. ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder() .bucketKeyEnabled(true) .applyServerSideEncryptionByDefault(serverSideEncryptionByDefault) .build(); ServerSideEncryptionConfiguration serverSideEncryptionConfiguration = ServerSideEncryptionConfiguration.builder() .rules(rule) .build(); PutBucketEncryptionRequest putRequest = PutBucketEncryptionRequest.builder() .bucket(bucketName) .serverSideEncryptionConfiguration(serverSideEncryptionConfiguration) .build(); s3.putBucketEncryption(putRequest); } }

고객 관리형 키 생성에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드AWS KMS API 프로그래밍을 참조하십시오.

객체를 업로드하는 사용 가능한 코드 예제는 다음 주제를 참조하십시오. 이 예시를 사용하려면 코드 예시를 업데이트하고 이전 코드 조각에서 표시된 바와 같이 암호화 정보를 제공해야 합니다.

.NET

AWS SDK for .NET 사용 시 ServerSideEncryptionByDefault 속성을 통해 SSE-KMS로 데이터 암호화를 위한 디렉터리 버킷의 기본 암호화 구성을 지정하여 Amazon S3에 AWS KMS key 사용을 요청할 수 있습니다. 대칭 암호화 고객 관리형 키를 만들고 요청에서 지정할 수 있습니다.

// Set the bucket server side encryption to use AWSKMS with a customer-managed key id. // bucketName: Name of the directory bucket. "bucket-base-name--azid--x-s3" // kmsKeyId: The Id of the customer managed KMS Key. "your-kms-customer-managed-key-id" // Returns True if successful. public static async Task<bool> SetBucketServerSideEncryption(string bucketName, string kmsKeyId) { var serverSideEncryptionByDefault = new ServerSideEncryptionConfiguration { ServerSideEncryptionRules = new List<ServerSideEncryptionRule> { new ServerSideEncryptionRule { ServerSideEncryptionByDefault = new ServerSideEncryptionByDefault { ServerSideEncryptionAlgorithm = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = kmsKeyId } } } }; try { var encryptionResponse =await _s3Client.PutBucketEncryptionAsync(new PutBucketEncryptionRequest { BucketName = bucketName, ServerSideEncryptionConfiguration = serverSideEncryptionByDefault, }); return encryptionResponse.HttpStatusCode == HttpStatusCode.OK; } catch (AmazonS3Exception ex) { Console.WriteLine(ex.ErrorCode == "AccessDenied" ? $"This account does not have permission to set encryption on {bucketName}, please try again." : $"Unable to set bucket encryption for bucket {bucketName}, {ex.Message}"); } return false; }

고객 관리형 키 생성에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드AWS KMS API 프로그래밍을 참조하십시오.

객체를 업로드하는 사용 가능한 코드 예제는 다음 주제를 참조하십시오. 이 예시를 사용하려면 코드 예시를 업데이트하고 이전 코드 조각에서 표시된 바와 같이 암호화 정보를 제공해야 합니다.

AWS CloudTrail을 사용하여 디렉터리 버킷의 기본 암호화 모니터링

AWS CloudTrail 이벤트를 사용하여 Amazon S3 디렉터리 버킷에 대한 기본 암호화 구성 요청을 추적할 수 있습니다. CloudTrail 로그에 사용되는 API 이벤트 이름은 다음과 같습니다.

  • PutBucketEncryption

  • GetBucketEncryption

  • DeleteBucketEncryption

참고
  • EventBridge는 디렉터리 버킷에서 지원되지 않습니다.

  • AWS Key Management Service(AWS KMS) 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 또는 고객 제공 암호화 키를 사용한 서버 측 암호화(SSE-C)는 디렉터리 버킷에서 지원되지 않습니다.

AWS CloudTrail과 함께 기본 암호화를 모니터링하는 방법에 대한 자세한 내용은 AWS CloudTrail 및 Amazon EventBridge를 사용한 기본 암호화 모니터링 섹션을 참조하세요.