Object Encryption
Server-Side Encyption(SSE)
Amazon S3-Managed Keys(SSE-S3)
: AWS에서 처리, 관리, 소유하는 키를 사용하여 암호화한다. 사용자는 키에 액세스 불가능
- 암호화 보안 유형: AES-256
- 헤더를 반드시 "x-amz-server-side-encryption": "AES356"으로 설정해야 한다.
- 새 버킷과 새 객체에 기본적으로 활성화된다.
KMS Keys stored in AWS KMS(SSE-KMS)
: 키에 대한 사용자 제어권을 갖게 되어 KMS 내에서 키를 직접 만들고 CloudTrail을 사용하여 키를 감사할 수 있다.
- 객체는 서버 사이드에서 보안된다.
- 헤더를 반드시 "x-amz-server-side-encryption": "aws:kms"로 설정해야 한다.
Limitation
: KMS 키에는 생성 데이터와 키와 같은 자체적인 API가 있어 암호화를 해제할 경우 Decrypt API를 사용해야 한다.
- S3 버킷의 스루풋이 아주 높으며 모든 파일이 KMS 키를 사용하여 암호화되면 조절 사용 사례가 생길 수 있다.
Customer-Provided Keys(SSE-C)
: 키는 AWS 외부에서 관리하고 키를 AWS로 전송한다.
- S3는 키를 저장하지 않고 사용 후에는 폐기한다.
- 반드시 HTTPS를 사용하고, 모든 요청에서 키를 HTTPS 헤더의 일부로 전달해야 한다.
Client-Side Encryption
: 클라이언트가 S3에 데이터를 전송하기 전 직접 암호화
- 클라이언트가 키와 암호화 사이클을 전적으로 관리하게 된다.
Encryption in transit(SSL/TLS)
: 전송 중 암호화
Amazon S3 expose two endpoints
HTTP Endpoint
: 비암호화
HTTPS Endpoint
: 암호화
- SSE-C 유형의 매커니즘을 사용하는 경우 HTTPS 프로토콜을 사용해야 한다.
Default Encryption vs Bucket Policies
: 버킷 정책으로도 버킷의 암호화를 강제로 적용할 수 있다.
- 버킷 정책은 항상 기본 암호화 설정 이전에 평가된다.
- 기본 암호화는 S3에서 기본적으로 켜져 있지만 변경할 수 있으며 버킷 정책에 원하는 암호화를 사전에 적용할 수 있다.
CORS(Cross-Origin Resource Sharing)
: 기본 오리진에 방문할 때 다른 오리진에 대한 요청을 허용하거나 거부하는 웹 브라우저 기반 보안 메커니즘
- Origin = schema(protocol) + host(domain) + port
S3 CORS
- 클라이언트가 S3 버킷에 교차 오리진 요청을 보낼 경우 올바르 CORS 헤더를 활성화해야 한다.
- 이를 빠르게 처리하는 방법은 특정 오리진을 허용하거나 모든 오리진을 허용한다.
- CORS 요청이 다른 오리진에서 발생한 경우 한 S3 버킷에서 이미지나 에셋이나 파일을 검색할 수 있도록 하는 웹브라우저 보안이다.
MFA Delete
: 한 객체 버전을 영구적으로 삭제하고자 할 때 정말로 영구적으로 삭제되지 않도록 하는 데 필요하다. 또한 버킷의 버전 관리를 일시 중단하려는 경우에도 필요하다.
- 버전 관리를 활성화하거나 삭제된 버전을 나열하고자 하는 경우에는 MFA가 필요하지 않다.
Access Logs
: 감사를 위해 S3 버킷의 모든 액세스를 기록
- 로깅 버킷을 모니터링하는 버킷과 동일한 버킷으로 설정해서는 안된다.
Pre-Signed URLs
: 미리 서명된 URL을 생성하면 해당 URL을 받게 되는 사용자에세 GET이나 PUT 작업에서 생성된 URL의 사용자 권한이 상속된다.
Access Points
: S3 버킷에 액세스하는 다양한 방법을 정의할 수 있어 보안을 아주 간단하게 관리할 수 있다.
- 각 액세스 포인트에는 각각의 DNS 이름이 있다.
VPC Origin
: 프라이빗 액세스로 정의할 수 있다.
S3 Object Lambda