AWS S3에서는 데이터를 보호하기 위해 서버측 암호화(Server-Side Encryption, SSE) 및 클라이언트측 암호화(Client-Side Encryption, CSE)를 제공합니다. 각각의 방식은 데이터 보호 수준과 키 관리 방식에 따라 차이가 있습니다.
서버측 암호화는 S3에 데이터를 업로드할 때, AWS가 데이터를 암호화한 후 저장하는 방식입니다.
✅ 특징
🔗 활용 예시 (S3 API 업로드 요청)
PUT /my-object HTTP/1.1
Host: my-bucket.s3.amazonaws.com
x-amz-server-side-encryption: AES256
x-amz-server-side-encryption
헤더에 KMS 키 ID를 지정하여 객체를 업로드함.✅ 특징
🔗 활용 예시 (S3 API 업로드 요청)
PUT /my-object HTTP/1.1
Host: my-bucket.s3.amazonaws.com
x-amz-server-side-encryption: aws:kms
x-amz-server-side-encryption-key-id: arn:aws:kms:region:account-id:key/key-id
✅ 특징
🔗 활용 예시 (S3 API 업로드 요청)
PUT /my-object HTTP/1.1
Host: my-bucket.s3.amazonaws.com
x-amz-server-side-encryption-customer-algorithm: AES256
x-amz-server-side-encryption-customer-key: Base64-encoded-key
x-amz-server-side-encryption-customer-key-MD5: Base64-encoded-key-MD5
✅ 특징
데이터가 S3로 전송되는 과정에서 보호하는 방식으로, SSL/TLS 프로토콜이 사용됨.
✅ 보안 강화 방법
🔗 버킷 정책 예시 (HTTPS 강제화)
{
"Version": "2012-10-17",
"Id": "S3EnforceTLS",
"Statement": [
{
"Sid": "ForceSSLOnlyAccess",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-secure-bucket",
"arn:aws:s3:::my-secure-bucket/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
암호화 방식 | 키 관리 주체 | 보안 수준 | 특징 |
---|---|---|---|
SSE-S3 | AWS | 보통 | AWS가 키를 관리하고 자동 암호화 |
SSE-KMS | AWS (사용자 지정 가능) | 높음 | KMS 키를 사용하여 키 관리 가능 |
SSE-C | 사용자 | 매우 높음 | 사용자가 키를 직접 제공하고 관리 |
CSE (클라이언트측 암호화) | 사용자 | 최고 | 사용자가 직접 암호화 후 업로드 |
SSE-S3
SSE-KMS
SSE-C
클라이언트측 암호화 (CSE)
이 글을 바탕으로 블로그에 업로드하면 AWS S3 암호화 방식을 체계적으로 정리한 좋은 자료가 될 것이다. 🚀