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-S3 | AWS | 기본 활성화, 간단하고 자동화된 키 관리 |
| SSE-KMS | AWS (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 엔드포인트:
- HTTP: 암호화되지 않은 연결 (권장하지 않음).
- HTTPS: 암호화된 연결 (권장).
- HTTPS 필수 조건:
- SSE-C를 사용할 경우 HTTPS가 필수.
- 대부분의 클라이언트는 기본적으로 HTTPS 엔드포인트를 사용.
Amazon S3 – Force Encryption in Transit

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

Default Encryption
- SSE-S3 암호화는 기본적으로 새로운 S3 객체에 자동 적용.
- 별도 설정 없이도 모든 새로운 객체가 자동 암호화됨.
Bucket Policies로 암호화 강제
- Bucket Policy를 통해 추가적인 암호화 강제 가능.
- 암호화 헤더(
SSE-KMS, SSE-C)가 없는 PUT 요청을 거부하도록 설정.
- 이를 통해 버킷에 업로드되는 모든 데이터가 암호화되도록 보장.
요약
| 항목 | 내용 |
|---|
| Encryption in Transit | SSL/TLS로 데이터 전송 중 암호화. HTTPS 권장 및 SSE-C에서는 필수. |
| Force Encryption in Transit | aws:SecureTransport를 통해 HTTPS만 허용하도록 Bucket Policy 설정. |
| Default Encryption | SSE-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/app1와 http://example.com/app2.
- Different Origin:
http://www.example.com과 http://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 버킷에 기록.
- 기록된 데이터는 데이터 분석 도구를 사용해 분석 가능.
주의사항
- 타겟 로깅 버킷은 동일한 AWS 리전 내에 있어야 함.
- 로깅 대상 버킷과 타겟 로깅 버킷을 동일하게 설정하면 안 됨:
- 로그 순환 문제(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시간).
사용 사례
- 로그인한 사용자만 프리미엄 비디오 다운로드 허용.
- 변경 가능한 사용자 리스트를 위해 동적으로 URL 생성.
- 특정 위치에 파일 업로드를 임시로 허용.

2. S3 Glacier Vault Lock

특징
- WORM (Write Once Read Many) 모델 채택.
- Vault Lock Policy를 생성하고 잠금:
- 데이터 보존 및 컴플라이언스 요구 사항에 유용.
3. S3 Object Lock
특징
- WORM 모델 채택, 객체 버전 삭제를 일정 기간 차단.
- Versioning 활성화 필수.
Retention Mode
- Compliance:
- 객체 버전은 모든 사용자(루트 사용자 포함)도 삭제 또는 덮어쓸 수 없음.
- Retention 기간 단축 및 모드 변경 불가.
- Governance:
- 대부분의 사용자가 객체 버전 삭제 또는 잠금 설정 변경 불가.
- 특정 권한을 가진 사용자는 수정 가능.
Retention Period & Legal Hold
- 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 생성.
사용 사례
- 개인 식별 정보(PII) 제거:
- 데이터 포맷 변환:
- 이미지 크기 조정 및 워터마크 추가:
