S3 암호화

은채의 성장통·2025년 2월 10일
0

AWS

목록 보기
52/79

AWS S3 서버측 및 클라이언트측 암호화 개념 정리

AWS S3에서는 데이터를 보호하기 위해 서버측 암호화(Server-Side Encryption, SSE)클라이언트측 암호화(Client-Side Encryption, CSE)를 제공합니다. 각각의 방식은 데이터 보호 수준과 키 관리 방식에 따라 차이가 있습니다.


1. 서버측 암호화 (Server-Side Encryption, SSE)

서버측 암호화는 S3에 데이터를 업로드할 때, AWS가 데이터를 암호화한 후 저장하는 방식입니다.

1) SSE-S3 (S3 관리형 키 사용)

  • AWS가 소유하고 관리하는 S3 관리형 키를 사용하여 자동으로 데이터를 암호화함.
  • 암호화 알고리즘: AES-256
  • 사용자가 S3에 객체를 업로드하면, S3는 자체적으로 키를 사용하여 데이터를 암호화한 후 저장함.
  • 복호화는 AWS가 자동으로 수행하므로 사용자는 별도의 키 관리가 필요하지 않음.

특징

  • 사용자가 키를 직접 관리할 필요 없음.
  • 가장 간단한 서버측 암호화 방식.
  • 보안 강도는 높지만, 사용자 지정 키를 사용할 수 없음.

🔗 활용 예시 (S3 API 업로드 요청)

PUT /my-object HTTP/1.1
Host: my-bucket.s3.amazonaws.com
x-amz-server-side-encryption: AES256

2) SSE-KMS (AWS KMS 키 사용)

  • AWS Key Management Service (KMS)를 이용하여 사용자가 직접 키를 생성하고 관리하는 방식.
  • 암호화 키 관리:
    • AWS가 제공하는 KMS 키 사용
    • 사용자가 직접 생성한 고객 관리형 KMS 키 (CMK) 사용 가능
  • CloudTrail 로깅 지원: KMS를 사용하여 암호화/복호화 요청이 발생할 때 CloudTrail에서 로깅됨.
  • 작동 방식
    1. 사용자가 x-amz-server-side-encryption 헤더에 KMS 키 ID를 지정하여 객체를 업로드함.
    2. S3가 데이터를 KMS 키를 사용하여 암호화 후 저장함.
    3. 복호화 시에도 KMS 키를 통해 자동으로 복호화됨.

특징

  • SSE-S3 대비 보안성이 강화됨.
  • KMS를 활용한 키 관리 가능 (회전, 삭제, 정책 설정 가능).
  • API 요청이 KMS의 쿼터(Quota)에 포함되므로 처리량이 많을 경우 비용이 증가할 수 있음.

🔗 활용 예시 (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

3) SSE-C (고객 제공 키 사용)

  • 고객이 직접 고유한 암호화 키를 제공하여 S3에서 암호화를 수행하는 방식.
  • S3는 고객 키를 저장하지 않음 → 키를 분실하면 데이터를 복구할 수 없음.
  • 데이터를 다운로드할 때 동일한 키를 제공해야 복호화가 가능함.
  • HTTPS를 반드시 사용해야 함 (키가 네트워크를 통해 전달되므로 보안 필요).

특징

  • 사용자가 키를 직접 관리해야 함.
  • AWS는 키를 보관하지 않으므로 보안성이 뛰어나지만 키 분실 시 데이터 복구 불가.
  • 사용 후 키 폐기 가능 (재사용 불가능).

🔗 활용 예시 (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

2. 클라이언트측 암호화 (Client-Side Encryption, CSE)

  • 사용자가 직접 데이터를 암호화한 후 S3에 업로드하는 방식.
  • AWS는 데이터의 암호화 여부를 알지 못함 → 철저한 보안이 필요할 때 활용.
  • 클라이언트가 직접 키를 생성하고 관리해야 하므로 키 관리 시스템이 필요함.

1) AWS 제공 SDK 활용

  • AWS SDK를 사용하여 데이터를 암호화한 후 업로드 가능.
  • AWS KMS와 연동하여 자동으로 키를 관리할 수도 있음.

2) 직접 암호화 후 업로드

  • 사용자가 원하는 암호화 알고리즘을 사용하여 데이터를 직접 암호화한 후 업로드.
  • 예: OpenSSL을 사용하여 AES-256으로 암호화 후 업로드.

특징

  • 키를 분실하면 복호화가 불가능하므로 철저한 키 관리 필요.
  • 전송 및 저장 중 이중 암호화 가능 → 보안 강화됨.
  • 서버가 아닌 클라이언트에서 복호화해야 함.

3. 전송 중 암호화 (In-Transit Encryption)

데이터가 S3로 전송되는 과정에서 보호하는 방식으로, SSL/TLS 프로토콜이 사용됨.

보안 강화 방법

  1. HTTPS 사용 강제화 (버킷 정책 적용)
    • S3로의 모든 요청을 HTTPS로만 허용하도록 설정 가능.
  2. VPC 엔드포인트 사용
    • S3에 접근할 때 인터넷을 경유하지 않고 AWS 내부 네트워크를 사용하여 안전한 통신 가능.

🔗 버킷 정책 예시 (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-S3AWS보통AWS가 키를 관리하고 자동 암호화
SSE-KMSAWS (사용자 지정 가능)높음KMS 키를 사용하여 키 관리 가능
SSE-C사용자매우 높음사용자가 키를 직접 제공하고 관리
CSE (클라이언트측 암호화)사용자최고사용자가 직접 암호화 후 업로드

✅ 어떤 암호화를 선택해야 할까?

  • 관리 편의성 우선SSE-S3
  • 더 강력한 보안이 필요SSE-KMS
  • 기업 내 별도 보안 정책 필요SSE-C
  • 완전한 데이터 보호 필요 (AWS에 키 제공 불가)클라이언트측 암호화 (CSE)

이 글을 바탕으로 블로그에 업로드하면 AWS S3 암호화 방식을 체계적으로 정리한 좋은 자료가 될 것이다. 🚀

profile
인생 별거 없어

0개의 댓글