Amazon S3 관리 키를 사용한 서버 측 암호화(SSE-S3)
Amazon S3 관리 키를 사용한 서버 측 암호화(SSE-S3) (Using server-side encryption with Amazon S3 managed keys (SSE-S3))
Amazon S3 버킷에 업로드되는 모든 새 객체는 Amazon S3 관리 키(SSE-S3)를 사용한 서버 측 암호화로 기본 암호화돼요. 서버 측 암호화는 저장 시 데이터를 보호해요.
출처: 문서
본문
중요 Amazon S3는 이제 Amazon S3 관리 키(SSE-S3)를 사용한 서버 측 암호화를 모든 버킷의 기본 암호화 수준으로 적용해요. 2023년 1월 5일부터 Amazon S3에 업로드되는 모든 새 객체는 추가 비용 없이 성능 영향 없이 자동으로 암호화돼요. S3 버킷 기본 암호화 구성과 새 객체 업로드에 대한 자동 암호화 상태는 CloudTrail 로그, S3 Inventory, S3 Storage Lens, Amazon S3 콘솔, 그리고 AWS CLI 및 AWS SDK의 추가 Amazon S3 API 응답 헤더에서 확인할 수 있어요. 자세한 내용은 기본 암호화 FAQ를 참고하세요.
Amazon S3 버킷에 업로드되는 모든 새 객체는 Amazon S3 관리 키(SSE-S3)를 사용한 서버 측 암호화로 기본 암호화돼요.
서버 측 암호화는 저장 시 데이터를 보호해요. Amazon S3는 각 객체를 고유한 키로 암호화해요. 추가 안전 장치로, 정기적으로 교체하는 키로 키 자체를 암호화해요. Amazon S3 서버 측 암호화는 256비트 고급 암호화 표준 Galois/Counter Mode(AES-GCM)를 사용해 업로드된 모든 객체를 암호화해요.
Amazon S3 관리 키(SSE-S3)를 사용한 서버 측 암호화 사용에는 추가 요금이 없어요. 다만 기본 암호화 기능을 구성하는 요청에는 표준 Amazon S3 요청 요금이 부과돼요. 요금에 대한 정보는 Amazon S3 요금을 참고하세요.
데이터 업로드가 Amazon S3 관리 키로만 암호화되도록 해야 한다면 다음 버킷 정책을 사용할 수 있어요. 예를 들어 다음 버킷 정책은 요청에 서버 측 암호화를 요청하는 x-amz-server-side-encryption 헤더가 포함되지 않는 한 객체 업로드를 거부해요.
- JSON:
{
"Version": "2012-10-17",
"Id": "PutObjectPolicy",
"Statement": [
{
"Sid": "DenyObjectsThatAreNotSSES3",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
}
]
}
참고 서버 측 암호화는 객체 데이터만 암호화하고 객체 메타데이터는 암호화하지 않아요.
참고 버킷 정책에 사용되는
s3:x-amz-server-side-encryption조건 키는 IAM 조건 키 네임스페이스로, CloudTrail 로그에 표시되는x-amz-server-side-encryptionHTTP 헤더와 달라요. 둘 다 같은 암호화 설정을 나타내지만 다른 형식을 사용해요. 또한 이 Deny 정책은 암호화 헤더를 지정하지 않고 객체를 버킷에 전달하는 서비스(예: Elastic Load Balancing 액세스 로그 또는 Amazon CloudFront 로그)의 쓰기를 차단할 수 있어요.
서버 측 암호화를 위한 API 지원
모든 Amazon S3 버킷에는 기본적으로 암호화가 구성되어 있고, S3 버킷에 업로드되는 모든 새 객체는 저장 시 자동으로 암호화돼요. Amazon S3 관리 키(SSE-S3)를 사용한 서버 측 암호화는 Amazon S3의 모든 버킷에 대한 기본 암호화 구성이에요. 다른 유형의 암호화를 사용하려면 S3 PUT 요청에서 사용할 서버 측 암호화 유형을 지정하거나 대상 버킷의 기본 암호화 구성을 업데이트할 수 있어요.
PUT 요청에서 다른 암호화 유형을 지정하려면 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS), AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS), 또는 고객 제공 키를 사용한 서버 측 암호화(SSE-C)를 사용할 수 있어요. 대상 버킷에 다른 기본 암호화 구성을 설정하려면 SSE-KMS 또는 DSSE-KMS를 사용할 수 있어요.
범용 버킷의 기본 암호화 구성을 변경하는 방법에 대한 자세한 내용은 기본 암호화 구성을 참고하세요.
버킷의 기본 암호화 구성을 SSE-KMS로 변경해도 버킷에 있는 기존 Amazon S3 객체의 암호화 유형은 변경되지 않아요. 기본 암호화 구성을 SSE-KMS로 업데이트한 후 기존 객체의 암호화 유형을 변경하려면 Amazon S3 Batch Operations를 사용할 수 있어요. S3 Batch Operations에 객체 목록을 제공하면 Batch Operations가 해당 API 작업을 호출해요. 객체 복사(Copy objects) 작업을 사용해 기존 객체를 복사하면 같은 버킷에 SSE-KMS로 암호화된 객체로 다시 써요. 단일 Batch Operations 작업은 수십억 개의 객체에 지정된 작업을 수행할 수 있어요. 자세한 내용은 Batch Operations로 객체 작업을 일괄 수행하기와 AWS Storage Blog 게시물 S3 Inventory, Amazon Athena, S3 Batch Operations를 사용해 Amazon S3의 기존 객체를 소급해서 암호화하는 방법을 참고하세요.
객체 생성 REST API를 사용해 서버 측 암호화를 구성하려면 x-amz-server-side-encryption 요청 헤더를 제공해야 해요. REST API에 대한 정보는 REST API 사용하기를 참고하세요.
다음 Amazon S3 API는 이 헤더를 지원해요.
- PUT 작업 – PUT API를 사용해 데이터를 업로드할 때 요청 헤더를 지정해요. 자세한 내용은 PUT Object를 참고하세요.
- 멀티파트 업로드 시작(Initiate Multipart Upload) – 멀티파트 업로드 API 작업으로 대용량 객체를 업로드할 때 initiate 요청에 헤더를 지정해요. 자세한 내용은 Initiate Multipart Upload를 참고하세요.
- COPY 작업 – 객체를 복사할 때 원본 객체와 대상 객체가 모두 있어요. 자세한 내용은 PUT Object - Copy를 참고하세요.
참고 POST 작업으로 객체를 업로드할 때는 요청 헤더를 제공하는 대신 양식 필드에 같은 정보를 제공해요. 자세한 내용은 POST Object를 참고하세요.
AWS SDK도 서버 측 암호화를 요청하는 데 사용할 수 있는 래퍼 API를 제공해요. AWS Management Console을 사용해 객체를 업로드하고 서버 측 암호화를 요청할 수도 있어요.
더 일반적인 정보는 AWS Key Management Service 개발자 안내서의 AWS KMS 개념을 참고하세요.