Search
Duplicate
📒

[AWS - SAA] 09-3. S3 보안

상태
완료
수업
AWS - Solutions Architect
주제
AWS-DB
연관 노트
3 more properties
참고

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-KMSCloudTrail을 사용하여 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 OroginPreflight(options) 요청을 보낸다.
2.
Cross OriginPreflight Response를 보내준다.
해당 응답에서 Access-Control-Allow-OriginCross 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을 통해 부여받은 권한으로 삭제 가능
보존기간을 설정하여 객체를 보호하고 원하는 만큼 기간 연장 가능