[AWS SAA] 6. S3 Security

Sunwu Park·2024년 12월 5일

AWS-SAA

목록 보기
6/12

Amazon S3 – Object Encryption


1. Server-Side Encryption (SSE)

Amazon S3에서 데이터를 저장하기 전에 암호화하고, 요청 시 암호를 해독하여 반환하는 방식.

1.1. SSE-S3

  • 기본적으로 활성화됨.
  • AWS가 S3 오브젝트를 암호화하며, 키는 AWS가 소유, 관리, 처리.

1.2. SSE-KMS

  • AWS Key Management Service (KMS)를 사용하여 암호화 키 관리.
  • 사용자에게 키 관리 및 정책 설정의 추가적인 제어 권한 제공.

1.3. SSE-C

  • 고객이 직접 암호화 키를 제공.
  • 고객이 키를 관리하고, AWS는 해당 키로 데이터를 암호화/복호화.

2. Client-Side Encryption

  • 클라이언트 측에서 데이터 암호화 후 S3에 업로드.
  • AWS는 암호화/복호화에 관여하지 않으며, 사용자가 모든 키를 관리.

요약

방식키 관리 주체특징
SSE-S3AWS기본 활성화, 간단하고 자동화된 키 관리
SSE-KMSAWS (KMS 활용)사용자가 키 관리 정책을 설정 가능
SSE-C고객고객이 키를 직접 제공하고 관리
Client-Side고객데이터를 암호화 후 업로드, AWS는 관여하지 않음

Amazon S3 Encryption – SSE-S3

  • AWS가 키를 소유, 관리, 처리하여 데이터를 암호화합니다.
  • AES-256 알고리즘 사용.
  • 서버 측 암호화 수행.
  • Header 설정: "x-amz-server-side-encryption": "AES256".
  • 기본 활성화: 새로운 버킷과 객체에 대해 기본적으로 활성화됩니다.


Amazon S3 Encryption – SSE-KMS

  • AWS Key Management Service(KMS)를 통해 키를 관리.
  • KMS의 장점:
    • 키 사용에 대한 사용자 제어 가능.
    • CloudTrail을 통해 키 사용 감사 가능.
  • 서버 측 암호화 수행.
  • Header 설정: "x-amz-server-side-encryption": "aws:kms".

SSE-KMS Limitation

  • 업로드 시 GenerateDataKey API 호출.
  • 다운로드 시 Decrypt API 호출.
  • KMS 한도:
    • 초당 요청 수 제한 (지역별 5500, 10000, 30000 req/s).
    • 한도 증가가 필요한 경우 Service Quotas Console에서 요청 가능.

Amazon S3 Encryption – SSE-C

  • 고객이 키를 완전히 관리하며 AWS는 키를 저장하지 않음.
  • 암호화 키는 매 요청마다 HTTP Header에 포함되어야 함.
  • 데이터 전송 시 HTTPS 필수.
  • AWS는 고객이 제공한 키로 데이터를 암호화/복호화만 수행.

Amazon S3 Encryption – Client-Side Encryption

  • 고객이 직접 데이터를 암호화한 후 S3로 업로드.
  • 데이터를 복호화할 때도 고객이 직접 처리.
  • 암호화 키와 주기 관리는 고객이 전적으로 담당.
  • Amazon S3 Client-Side Encryption Library와 같은 클라이언트 라이브러리를 사용하여 구현 가능.

Amazon S3 – Encryption in Transit (SSL/TLS)

  • Encryption in Transit: 데이터를 전송 중에 보호하며, 일반적으로 SSL/TLS로 구현.
  • S3 엔드포인트:
    1. HTTP: 암호화되지 않은 연결 (권장하지 않음).
    2. HTTPS: 암호화된 연결 (권장).
  • HTTPS 필수 조건:
    • SSE-C를 사용할 경우 HTTPS가 필수.
    • 대부분의 클라이언트는 기본적으로 HTTPS 엔드포인트를 사용.

Amazon S3 – Force Encryption in Transit

  • aws:SecureTransport 조건을 사용하여 암호화되지 않은 요청을 거부 가능.
  • Bucket Policy 설정:
    • aws:SecureTransportfalse인 요청을 거부하도록 구성.
    • HTTPS를 강제하여 모든 데이터 전송이 암호화되도록 보장.

Amazon S3 – Default Encryption vs. Bucket Policies

Default Encryption

  • SSE-S3 암호화는 기본적으로 새로운 S3 객체에 자동 적용.
  • 별도 설정 없이도 모든 새로운 객체가 자동 암호화됨.

Bucket Policies로 암호화 강제

  • Bucket Policy를 통해 추가적인 암호화 강제 가능.
  • 암호화 헤더(SSE-KMS, SSE-C)가 없는 PUT 요청을 거부하도록 설정.
  • 이를 통해 버킷에 업로드되는 모든 데이터가 암호화되도록 보장.

요약

항목내용
Encryption in TransitSSL/TLS로 데이터 전송 중 암호화. HTTPS 권장 및 SSE-C에서는 필수.
Force Encryption in Transitaws:SecureTransport를 통해 HTTPS만 허용하도록 Bucket Policy 설정.
Default EncryptionSSE-S3 암호화를 새로운 객체에 기본적으로 적용.
Bucket Policy로 암호화 강제암호화 헤더 없는 요청을 거부하여 업로드되는 모든 데이터 암호화 보장.

1. What is CORS?

Cross-Origin Resource Sharing (CORS)

  • 웹 브라우저 기반의 보안 메커니즘으로, 다른 Origin으로의 요청을 허용.
  • Origin: 프로토콜 + 호스트 + 포트로 구성.
    • 예: https://www.example.com (443은 HTTPS 기본 포트)
  • Same Origin: http://example.com/app1http://example.com/app2.
  • Different Origin: http://www.example.comhttp://other.example.com.

CORS 작동 원리

  • 브라우저는 기본적으로 다른 Origin으로의 요청을 차단.
  • 요청을 허용하려면 CORS Header(예: Access-Control-Allow-Origin)를 설정해야 함.

Amazon S3 - CORS

  • Amazon S3에서 특정 Origin 또는 모든 Origin(*)에 대해 요청을 허용하도록 설정 가능.
  • S3 버킷의 CORS 설정을 통해 다른 Origin에서의 요청을 관리.

Amazon S3 – MFA Delete

MFA (Multi-Factor Authentication) Delete

  • 중요한 S3 작업에 대해 MFA 코드(모바일/하드웨어 기기 생성)를 요구.
  • MFA가 필요한 작업:
    • 객체 버전 영구 삭제.
    • 버킷의 Versioning 중지.
  • MFA가 필요 없는 작업:
    • Versioning 활성화.
    • 삭제된 버전 조회.

MFA Delete 사용 조건

  • Versioning이 활성화된 버킷에서만 사용 가능.
  • 오직 버킷 소유자(root 계정)만 MFA Delete를 활성화/비활성화 가능.

S3 Access Logs

  • S3 접근 기록을 저장하여 감사(Audit) 목적으로 활용.
  • S3에 대한 모든 요청(승인/거부 포함)을 다른 S3 버킷에 기록.
  • 기록된 데이터는 데이터 분석 도구를 사용해 분석 가능.

주의사항

  1. 타겟 로깅 버킷은 동일한 AWS 리전 내에 있어야 함.
  2. 로깅 대상 버킷과 타겟 로깅 버킷을 동일하게 설정하면 안 됨:
    • 로그 순환 문제(logging loop)가 발생 → 버킷 크기 급증.


1. Amazon S3 – Pre-Signed URLs

특징

  • Pre-Signed URLs는 S3 Console, AWS CLI 또는 SDK를 사용하여 생성 가능.
  • URL을 사용한 사용자에게 생성한 사용자와 동일한 권한 부여 (GET / PUT 요청).
  • URL 만료 시간:
    • S3 Console: 1분 ~ 720분 (12시간).
    • AWS CLI: --expires-in 파라미터로 만료 시간 설정 (기본 3600초, 최대 604800초 / 168시간).

사용 사례

  1. 로그인한 사용자만 프리미엄 비디오 다운로드 허용.
  2. 변경 가능한 사용자 리스트를 위해 동적으로 URL 생성.
  3. 특정 위치에 파일 업로드를 임시로 허용.


2. S3 Glacier Vault Lock

특징

  • WORM (Write Once Read Many) 모델 채택.
  • Vault Lock Policy를 생성하고 잠금:
    • 잠금 후 정책은 변경 불가.
  • 데이터 보존 및 컴플라이언스 요구 사항에 유용.

3. S3 Object Lock

특징

  • WORM 모델 채택, 객체 버전 삭제를 일정 기간 차단.
  • Versioning 활성화 필수.

Retention Mode

  1. Compliance:
    • 객체 버전은 모든 사용자(루트 사용자 포함)도 삭제 또는 덮어쓸 수 없음.
    • Retention 기간 단축 및 모드 변경 불가.
  2. Governance:
    • 대부분의 사용자가 객체 버전 삭제 또는 잠금 설정 변경 불가.
    • 특정 권한을 가진 사용자는 수정 가능.
  • Retention Period:
    • 고정된 기간 동안 객체 보호, 연장 가능.
  • Legal Hold:
    • 기간에 상관없이 객체 보호.
    • s3:PutObjectLegalHold 권한으로 자유롭게 추가/제거 가능.

4. S3 – Access Points

특징

  • S3 버킷 보안 관리 간소화.
  • 각 Access Point는:
    • 고유의 DNS 이름(인터넷 또는 VPC 전용).
    • 자체 Access Point Policy를 통해 대규모 보안 관리 가능.

VPC Origin

  • VPC 내에서만 Access Point 접근 가능하도록 설정.
  • VPC Endpoint 필요:
    • Gateway 또는 Interface Endpoint 사용.
  • VPC Endpoint Policy가 대상 버킷 및 Access Point 접근을 허용해야 함.

5. S3 Object Lambda

특징

  • AWS Lambda를 활용해 객체를 검색 전 동적으로 수정.
  • 단일 S3 버킷으로 구성:
    • S3 Access Point와 S3 Object Lambda Access Point 생성.

사용 사례

  1. 개인 식별 정보(PII) 제거:
    • 분석 또는 비프로덕션 환경에서 활용.
  2. 데이터 포맷 변환:
    • 예: XML → JSON 변환.
  3. 이미지 크기 조정 및 워터마크 추가:
    • 요청한 사용자에 따라 동적으로 처리.

0개의 댓글