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

디렉터리 버킷의 기본 암호화 설정·모니터링 (Setting and monitoring default encryption for directory buckets)

Amazon S3 버킷은 기본으로 버킷 암호화가 활성화되어 있고, 새 객체는 Amazon S3 관리 키를 사용한 서버 측 암호화(SSE-S3)로 자동 암호화돼요. 이 암호화는 Amazon S3 버킷의 모든 새 객체에 적용되며 추가 비용이 들지 않아요.

키 회전과 접근 정책 권한을 관리하는 것처럼 암호화 키를 더 세밀하게 제어해야 한다면 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS)를 선택할 수 있어요.

출처: 문서

본문

참고

  • 버킷의 기본 암호화가 원하는 암호화 구성으로 설정되어 있도록 하고, CreateSession 요청이나 PUT object 요청에서 버킷 기본 암호화를 덮어쓰지 않는 것을 권장해요. 그러면 새 객체가 원하는 암호화 설정으로 자동 암호화돼요. 디렉터리 버킷의 암호화 덮어쓰기 동작에 대한 자세한 내용은 새 객체 업로드에 AWS KMS를 사용한 서버 측 암호화 지정 을 참고하세요.
  • 디렉터리 버킷의 새 객체를 SSE-KMS로 암호화하려면 KMS 키(구체적으로는 고객 관리 키)와 함께 SSE-KMS를 디렉터리 버킷의 기본 암호화 구성으로 지정해야 해요. 그러면 Zonal 엔드포인트 API 작업용 세션이 생성될 때 세션 중에 새 객체가 SSE-KMS와 S3 Bucket Keys로 자동 암호화·복호화돼요.
  • 버킷 기본 암호화를 SSE-KMS로 설정하면 S3 Bucket Keys는 디렉터리 버킷의 GET 및 PUT 작업에 항상 활성화되며 비활성화할 수 없어요. CopyObject, UploadPartCopy, Batch Operations의 Copy 작업, 또는 가져오기 작업으로 SSE-KMS 암호화 객체를 일반 용도 버킷과 디렉터리 버킷 사이(또는 디렉터리 버킷 사이)에서 복사할 때는 S3 Bucket Keys가 지원되지 않아요. 이 경우 Amazon S3는 KMS 암호화 객체에 대한 복사 요청이 있을 때마다 AWS KMS에 호출해요. S3 Bucket Keys가 AWS KMS 요청 비용을 줄이는 방법에 대한 자세한 내용은 Amazon S3 Bucket Keys로 SSE-KMS 비용 줄이기 를 참고하세요.
  • 디렉터리 버킷의 암호화에 AWS KMS 고객 관리 키를 지정할 때는 키 ID나 키 ARN만 사용해야 해요. KMS 키의 별칭(alias) 형식은 지원되지 않아요.
  • AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)와 고객 제공 키를 사용한 서버 측 암호화(SSE-C)는 디렉터리 버킷의 기본 암호화에 지원되지 않아요.

기본 암호화 구성에 대한 자세한 내용은 기본 암호화 구성 을 참고하세요.

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

Amazon S3 콘솔, AWS SDK, Amazon S3 REST API, AWS CLI를 사용해 S3 버킷의 Amazon S3 기본 암호화를 구성할 수 있어요.

Amazon S3 버킷에 기본 암호화 구성하기

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 엽니다.
  2. 왼쪽 탐색 창에서 Buckets(버킷)을 선택합니다.
  3. Buckets 목록에서 원하는 버킷의 이름을 선택합니다.
  4. Properties(속성) 탭을 선택합니다.
  5. Server-side encryption settings(서버 측 암호화 설정)에서 디렉터리 버킷은 Server-side encryption with Amazon S3 managed keys (SSE-S3) 를 사용해요.
  6. Save changes(변경 사항 저장)를 선택합니다.

이 예제들은 SSE-S3 또는 S3 Bucket Key와 함께 SSE-KMS를 사용해 기본 암호화를 구성하는 방법을 보여줘요.

기본 암호화에 대한 자세한 내용은 Amazon S3 버킷의 기본 서버 측 암호화 동작 설정 을 참고하고, AWS CLI로 기본 암호화를 구성하는 방법은 put-bucket-encryption을 참고하세요.

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

이 예제는 Amazon S3 관리 키로 버킷 기본 암호화를 구성해요. 실행 시 사용자 입력 자리표시자는 직접 채워 넣어야 합니다.

aws s3api put-bucket-encryption --bucket bucket-base-name--zone-id--x-s3 --server-side-encryption-configuration '{
    "Rules": [
        {
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            }
        }
    ]
}'

예제 — S3 Bucket Key를 사용한 SSE-KMS 기본 암호화

이 예제는 S3 Bucket Key와 함께 SSE-KMS로 버킷 기본 암호화를 구성해요. 실행 시 사용자 입력 자리표시자는 직접 채워 넣어야 합니다.

aws s3api put-bucket-encryption --bucket bucket-base-name--zone-id--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 Reference의 PutBucketEncryption 을 참고하세요.

AWS SDK를 사용할 때는 Amazon S3가 서버 측 암호화에 AWS KMS 키를 사용하도록 요청할 수 있어요. 다음 AWS SDK for Java와 .NET 예제들은 SSE-KMS 및 S3 Bucket Key로 디렉터리 버킷의 기본 암호화 구성을 설정해요. 다른 SDK에 대한 정보는 AWS Developer Center의 샘플 코드 및 라이브러리 를 참고하세요.

중요

Amazon S3에서 서버 측 암호화에 AWS KMS 키를 사용할 때는 대칭 암호화 KMS 키를 선택해야 해요. Amazon S3는 대칭 암호화 KMS 키만 지원해요. 이 키에 대한 자세한 내용은 AWS Key Management Service Developer Guide의 대칭 암호화 KMS 키 를 참고하세요.

Java 예제 (AWS SDK for Java 2.x)

AWS SDK for Java 2.x에서는 applyServerSideEncryptionByDefault 메서드를 사용해 SSE-KMS로 데이터를 암호화할 디렉터리 버킷의 기본 암호화 구성을 지정하도록 Amazon S3에 요청할 수 있어요. 대칭 암호화 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--zoneid--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 Developer Guide의 AWS KMS API 프로그래밍 을 참고하세요.

객체 업로드 작업 코드 예제는 다음 주제를 참고하세요. 이 예제를 사용하려면 앞선 코드 조각에서 보여준 것처럼 코드 예제를 갱신하고 암호화 정보를 제공해야 해요.

C# 예제 (AWS SDK for .NET)

AWS SDK for .NET에서는 ServerSideEncryptionByDefault 속성을 사용해 SSE-KMS로 데이터를 암호화할 디렉터리 버킷의 기본 암호화 구성을 지정하도록 Amazon S3에 요청할 수 있어요. 대칭 암호화 고객 관리 키를 만들고 이를 요청에 지정하면 돼요.

    // Set the bucket server side encryption to use AWSKMS with a customer-managed key id.
    // bucketName: Name of the directory bucket. "bucket-base-name--zonsid--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 SetBucketServerSideEncryption(string bucketName, string kmsKeyId)
    {
        var serverSideEncryptionByDefault = new ServerSideEncryptionConfiguration
        {
            ServerSideEncryptionRules = new List
            {
                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 Developer Guide의 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로 기본 암호화 모니터링 을 참고하세요.

더 알아보기 (Learn more)