참고
S3 Encryption
NOTE
S3 기본 암호화를 사용하면 S3 버킷에 대한 기본 암호화 동작을 설정하여 모든 객체가 버킷에 저장될 때 암호화되도록 할 수 있다.
•
모든 새 객체 업로드는 추가 비용 없이 성능에 영향을 미치지 않고 자동으로 암호화 된다.
•
S3 버킷내 객체를 암호화하는 방법은 4가지가 있다.
◦
Server-Side Encryption
▪
SSE-S3
▪
SSE-KMS
▪
SSE-c
◦
Client-Side Encryption
Server-Side Encryption
NOTE
서버측 암호화는 데이터를 받는 서비스에 의해 해당 대상에서 데이터를 암호화 하는 것!
•
S3에서 데이터 센터의 디스크에 데이터를 쓰면서 객체 수준에서 데이터를 암호화하고 사용자가 해당 데이터에 엑세스할 때 자동으로 암호를 해독한다.
•
요청을 인증하기만 하면 액세스 권한을 갖게 되며, 객체의 암호화 여부에 관계없이 액세스 방식에는 차이가 없다.
◦
ex) 미리 서명된 URL을 사용해서 공유, 헤당 URL은 암호화된 객체와 암호화 되지않은 객체에 동일하게 전송됨
SSE-S3
NOTE
관리형 키를 사용한 서버 측 암호화
고유한 키로 암호화된다!
•
추가 보안 조치로 주기적으로 교체되는 루트 키를 사용하여 키 자체를 암호화한다.
•
S3 서버측 암호화는 가장 강력한 블록 암호 중 하나인 AES-256을 사용한다
SSE-KMS
NOTE
AWS KMS keys를 사용한 서버측 암호화!
S3가 소유한 키에 의존하는 대신 KMS로 자신의 키를 직접 관리한다!
•
S3와 유사하지만 추가적인 이점이 있는 대신, 비용이 발생한다.
•
KMS를 사용하면 사용자가 키를 제어할 수 있다는 장점이 있다.
◦
SSE-KMS도 CloudTrail을 사용하여 KMS키가 사용된 떄와 사용 주체를 표시하는 모니터링 기능 제공
SSE-C
NOTE
고객 제공 키를 사용한 서버 측 암호화!
•
S3로 키를 전송하기 떄문에 HTTPS를 사용해야하고, 전송할 때마다 HTTP헤더에 키를 포함하여 전달해야 한다.
Client-Side Encryption
NOTE
클라이언트 측 암호화 ⇒ 데이터를 S3로 보내기전에 데이터를 암호화하고 다운로드한 후 해독하는 방식!
•
클라이언트 라이브러리로 쉽게 구현할 수 있다.
•
암호화한 데이터는 S3에서 가져올 수도 있고 데이터 복호화는 Amazon S3외부의 클라이언트에서 수행된다.
S3 CORS
NOTE
브라우저에서 보안적인 이유로 cross-origin-HTTP 요청들을 제한한다. 그래서 cross-origin 즉, 다른 Origin 간에 요청을 하려면 서버의 동의가 필요하다!
•
이러한 허락을 구하고 거절하는 메커니즘을 HTTP-header를 이용해서 가능한데, 이를 CORS(Cross-Origin Resource Sharing)라고 부른다.
Origin이란?
Origin = scheme(Protocol) + host(Domain) + port
기본 Request
NOTE
서버에게 바로 요청을 보내는 방법
•
단순 요청은 서버에 API를 요청하고, 서버는 Access-Control-Allow-Origin 헤더를 포함한 응답을 보내준다.
•
브라우저는 Access-Control-ALlow-Origin 헤더를 확인하고 CORS 동작을 수행할지 판단한다.
Preflight request - CORS의 동작
NOTE
서버에 예비 요청을 보내서 안전한지 판단한 후 요청을 보내는 방법이다!
CORS Headers를 이용한 요청 과정은 위와같이 이루어진다.
1.
웹 브라우저가 Origin에 방문했을 때 Origin으로부터 다른 Origin으로 요청을 보낼 것을 요청받는 경우
•
웹 브라우저는 Cross Orogin에 Preflight(options) 요청을 보낸다.
2.
Cross Origin은 Preflight Response를 보내준다.
•
해당 응답에서 Access-Control-Allow-Origin에 Cross Origin 호스트가 들어가 있다면 웹 브라우저는 Cross Origin에 다시 요청을 보낼 수 있게 된다.
S3 CORS
NOTE
S3에서 CORS 통신하는 흐름
•
권한 → CORS에서 설정 가능!
[
{
"AllowedHeaders": [
"Authorization"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"<url of first bucket with http://...without slash at the end>"
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]
JSON
복사
CORS 설정
S3 보안 기타
MFA 삭제
NOTE
기본적으로 비활성화 되어 있다.
•
버킷 버전 관리가 활성화 되어 있고, 버킷에서 MFA 삭제가 활성화 되어 있으면 삭제시 MFA인증 필요
•
AWS CLI를 사용해 직접 활성화 및 비활성화해야 함
•
특정 객체 버전의 영구 삭제를 방지하는 역할
액세스 로그
NOTE
•
감사 목적으로 S3 버킷에 대한 모든 액세스를 기록할 수 있음
•
Amazon Athena 같은 데이터 분석 도구로 분석
•
절대로 로깅 버킷과 모니터링하는 버킷을 동일하게 설정하지 말 것!
미리 서명된 URL
NOTE
•
S3 콘솔, CLI, SDK를 사용하여 생성할 수 있는 URL
•
S3 콘솔 사용 시 최대 12시간, CLI 사용시 최대 168시간의 만료기한
•
프라이빗 버킷의 소유자가 미리 서명된 URL을 생성하여 다른 사용자에게 URL을 보내서 버킷에 접근하는 방식
•
특정 파일에 임시로 액세스할 때 사용
객체 잠금
NOTE
•
WORM (Write Once Read Many)
•
객체 잠금 사용 시 특정 객체 버전이 특정 시간동안 삭제되는 것을 차단
•
규정 준수 모드
◦
사용자를 포함한 누구도 객체 버전을 덮어 쓰거나 삭제할 수 없음
•
거버넌스 보존 모드
◦
관리자와 일부 사용자에게 IAM을 통해 부여받은 권한으로 삭제 가능
•
보존기간을 설정하여 객체를 보호하고 원하는 만큼 기간 연장 가능