본문 바로가기

자격증/AWS Certified Security - Specialty

[AWS SCS] S3 암호화

728x90
반응형

Amazon S3 객체 암호화 방식: 보안 수준에 맞는 선택 가이드

Amazon S3는 데이터를 안전하게 저장하고 보호하기 위해 여러 가지 암호화 방법을 제공합니다. 이 글에서는 Amazon S3에서 객체를 암호화하는 네 가지 주요 방법을 소개하고, 각 방식이 어떤 상황에서 사용되는지에 대해 자세히 설명합니다. 이를 통해, 다양한 보안 요구 사항을 충족할 수 있는 암호화 방식을 선택할 수 있습니다.


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

서버 측 암호화는 데이터를 S3에 업로드할 때 자동으로 암호화하는 방식입니다. 이 방식은 크게 네 가지 유형으로 나눌 수 있습니다.

1.1 SSE-S3 (Amazon S3에서 제공하는 관리형 암호화 키)

  • 암호화 방식: AWS에서 제공하는 관리형 키(AES-256)를 사용하여 서버 측에서 자동으로 암호화합니다.
  • 설정 방법: 객체를 업로드할 때 "x-amz-server-side-encryption": "AES256" 헤더를 설정합니다.
  • 기본 설정: 새로운 버킷과 객체에는 기본적으로 SSE-S3가 활성화되어 있습니다.
  • 작동 원리: 사용자가 파일을 업로드하면 S3는 자동으로 S3에서 제공하는 암호화 키를 사용하여 파일을 암호화합니다.

1.2 SSE-KMS (AWS Key Management Service)

  • 암호화 방식: KMS(Key Management Service)를 사용하여 암호화합니다. 사용자는 암호화 키를 관리하고, CloudTrail을 통해 키 사용 내역을 추적할 수 있습니다.
  • 설정 방법: "x-amz-server-side-encryption": "aws:kms" 헤더를 설정하고, 사용하려는 KMS 키를 지정합니다.
  • 장점: 키 관리 및 사용 내역 추적이 가능하여 높은 보안 수준을 제공합니다.
  • 작동 원리: 사용자가 업로드한 객체는 지정된 KMS 키로 암호화되며, 암호화된 객체를 읽으려면 해당 KMS 키에 대한 접근 권한이 필요합니다.

1.3 SSE-C (고객 제공 키)

  • 암호화 방식: 고객이 제공하는 암호화 키를 사용하여 S3에서 서버 측 암호화를 수행합니다. 이 키는 AWS에서 저장되지 않습니다.
  • 설정 방법: 파일을 업로드할 때 암호화 키를 HTTPS 헤더로 전달해야 합니다.
  • 장점: 고객이 키를 완벽하게 관리할 수 있으며, AWS는 암호화 키를 저장하지 않습니다.
  • 작동 원리: 사용자는 암호화 키를 제공하고, S3는 이를 사용하여 파일을 암호화합니다. 파일을 읽을 때도 제공된 동일한 키가 필요합니다.

1.4 클라이언트 측 암호화

  • 암호화 방식: 클라이언트가 직접 데이터를 암호화한 후 S3에 업로드합니다.
  • 설정 방법: 클라이언트 측 암호화 라이브러리를 사용하여 데이터를 암호화합니다.
  • 장점: 데이터 암호화와 복호화는 클라이언트에서만 처리되므로, AWS의 암호화 키에 접근할 필요가 없습니다.
  • 작동 원리: 클라이언트는 데이터를 암호화한 후 S3에 업로드하며, 복호화는 클라이언트 측에서 이루어집니다.

2. 전송 중 암호화(Encryption in Transit)

전송 중 암호화는 데이터를 S3에 업로드하거나 다운로드할 때 발생하는 암호화입니다. 이를 통해 데이터가 전송되는 동안 안전하게 보호됩니다.

  • 암호화 방식: HTTPS(SSL/TLS)를 사용하여 데이터를 암호화합니다.
  • 기본 설정: S3에는 HTTP와 HTTPS 두 개의 엔드포인트가 있으며, HTTPS 엔드포인트는 암호화된 연결을 제공합니다.
  • 추천 설정: 보안을 강화하려면 항상 HTTPS를 사용하여 데이터를 전송해야 합니다.

2.1 전송 중 암호화 강제 설정

  • 목표: HTTP를 통한 불안전한 연결을 차단하고 HTTPS를 통한 안전한 연결만 허용합니다.
  • 설정 방법: S3 버킷에 아래와 같은 정책을 적용하여 HTTP 연결을 차단합니다.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*",
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      }
    }
  ]
}

 

위 정책은 aws:SecureTransport 값이 false인 경우 HTTP 연결을 차단하고, true인 경우 HTTPS 연결만 허용합니다.


3. S3 객체 암호화 방법 선택하기

각각의 암호화 방법은 보안 요구 사항과 사용 사례에 따라 선택해야 합니다. 각 방법의 특성을 이해하고, 자신이 보호하려는 데이터의 보안 수준에 맞는 방법을 선택하는 것이 중요합니다.

  • SSE-S3는 기본적인 암호화로, 관리의 부담 없이 S3에서 자동으로 제공하는 암호화 키를 사용합니다.
  • SSE-KMS는 더 높은 보안 요구 사항이 있는 경우, 키 관리와 추적을 할 수 있는 기능을 제공합니다.
  • SSE-C는 고객이 암호화 키를 직접 관리해야 할 때 유용합니다.
  • 클라이언트 측 암호화는 클라이언트가 모든 암호화 작업을 처리하며, AWS는 데이터의 암호화 및 복호화에 관여하지 않습니다.

Amazon S3 객체 암호화 방법 정리

Amazon S3는 다양한 방법으로 데이터를 안전하게 암호화할 수 있는 기능을 제공합니다. 이번 포스팅에서는 Amazon S3의 주요 암호화 방법을 정리하고, 각 방식의 특징과 사용 시 고려사항을 살펴보겠습니다.

1. SSE-S3 (Server-Side Encryption with Amazon S3-Managed Keys)

  • 개요: SSE-S3는 AWS에서 관리하는 키로 데이터를 암호화하는 방식입니다. 기본적으로 S3에 업로드되는 객체는 자동으로 SSE-S3 방식으로 암호화됩니다.
  • 암호화 키: AWS에서 관리하며, 사용자는 직접 키에 접근하지 않습니다.
  • 보안: 이 방식은 AES-256 암호화를 사용하며, 암호화된 객체는 공개된 상태로 두더라도 익명 사용자가 접근할 수 있습니다.
  • 사용 시 주의점: SSE-S3로 암호화된 객체는 공개하면 익명 사용자도 접근할 수 있습니다.

2. SSE-KMS (Server-Side Encryption with AWS Key Management Service)

  • 개요: SSE-KMS는 KMS(Key Management Service)를 사용하여 암호화 키를 관리하는 방식입니다. 이 방식은 키 관리와 사용 내역을 CloudTrail에서 추적할 수 있다는 장점이 있습니다.
  • 암호화 키: 사용자 정의 KMS 키 또는 AWS 관리형 KMS 키를 사용할 수 있습니다.
  • 보안: KMS 키를 사용하여 암호화되므로, 해당 객체에 접근하려면 KMS 키에 대한 접근 권한도 필요합니다. 익명 사용자는 해당 객체에 접근할 수 없습니다.
  • 사용 시 주의점: s3:PutObject 작업을 수행할 때는 kms:GenerateDataKey 권한이 필요합니다. 이 권한을 통해 대용량 파일을 암호화하여 업로드할 수 있습니다.

3. SSE-C (Server-Side Encryption with Customer-Provided Keys)

  • 개요: SSE-C는 사용자가 제공한 암호화 키를 사용하여 서버 측에서 데이터를 암호화하는 방식입니다. 이 방식에서는 키를 AWS에서 관리하지 않으며, 사용자가 직접 제공해야 합니다.
  • 암호화 키: 사용자가 제공하며, S3는 이 키를 이용해 데이터를 암호화합니다. 암호화된 객체는 S3에 저장되지만, S3는 암호화 키를 저장하지 않습니다.
  • 보안: 매번 HTTP 요청에 암호화 키를 포함해야 하므로 HTTPS를 사용해야 합니다.
  • 사용 시 주의점: 암호화된 파일을 다운로드하려면 동일한 암호화 키를 다시 제공해야 합니다.

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

  • 개요: 클라이언트 측 암호화는 데이터를 클라이언트에서 암호화한 후 S3로 업로드하는 방식입니다. 클라이언트는 데이터를 암호화하고 S3로 업로드한 후, 다운로드 시에도 클라이언트에서 복호화합니다.
  • 암호화 키: 사용자가 암호화 키를 관리하고, AWS는 암호화와 복호화에 관여하지 않습니다.
  • 보안: 암호화와 복호화는 전적으로 클라이언트에서 이루어지므로, S3는 암호화된 데이터만을 보관합니다.

5. 전송 중 암호화 (Encryption in Transit)

  • 개요: 전송 중 암호화는 데이터가 S3로 전송되는 동안 SSL/TLS를 통해 암호화되는 방식입니다. 이를 통해 데이터가 네트워크를 통해 전송될 때 도청이나 변조를 방지할 수 있습니다.
  • 보안: S3에는 HTTP와 HTTPS 두 가지 엔드포인트가 있으며, HTTPS를 사용하여 안전하게 데이터를 전송하는 것이 권장됩니다.
  • 사용 시 주의점: S3:PutObject와 같은 작업을 할 때는 aws:SecureTransport 조건을 사용하여 HTTP로의 접근을 차단하고 HTTPS만 허용하는 정책을 설정할 수 있습니다.

요약

  • SSE-S3: AWS에서 관리하는 키로 암호화.
  • SSE-KMS: KMS를 사용하여 키를 관리하고, CloudTrail에서 사용 내역을 추적.
  • SSE-C: 사용자가 제공하는 키로 암호화, S3는 키를 저장하지 않음.
  • 클라이언트 측 암호화: 클라이언트에서 직접 암호화하고 복호화.
  • 전송 중 암호화: HTTPS를 사용하여 데이터 전송 중 암호화.

 

 

결론

Amazon S3에서 객체를 암호화하는 방법은 다양하며, 각 방법은 특정 보안 요구 사항을 충족합니다. S3의 암호화 기능을 잘 활용하면 데이터를 안전하게 보호할 수 있습니다.

728x90
반응형

'자격증 > AWS Certified Security - Specialty' 카테고리의 다른 글

[AWS SCS] S3 Bucket Key  (0) 2024.12.23
[AWS SCS] S3 Default Encryption  (0) 2024.12.23
[AWS SCS] Secrets Manager 보안  (1) 2024.12.23
[AWS SCS] AWS Secrets Manager  (0) 2024.12.23
[AWS SCS] KMS with Parameter Store  (0) 2024.12.22