S3 스토리지 유형 (아카이빙 및 비용최적화 목적)
S3 Standard-Infrequent Access(S3 Standard-IA)
- 자주 액세스되지 않는 데이터를 위한 스토리지로, 필요할 때 즉시(밀리초 단위) 액세스가 가능
- 자주 액세스되지 않는 데이터를 저장하면서, 신속한 액세스를 유지하고 싶은 경우에 적합
단, Standard-IA 에는 최소 보관 기간 요금이 정의되어 있다 (30일)
- 임시 저장소로 사용하기에는 보관 기간에 따른 비용을 고려할 필요가 있음 주의
S3 Glacier
- S3 Glacier Flexible Retrieval: 구 S3 Glacier (min ~ hour)
- S3 Glacier Instant Retrieval: 비교적 빠른 S3 (ms 이내, 더 빠른 S3 Glacier)
- S3 Glacier Deep Archive: 규제 요구사항으로 인해 7년 또는 그 이상 보관해야 하는 데이터, 거의 액세스하지 않는 데이터, 장기적으로 안전하게 보관해야 하는 데이터
S3 Intelligent-Tiering
- 사용자의 "액세스 패턴을 분석"하여, 자주 액세스되지 않는 데이터에 대해 자동으로 저비용 스토리지 티어로 이동시키는 방식으로 비용을 절감해주는 스토리지
- 데이터 스토리지 비용 외에도 액세스 패턴을 모니터링하는 비용이 소량 포함 (당연히 패턴 최적화를 통해 절감되는 비용보다는 저렴)
- 데이터에 대한 접근 패턴이 명확하지 않을 경우 유용
CloudFront to S3 접속을 안전하게
- CloudFront에 OAI 설정 (OAI는 순수하게 S3만을 위한 설정)
- 원본 액세스 ID만 읽기 권한을 갖도록 S3 버킷에 대한 권한을 변경
- CloudFront와 S3에 서명된 URL 사용 (=특정 Client만 접속하도록 설정)
S3에 직접적으로 Client가 접속하는 방법은 가급적 권고 X
S3 보안 강화 기능
객체 수준 로깅 활성화
GetObject, DeleteObject 및 PutObject와 같은 객체 수준 API 작업에 대한 로그를 CloudTrail로 보낼 수 있다.
Public 읽기 권한이 있는 PutObject API 호출이 AWS CloudTrail 로그에서 감지되면, EventBridge 이벤트 패턴을 설정하여 대상을 다운스트림 알림을 위한 SNS 주제를 생성함으로써 Public S3 객체에 대한 설정을 탐지/사후대처가 가능하다.
- Public 읽기 권한이 있는 S3 PutObject API 호출에 대한 CloudTrail 로그를 분석하려면 EventBridge 이벤트 패턴 기반 규칙을 추가로 구성필요
- SNS 주제는 S3 버킷의 객체를 보호하기 위해 사용자 지정 코드를 실행하는 Lambda 함수로도 구독 역시 가능하므로 사후대처에 대한 자동화 가능
제 3자의 객체 접속/업로드에 대한 IP 로깅 방법
- 모든 버킷 수준 및 객체 수준 이벤트를 캡처하려면 S3 서버 액세스 로깅을 활성화
- CloudTrail 데이터 이벤트를 활성화하여 S3 버킷에 대한 객체 수준 로깅을 활성화
AWS Access Analyzer for S3
각 퍼블릭 또는 공유 버킷에 대한 퍼블릭 또는 공유 액세스의 원본 및 수준에 대한 결과를 확인 가능한 기능
버킷 ACL,버킷 정책 또는 액세스 포인트 정책을 통해 제공되는 읽기 또는 쓰기 액세스 권한에 대한 내용을 확인 가능하지만 아래와 같은 제약 사항이 존재
- S3에 업로드된 새 공용 개체를 거의 실시간으로 탐지하는 데 사용 X
- 또한 Access Analyzer에서 Lambda 함수를 호출 X
Access Analyzer에 대한 보고서는은 AWS Console에서 사용할 수 있거나 CSV 보고서에서 다운로드 가능하며, 실시간 분석보다는 주기적인 현황 보고에 적합한 기능
S3 Transfer Acceleration
글로벌 사용자들이 하나의 S3 버킷으로 데이터를 전송할 때 전송 속도를 개선하는 기능 (특히 장거리 데이터 전송에 유리)
- 글로벌 엣지 로케이션 네트워크를 활용하여, 전 세계 어디서나 S3 버킷으로의 데이터 전송 속도를 가속화하는 기능
- 전 세계 여러 지역에서 하나의 S3 버킷으로 대규모 데이터를 업로드해야 할 때 Transfer Acceleration을 사용하면 업로드 시간을 크게 단축 가능
Object의 특정 byte만 읽기 (S3 Select)
Amazon S3에 대한 동시 연결을 사용하여 동일한 객체 내에서 다양한 바이트 범위를 가져올 수 있다.
- S3 Select ScanRange 매개변수를 사용하여 쿼리할 바이트 범위를 지정 가능
- 겹치지 않는 스캔 범위에 대해 전체 객체 스캔의 병렬화가 가능
이는 단일 전체 객체 요청에 비해 더 높은 집계 처리량을 달성하는 데 도움이 되며, 더 작은 범위의 큰 객체를 가져오면 요청이 중단될 때 애플리케이션의 재시도 시간이 향상이 가능하다.
S3 Private Access (VPC 엔드포인트 접속)
VPC에서 S3 접속 시 게이트웨이 엔드포인트와 인터페이스 엔드포인트라는 두 가지 유형의 VPC 엔드포인트를 사용하여 S3에 액세스 가능하다.
| VPC 게이트웨이 엔드포인트 | VPC 인터페이스 엔드포인트 |
|---|
| VPC와 Amazon S3 간의 통신을 위한 전용 경로(인터넷 X, On-Prem에서 접속 X) | PrivateLink를 사용해 세부적인 보안 및 트래픽 제어(인터넷 X) |
| S3 Public IP로 접근 | VPC의 Private IP로 S3 접근 |
| 무료 | 비용 청구 |
| 게이트웨이 엔드포인트는 S3에 접근하기 위해 구성하는 가장 비용 효율적인 방법 | 설정이 복잡하며, 비용이 추가(단, 다양한 기능 사용 가능) |
| Amazon S3와 DynamoDB에서만 사용 가능 | S3를 포함해 다양한 AWS 서비스에 대해 사용 가능 |
| 대규모의 데이터를 S3에 저장하거나 읽어오는 경우, 특히 인터넷 게이트웨이 없이 VPC 내에서 S3에 안전하게 접근해야 할 때 유용 | S3에 대한 접근을 세부적으로 제어해야 하거나, 특정 서브넷에서 S3에 접근해야 하는 경우에 유용 |
Outposts S3 (On-Prem에 하드웨어를 두는 방식)
- 온프레미스 데이터 저장
- 데이터를 로컬 Outposts에 저장하기 때문에, 로컬에서 데이터를 처리하거나 분석해야 하는 워크로드에 적합
- outpost 를 위한 private subnet 생성 역시 가능 (인터넷 X)
- 프라이빗 엔드포인트를 역시 구성 가능하여 같은 프라이빗 서브넷에 위치한 EC2와 S3를 내부 통신할 수 있음
기타 참고사항
- SSL/TLS 관련 인증서는 어떠한 사유더라도 S3에 저장하는 것을 권고 X
- SSL 인증서의 경우 공개든 비공개든 Amazon S3 버킷에 저장하지 않는 것을 권고한다.
- S3에 MFA 나 버전관리 등의 보안 기능이 활성화 되었더라도 예외는 아님 주의
- 객체의 버전관리가 활성화되었을 경우 가장 최신의 파일 버전 ID는 null (=변경이 없을 경우에도 null)
- 익명 또는 퍼블릭 액세스를 허용하는 S3 버킷은 KMS로 암호화된 객체에 적용되지 X (=S3 정적 웹 사이트 엔드포인트를 사용하여 제공하려는 객체에서 KMS 암호화를 제거 필요)
- 근본적으로 KMS는 익명 요청을 지원하지 않기 때문
- KMS 암호화를 사용하는 대신 AES-256을 사용하여 객체를 암호화 필요