[AWS] S3 관련 내용 정리

INYEONG KIM·2024년 8월 26일

AWS SAP 정리노트

목록 보기
3/14
post-thumbnail

S3 스토리지 유형 (아카이빙 및 비용최적화 목적)

S3 Standard-Infrequent Access(S3 Standard-IA)

  • 자주 액세스되지 않는 데이터를 위한 스토리지로, 필요할 때 즉시(밀리초 단위) 액세스가 가능
  • 자주 액세스되지 않는 데이터를 저장하면서, 신속한 액세스를 유지하고 싶은 경우에 적합

단, Standard-IA 에는 최소 보관 기간 요금이 정의되어 있다 (30일)

  • 임시 저장소로 사용하기에는 보관 기간에 따른 비용을 고려할 필요가 있음 주의

S3 Glacier

  1. S3 Glacier Flexible Retrieval: 구 S3 Glacier (min ~ hour)
  2. S3 Glacier Instant Retrieval: 비교적 빠른 S3 (ms 이내, 더 빠른 S3 Glacier)
  3. S3 Glacier Deep Archive: 규제 요구사항으로 인해 7년 또는 그 이상 보관해야 하는 데이터, 거의 액세스하지 않는 데이터, 장기적으로 안전하게 보관해야 하는 데이터

S3 Intelligent-Tiering

  • 사용자의 "액세스 패턴을 분석"하여, 자주 액세스되지 않는 데이터에 대해 자동으로 저비용 스토리지 티어로 이동시키는 방식으로 비용을 절감해주는 스토리지
  • 데이터 스토리지 비용 외에도 액세스 패턴을 모니터링하는 비용이 소량 포함 (당연히 패턴 최적화를 통해 절감되는 비용보다는 저렴)
  • 데이터에 대한 접근 패턴이 명확하지 않을 경우 유용

CloudFront to S3 접속을 안전하게

  1. CloudFront에 OAI 설정 (OAI는 순수하게 S3만을 위한 설정)
  2. 원본 액세스 ID만 읽기 권한을 갖도록 S3 버킷에 대한 권한을 변경
  3. 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 로깅 방법

  1. 모든 버킷 수준 및 객체 수준 이벤트를 캡처하려면 S3 서버 액세스 로깅을 활성화
  2. 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을 사용하여 객체를 암호화 필요
profile
미래의 저를 위해 작성하는 중입니다 🙆‍♂️

0개의 댓글