Amazon S3
Amazon S3 - 버킷
- 객체(파일)를 저장하는 컨테이너
- 전체 리전, 모든 계정에서 전역적으로 고유한(Unique) 이름 필요
- 버킷은 리전 레벨에서 정의됨
- 네이밍 규칙
- 소문자만 사용
- 언더스코어 금지
- 3-63자 길이
- IP 주소 형식 금지
- 소문자 또는 숫자로 시작
- xn-- 접두사 금지
- -s3alias 접미사 금지
Amazon S3 - 주요 사용 사례
- 백업 및 스토리지
- 재해 복구
- 아카이빙
- 하이브리드 클라우드 스토리지
- 애플리케이션/미디어 호스팅
- 데이터 레이크 및 빅데이터 분석
- 소프트웨어 배포
- 정적 웹사이트 호스팅
Amazon S3 - 오브젝트
- Key = 전체 경로
- s3://my-bucket/my_folder1/another_folder/my_file.txt
- prefix(my_folder1/another_folder/) + 객체명(my_file.txt)으로 구성
- 버킷 내부에 실제 디렉토리 개념은 없음
- 슬래시(/)를 포함한 긴 이름의 Key일 뿐임
- 최대 객체 크기 5TB
- 5GB 초과 업로드 시 "멀티파트 업로드" 필수
- 메타데이터, 태그(최대 10개), 버전 ID 포함 가능
Amazon S3 - 보안
- User-Based
- IAM 정책으로 특정 사용자의 API 호출 허용 여부 제어
- Resource-Based
- 버킷 정책: 버킷 전체 규칙, 크로스 계정 허용 가능
- 객체 ACL: 세밀한 제어 (비활성화 가능)
- 버킷 ACL: 덜 일반적 (비활성화 가능)
- 접근 허용 조건
- IAM 권한이 ALLOW 또는 리소스 정책이 ALLOW
- 명시적 DENY가 없어야 함
- 암호화 키를 사용한 객체 암호화 지원
S3 버킷 정책
- JSON 기반
- 구성 요소
- Resources: 버킷과 객체
- Effect: Allow/Deny
- Actions: 허용/거부할 API 집합
- Principal: 정책을 적용할 계정/사용자
- 주요 용도
- 버킷 퍼블릭 액세스 허용
- 업로드 시 객체 암호화 강제
- 다른 계정에 액세스 권한 부여
※ S3는 리전 레벨의 버킷에 객체를 저장하는 서비스임. 버킷명은 전역 고유해야 하며, 객체는 Key(전체 경로)로 식별됨. 보안은 IAM 정책과 버킷 정책으로 제어하며, 버킷 정책은 JSON 기반으로 퍼블릭 액세스나 크로스 계정 권한 부여에 활용됨
Amazon S3 - 정적 웹사이트 호스팅
- S3로 정적 웹사이트 호스팅 가능, 인터넷 접근 허용
- URL 형식 (리전별 상이)
- 403 Forbidden 에러 발생 시 버킷 정책에서 퍼블릭 읽기 권한 확인 필요
Amazon S3 - 버저닝
- 버킷 레벨에서 활성화
- 동일 Key 덮어쓰기 시 버전 번호 증가 (1, 2, 3...)
- 장점
- 의도치 않은 삭제 방지 (버전 복원 가능)
- 이전 버전으로 쉬운 롤백
- 주의사항
- 버저닝 활성화 전 파일은 버전 "null"
- 버저닝 일시정지 시 이전 버전은 삭제되지 않음
Amazon S3 - 복제 (CRR & SRR)
- 소스/대상 버킷 모두 버저닝 활성화 필수
- 종류
- CRR (Cross-Region Replication): 리전 간 복제
- SRR (Same-Region Replication): 동일 리전 내 복제
- 특징
- 서로 다른 AWS 계정 간 가능
- 비동기 복사
- S3 IAM 권한 필요
- 사용 사례
- CRR: 규정 준수, 지연 시간 감소, 계정 간 복제
- SRR: 로그 집계, 프로덕션/테스트 계정 간 실시간 복제
Amazon S3 - 복제 주의사항
- 복제 활성화 후 신규 객체만 복제됨
- 기존 객체는 S3 Batch Replication으로 선택적 복제 가능
- DELETE 작업
- 삭제 마커 복제는 선택 사항
- 버전 ID가 있는 삭제는 복제 안 됨 (악의적 삭제 방지)
- 체이닝 불가능
- 버킷1→버킷2→버킷3 복제 설정 시
- 버킷1 객체는 버킷3로 복제 안 됨
S3 스토리지 클래스
- Standard - General Purpose
- Standard-Infrequent Access (IA)
- One Zone-Infrequent Access
- Glacier Instant Retrieval
- Glacier Flexible Retrieval
- Glacier Deep Archive
- Intelligent Tiering
- S3 Lifecycle 설정으로 클래스 간 자동/수동 이동 가능
★ S3 Standard (기본)
일반적인 모든 용도에 사용되는 기본 값입니다.
- 핵심 키워드: 자주 액세스 (Frequent Access), 범용, 웹사이트, 모바일 앱, 동적 콘텐츠
- 한 줄 요약: 특별한 조건이 없다면 일단 Standard.
S3 Intelligent-Tiering (똑똑이)
액세스 패턴을 예측할 수 없을 때 가장 좋습니다. AWS가 알아서 최적의 계층으로 옮겨줍니다.
- 핵심 키워드: 알 수 없는/예측 불가능한 액세스 패턴 (Unknown Access), 변동이 심한 데이터
- 한 줄 요약: 액세스 패턴을 모르겠으면 그냥 Intelligent-Tiering.
S3 Standard-IA & S3 One Zone-IA (가끔)
데이터에 자주 접근하지는 않지만, 필요할 때 즉시 가져와야 할 때 사용합니다.
- 핵심 키워드: 가끔 액세스 (Infrequent Access), 백업, 재해 복구(DR) 데이터, 장기 저장
- 한 줄 요약: 가끔 쓰지만 필요할 땐 바로 써야 하는 데이터.
- 차이점: One Zone-IA는 단일 가용 영역(AZ)에만 저장되므로, 중요하지 않거나 쉽게 복제 가능한 데이터에만 사용해야 합니다. (비용은 더 저렴)
S3 Glacier Instant Retrieval (급한 아카이브)
거의 액세스하지 않는 아카이브 데이터지만, 1년에 한두 번 필요할 때 밀리초 단위로 즉시 검색해야 할 때 사용합니다.
- 핵심 키워드: 아카이브(Archive), 즉시 검색(Instant Retrieval), 분기별 액세스
- 한 줄 요약: 창고 깊숙이 있지만, 찾으면 바로 나와야 하는 서류.
S3 Glacier Flexible Retrieval & Deep Archive (진짜 아카이브)
데이터를 검색하는 데 몇 분에서 몇 시간이 걸려도 괜찮은, 장기 보관용 아카이브 데이터입니다.
- 핵심 키워드: 장기 아카이브(Long-term Archive), 규정 준수(Compliance), 감사 로그, 가장 저렴한 비용
- 한 줄 요약: 다시 볼 일이 거의 없는, 법적 보관용 데이터.
- 차이점: Deep Archive가 더 저렴하고 검색 시간도 더 깁니다 (최대 12시간).
S3 내구성과 가용성
- 내구성(Durability)
- 99.999999999% (11 nines)
- 1천만 객체 저장 시 1만년에 1개 손실
- 모든 스토리지 클래스 동일
- 가용성(Availability)
- 스토리지 클래스별 상이
- Standard는 99.99% (연간 53분 불가)
S3 Standard - General Purpose
- 가용성 99.99%
- 자주 액세스하는 데이터용
- 낮은 지연시간, 높은 처리량
- 2개 시설 동시 장애 견딤
- 사용 사례: 빅데이터 분석, 모바일/게임 앱, 콘텐츠 배포
S3 Infrequent Access 클래스
- 액세스 빈도 낮지만 필요 시 빠른 액세스 필요한 데이터용
- Standard보다 저렴
- Standard-IA
- 가용성 99.9%
- 사용 사례: 재해 복구, 백업
- One Zone-IA
- 단일 AZ에서 높은 내구성, AZ 파괴 시 데이터 손실
- 가용성 99.5%
- 사용 사례: 온프레미스 데이터 보조 백업, 재생성 가능 데이터
Amazon S3 Glacier 클래스
- 아카이빙/백업용 저비용 객체 스토리지
- 스토리지 비용 + 객체 검색 비용
- Glacier Instant Retrieval
- 밀리초 검색, 분기별 1회 액세스 데이터
- 최소 보관 기간 90일
- Glacier Flexible Retrieval
- Expedited (1-5분), Standard (3-5시간), Bulk (5-12시간, 무료)
- 최소 보관 기간 90일
- Glacier Deep Archive
- Standard (12시간), Bulk (48시간)
- 최소 보관 기간 180일
S3 Intelligent-Tiering
- 소액 월간 모니터링 및 자동 티어링 비용
- 사용 패턴 기반 자동 티어 이동
- 검색 비용 없음
- 티어 구조
- Frequent Access (자동): 기본 티어
- Infrequent Access (자동): 30일간 미사용
- Archive Instant Access (자동): 90일간 미사용
- Archive Access (선택): 90-700+일 설정 가능
- Deep Archive Access (선택): 180-700+일 설정 가능
S3 Express One Zone
- 단일 AZ 고성능 스토리지 클래스
- Directory Bucket에 객체 저장 (단일 AZ 버킷)
- 초당 수십만 요청 처리, 한 자릿수 밀리초 지연시간
- S3 Standard 대비 10배 성능 향상 (비용 50% 절감)
- 내구성 99.999999999%, 가용성 99.95%
- 동일 AZ 내 스토리지/컴퓨팅 리소스 배치로 지연시간 감소
- 사용 사례: 지연시간 민감 앱, 데이터 집약 앱, AI/ML 학습, 금융 모델링, 미디어 처리, HPC
- SageMaker, Athena, EMR, Glue와 통합 최적화
※ S3는 정적 웹 호스팅, 버저닝, 리전 간/내 복제 기능 제공함. 스토리지 클래스는 사용 패턴에 따라 Standard부터 Glacier까지 다양하며, Intelligent-Tiering은 자동 최적화, Express One Zone은 초고성능 요구사항 충족함
Amazon S3 - 스토리지 클래스 전환
- Lifecycle Rules로 자동화 가능
- 자주 안 쓰는 객체 → Standard IA
- 아카이브 객체 → Glacier/Deep Archive
Amazon S3 - Lifecycle Rules
- Transition Actions: 다른 스토리지 클래스로 전환
- 생성 60일 후 Standard IA로 이동
- 6개월 후 Glacier로 아카이빙
- Expiration Actions: 일정 기간 후 삭제
- 액세스 로그 365일 후 삭제
- 구버전 파일 삭제 (버저닝 활성화 시)
- 불완전한 멀티파트 업로드 삭제
- 특정 prefix 또는 Tag로 규칙 적용 가능
시나리오 1: 썸네일 관리
원본 이미지 (중요하고 재생성 불가)
- 초기 (Standard): 업로드 직후에는 자주 접근하므로 가장 빠른 Standard 클래스에 보관함
- 60일 후 (Glacier): 시간이 지나 접근 빈도가 줄면, 비싸게 보관할 이유가 없음. 스토리지 비용이 매우 저렴한 Glacier로 옮겨 아카이빙 비용을 최적화함. 6시간 내 검색은 오래된 데이터에 대해 허용 가능한 정책임
- 썸네일 (덜 중요하고 재생성 가능)
- 초기 (One-Zone IA): 썸네일은 자주 쓰이지만 원본만 있으면 언제든 다시 만들 수 있음. 따라서 AZ(가용 영역) 1개가 파괴되면 데이터가 유실될 위험을 감수하는 대신, 비용이 더 저렴한 One-Zone IA를 사용함
- 60일 후 (삭제): 60일이 지난 썸네일은 보관할 가치가 없음. 원본이 Glacier로 넘어가는 시점에 맞춰, 아예 삭제해 버림으로써 불필요한 스토리지 비용 발생을 원천 차단함. 필요하면 Glacier의 원본으로 다시 만들면 됨
결론: 중요 자산(원본)은 안전하고 저렴하게 아카이빙하고, 부차적 자산(썸네일)은 저렴하게 보관하다가 빠르게 삭제하여 총 소유 비용(TCO)을 최소화하는 전략임
시나리오 2: 삭제 복구
이 시나리오는 S3 버저닝(Versioning) 기능을 활용하여 실수로 인한 데이터 삭제를 방지하고, 오래된 백업 데이터의 보관 비용을 최소화하는 정책을 자동화하는 것을 목표로 함
- 버저닝 활성화 (실수 방지 장치)
- 파일을 삭제하거나 덮어써도 이전 버전이 그대로 남게 됨. 사용자가 '삭제'하면 실제로는 '삭제 마커'가 생길 뿐, 이전 버전은 즉시 복구 가능한 상태로 유지됨. 이것이 30일간 즉시 복구가 가능한 이유임
- 이전 버전의 자동 계층화 (백업 비용 최적화)
- 최신 버전이 아닌 '이전 버전'들은 사실상 백업 데이터임. 이 파일들은 거의 접근하지 않으므로 비싼 Standard 클래스에 둘 필요가 전혀 없음
- Standard-IA로 이동: 혹시 모를 빠른 복구를 위해 일단 저렴한 Standard-IA로 옮겨 비용을 줄임
- Deep Archive로 이동: 시간이 더 지나면 복구할 가능성이 거의 없으므로, 가장 저렴한 Deep Archive로 옮겨 보관 비용을 거의 0에 가깝게 만듦
결론: 사용자의 실수를 막는 안전장치(버저닝)를 마련하고, 이로 인해 쌓이는 백업용 데이터(이전 버전)는 시간의 흐름에 따라 가장 저렴한 스토리지로 자동으로 옮겨서 장기 보관 비용 부담을 없애는 스마트한 백업 정책임
S3 Analytics - Storage Class Analysis
- Standard와 Standard IA 전환 시점 추천
- One-Zone IA, Glacier는 지원 안 됨
- 일일 보고서, 분석 시작까지 24-48시간 소요
- Lifecycle Rules 생성/개선 시 활용
※ Lifecycle Rules로 객체를 자동으로 저비용 클래스로 전환하거나 삭제 가능함. S3 Analytics는 최적 전환 시점 분석 제공함
Amazon S3 - Requester Pays
- 기본: 버킷 소유자가 스토리지 및 데이터 전송 비용 부담
- Requester Pays 활성화 시: 요청자가 비용 부담
- 요청 비용
- 데이터 다운로드 비용
- 사용 사례: 대용량 데이터셋을 다른 계정과 공유 시 유용
- 제약: 요청자는 AWS 인증 필수 (익명 불가)
※ Requester Pays는 데이터 다운로드 비용을 요청자에게 전가하는 기능으로, 대용량 데이터 공유 시 소유자 비용 부담 완화함
S3 이벤트 알림 - S3 이벤트를 Lambda/SQS/SNS로 전달하는 자동화 기능. 파일명 필터링 지원하며 보통 몇 초 내 전달
S3 이벤트 알림 지원되는 대상 서비스
- Lambda Function
- SQS (Simple Queue Service)
- SNS (Simple Notification Service)
S3 주요 이벤트 타입
- S3:ObjectCreated - 객체 생성 시
- S3:ObjectRemoved - 객체 삭제 시
- S3:ObjectRestore - 객체 복원 시
- S3:Replication - 복제 관련 이벤트
S3 이벤트 알림 필터링 기능
- 객체 이름 기반 필터링 가능
- 예시: *.jpg 파일만 이벤트 발생
S3 이벤트 알림 대표 사용 사례 - S3에 업로드된 이미지의 썸네일 자동 생성
S3 이벤트 알림 특징
- 하나의 버킷에 원하는 만큼 이벤트 설정 가능
- 일반적으로 몇 초 내 이벤트 전달됨
- 드물게 1분 이상 소요 가능
Amazon S3 - S3 Performance
기본 성능 (Baseline Performance)
- 자동 스케일링으로 높은 요청 속도 지원
- 응답 지연 시간: 100-200ms
- prefix당 초당 요청 수
- PUT/COPY/POST/DELETE: 3,500개
- GET/HEAD: 5,500개
- prefix 개수는 무제한
Prefix 개념
- bucket/folder1/sub1/file → prefix: /folder1/sub1/
- bucket/folder1/sub2/file → prefix: /folder1/sub2/
- bucket/1/file → prefix: /1/
- bucket/2/file → prefix: /2/
예시: 4개 prefix에 균등 분산 시 GET/HEAD 요청 초당 22,000개 가능
Multi-Part Upload
- 100MB 이상 파일에 권장
- 5GB 이상 파일은 필수
- 업로드를 병렬화하여 전송 속도 향상
S3 Transfer Acceleration
- AWS Edge Location을 통해 파일 전송
- Edge Location이 대상 리전의 S3 버킷으로 데이터 전달
- Multi-Part Upload와 함께 사용 가능
- 전송 속도 증가
S3 Byte-Range Fetches
- 특정 바이트 범위를 요청하여 GET 병렬화
- 실패 시 복원력 향상
- 사용 사례
- 다운로드 속도 향상 (파일을 여러 Part로 나눠 병렬 요청)
- 부분 데이터만 조회 (예: 파일 헤더만 요청)
S3 Batch Operations 주요 기능
- 객체 메타데이터 및 속성 수정
- S3 버킷 간 객체 복사
- 암호화되지 않은 객체 암호화
- ACL, 태그 수정
- S3 Glacier에서 객체 복원
- Lambda 함수 호출하여 커스텀 작업 수행
작업 구성
- 객체 목록
- 수행할 작업
- 선택적 파라미터
관리 기능
- 재시도 자동 관리
- 진행 상황 추적
- 완료 알림 전송
- 리포트 생성
※ S3는 prefix당 초당 수천 개 요청 처리 가능. Multi-Part Upload와 Transfer Acceleration으로 업로드 속도 향상, Byte-Range Fetches로 다운로드 최적화, Batch Operations로 대량 작업 자동화 가능
Amazon S3 - Storage Lens
- Storage Lens는 AWS Organization 전체의 S3 스토리지를 분석·최적화하는 통합 대시보드 서비스임
Storage Lens 핵심 기능
- 전체 조직 가시성
- AWS Organization 전체 S3 사용 현황 파악
- 이상 징후 탐지, 비용 절감 기회 식별
- 데이터 보호 모범 사례 적용 여부 확인
- 30일간 사용량 및 활동 지표 제공
- 유연한 집계 범위
- Organization, 계정, 리전, 버킷, prefix 단위 선택 가능
- 기본 대시보드 제공 또는 커스텀 대시보드 생성
- 메트릭을 S3 버킷으로 일일 내보내기 가능 (CSV, Parquet)
Default Dashboard - 자동 제공 대시보드
- Multi-Region, Multi-Account 데이터 시각화
- Amazon S3가 사전 구성
- 삭제 불가, 비활성화만 가능
- 무료 및 유료 메트릭 모두 지원
메트릭 유형 (7가지)
- Summary Metrics (요약 지표)
- S3 스토리지 일반 인사이트
- StorageBytes, ObjectCount 등
- 용도: 가장 빠르게 증가하거나 사용 안 되는 버킷/prefix 식별
- Cost-Optimization Metrics (비용 최적화)
- 스토리지 비용 관리 인사이트
- NonCurrentVersionStorageBytes, IncompleteMultipartUploadStorageBytes 등
- 용도: 7일 이상 된 미완료 멀티파트 업로드 식별, 저비용 스토리지 클래스 전환 대상 파악
- Data-Protection Metrics (데이터 보호)
- 데이터 보호 기능 현황
- VersioningEnabledBucketCount, MFADeleteEnabledBucketCount, SSEKMSEnabledBucketCount 등
- 용도: 데이터 보호 모범 사례 미준수 버킷 식별
- Access-Management Metrics (접근 관리)
- S3 Object Ownership 설정 인사이트
- ObjectOwnershipBucketOwnerEnforcedBucketCount 등
- 용도: 버킷별 Object Ownership 설정 확인
- Event Metrics (이벤트)
- S3 Event Notifications 설정 현황
- EventNotificationEnabledBucketCount
- 용도: 이벤트 알림 구성 여부 확인
- Performance Metrics (성능)
- S3 Transfer Acceleration 사용 현황
- TransferAccelerationEnabledBucketCount
- 용도: Transfer Acceleration 활성화 버킷 식별
- Activity Metrics (활동)
- 스토리지 요청 패턴 분석
- AllRequests, GetRequests, PutRequests, ListRequests, BytesDownloaded 등
- Detailed Status Code Metrics 포함 (200, 403, 404 등)
Free Metrics
- 모든 고객에게 자동 제공
- 약 28개 사용량 메트릭 포함
- 데이터 보관 14일
Advanced Metrics (유료)
- Activity, Advanced Cost Optimization, Advanced Data Protection, Status Code 메트릭
- CloudWatch Publishing: 추가 비용 없이 CloudWatch에서 메트릭 조회
- Prefix Aggregation: prefix 레벨 메트릭 수집
- 데이터 보관 15개월
※ Storage Lens는 Organization 전체 S3를 한눈에 분석하는 서비스. 7가지 메트릭 유형(요약, 비용최적화, 데이터보호, 접근관리, 이벤트, 성능, 활동)으로 스토리지 최적화 지원. 무료는 28개 메트릭에 14일 보관, 유료는 고급 메트릭에 15개월 보관 제공
S3 오브젝트 암호화
Amazon S3 - S3 오브젝트 암호화
- 크게 2가지로 나뉨
- 서버에서 관리하는 Server Side Encryption
- Client에서 관리하는 Client Side Encryption
- 서버 사이드 암호화는 3개 종류가 있음
SSE - 서버 사이드 암호화(Server-Side Encryption)
- Amazon S3-Managed Keys (SSE-S3)
- 기본 설정
- S3 오브젝트 암호화에 사용되는 키는 AWS 가 소유하고, 관리하고 핸들링함
- AWS KMS에 저장된 KMS key를 이용한 암호화 (SSE-KMS)
- AWS KMS 서비스를 이용해서 암호화 키를 관리함
- 사용자가 제공한 키를 이용한 암호화 (SSE-C)
- 사용자가 관리하는 키를 이용해 암호화함
SSE - S3
- AWS에서 관리되는 키를 사용함
- 서버사이드에서 암호화가 진행됨
- AES-256 암호화를 사용함
- "x-amz-server-side-encryption": "AES256" 헤더를 반드시 추가해야 함
- 신규 버킷과 오브젝트에 기본으로 적용됨
- User Upload(HTTPS + Header) → Amazone S3(OBJ + S3 Owned Key) → 암호화하여 Amazon S3 Bucket
SSE - KMS
- AWS KMS를 통해 암호화 키가 관리됨
- KMS를 사용하면 사용자가 키를 컨트롤할 수 있음
- 키에 대한 변경과 사용처를 CloudTrail을 통해 로깅 확인할 수 있음
- 키 생성하면 매월 비용 발생
- "x-amz-server-side-encryption": "aws:kms" 헤더를 입력해야 함
- User Upload(HTTPS + Header + KMS Key 지정) → Amazone S3(OBJ + AWS KMS_KMS Key) → 암호화하여 Amazon S3 Bucket
SSE - KMS 주의할 점
- KMS 제한에 영향을 받을 수 있음
- 업로드 시점에 KMS에 GenerateDataKey KMS API를 호출함
- 다운로드 시점에 KMS에 Decrypt KMS API를 호출함
- KMS 초당 요청 제한이 있음
- 리전에 따라 초당 5500회, 10000회, 30000회 제한이 있음
- 더 많은 양이 필요하다면 Service Quotas Console를 통해 요청해야 함
SSE - C
- 사용자가 관리하는 키를 이용해 서버사이드 암호화를 진행함
- S3는 제공된 암호화 키를 저장하지 않음
- HTTPS 통신이 강제됨
- 암호화 키는 반드시 http 헤더에 포함되어야 함
- 모든 HTTP 요청에 반드시 포함되어야 함
- User Upload(HTTPS + Header + Key) → Amazone S3(OBJ + Client-Provided Key) → 암호화하여 Amazon S3 Bucket
클라이언트 사이드 암호화
- Amazon S3 Client-Side Encryption Library 같은 클라이언트 라이브러리를 사용함
- 클라이언트는 반드시 S3 업로드 전에 데이터를 암호화해야 함
- 클라이언트는 반드시 데이터를 가져온 뒤 복호화 해야 함
- 사용자가 암호화 모든 과정을 관리함
Amazon S3 - 전송간 암호화 (SSL/TLS)
- 전송 간 암호화는 SSL/TLS라고 함
- S3 는 http / https 엔드 포인트를 제공함
- HTTPS를 사용하는 걸 추천함
- SSE-C를 사용하는 경우 필수로 HTTPS를 사용해야 함
- Bucket Policy를 통해 HTTPS 사용을 강제할 수 있음
- aws:SecureTransport: true를 셋팅함
Amazon S3 - 암호화 적용 필수로 적용하기
- SSE-S3
- 기본 암호화는 모든 신규 버킷과 오브젝트에 자동으로 적용됨
- SSE-KMS 또는 SSE-C 와 같은 암호화를 사용하는 경우
- Bucket Policy를 통해 핸들링함
- Bucket Policy에 Deny Policy를 적용함
- SSE-KMS, SSE-C의 필수 헤더가 없는 경우 Deny 하도록 설정함
- Bucket Policy는 기본 암호화보다 먼저 실행됨
- 요청이 들어오는 시점에 요청을 받을지, 받지 않을지를 판단하기 때문
Amazon S3 - CORS
CORS란?
- Cross-Origin Resource Sharing의 줄임말
- Origin 은 scheme(protocol) + 호스트(도메인) + 포트를 합쳐서 구분함
- https://www.example.com (443 PORT)
- http://www.example.com (80 PORT)
- 웹 브라우저 기반의 기술
- 다른 오리진으로 향하는 요청을 허용할지 말지 결정함
- 두 가지는 다른 오리진으로 판단함!
- https://www.example.com (443 PORT)
- http://www.example.com (80 PORT)
- 서로 다른 오리진으로 요청할 때 Access-Control-Allow-Origin 같은 헤더가 없다면, 요청이 허용되지 않음
- 헤더에 적절한 오리진을 셋팅해야함
- S3 콘솔에서 CORS를 JSON 형식으로 구성할 수 있음
- AllowedMethod
- 요청의 HTTP method를 정의함
- AllowedOrigin
- 허용할 요청 오리진을 설정함
- MaxAgeSeconds
- Preflight를 통해 얻은 값을 브라우저가 캐시 할 수 있는 시간을 지정함
※ CORS는 브라우저가 제공하는 1차 보안 장치로, 다른 출처(프로토콜, 도메인, 포트)에서 API 응답 데이터를 읽지 못하게 막음. 하지만 요청 자체는 전송되므로 CSRF 토큰, SameSite 쿠키, 서버 인증 인가 같은 추가 보안 대책 필수
Amazon S3 - MFA 삭제
- MFA란?
- 사용자가 S3에서 중요한 동작을 할 때 별도의 어플리케이션 또는 디바이스를 통해 한 번 더 인증을 하도록 함
- 어떤 게 중요한 동작일까요?
- 오브젝트의 버전을 삭제한다.
- 버킷의 버저닝을 중지한다.
- 중요하지 않은 동작은?
- 버저닝을 동작 시킨다.
- 삭제된 버전을 불러온다.
- MFA 삭제 기능은 버저닝이 적용 되었을 때만 사용할 수 있음
- 버킷 소유자만 MFA 삭제를 키고 끌 수 있음
Amazon S3 - Access Logs
- S3 버킷에 대한 활동을 로깅을 위해서 사용함
- 모든 aws 계정, 인증되거나 인증되지 않은 요청 등 모든 S3 버킷에 대한 요청을 다른 로깅용 버킷에 저장함
- 로깅용 버킷도 같은 리전 안에 있어야 함
- 로깅 포맷에 대한 내용은 여기를 확인해야함
- 로깅 데이터를 같은 버킷에 저장하지 마세요!
- 루프가 생겨서 버킷의 사이즈가 무한대로 증가함
Amazon S3 - Pre Signed URL
- 특정 시간이 지나면 만료되는 url 을 생성할 수 있음
- pre-signed url 은 S3 콘솔, CLI, SDK에서 사용 가능함
- S3 콘솔에서 만든 URL 은 1분에서 720분까지 유효함
- CLI를 통해 생성한 경우 168시간(604800 초)까지 셋팅 할 수 있음
- 생성할 때 만들어진 GET / PUT에 대한 권한을 최종 사용자도 동일하게 가짐
- 언제 사용하나요?
- 로그인 한 사용자만 다운로드를 할 수 있을 때.
- 일시적으로 사용자가 업로드 또는 다운로드를 해야 하는 기능
Amazon S3 - Glacier Vault Lock
- WORM(Write Once Read Many) 모델을 적용
- Vault Lock Policy를 생성해서 적용할 수 있음
- 한번 작성되었다면, 삭제되거나 업데이트될 수 없음
- 컴플라이언스나, 데이터의 불변성이 보장되어야 할 때 사용함
- 볼트 잠금 정책 생성 → 정책 잠금
- 일단 잠그면 누구도 변경/삭제 불가 (관리자, AWS 포함)
- 규정 준수, 데이터 보존용
Amazon S3 - Object Lock
- WORM 모델을 적용
- 오브젝트 버저닝이 반드시 활성화되어 있어야 함
- 오브젝트의 버전 삭제를 특정 기간 동안 방지함
- Retention mode - 컴플라이언스
- 오브젝트 버전 덮어쓰기 또는 삭제가 모든 유저를 대상으로 불가능 (root 계정도 포함)
- 리텐션 모드 변경 불가, 리텐션 기간을 더 적게 변경 불가
- 누구도 객체 덮어쓰기/삭제 불가
- Retention Mode - 거버넌스
- 대부분의 사용자는 오브젝트 버전을 변경하거나, 삭제하거나 설정 변경 불가
- 권한이 있는 일부 사용자는 설정을 변경하거나 오브젝트 삭제 가능
- Retention 기간
- 특정 기간 동안 오브젝트 lock 을 적용함
- 연장이 가능함
- 법적 보존(Legal Hold)
- 오브젝트를 무기한 보호함
- 리텐션 기간과 별개로 적용됨
- s3:PutObjectLegalHold IAM 권한이 있는 경우 자유롭게 설정하거나 제거할 수 있음
Amazon S3 - Access Point
- Access Point는 S3 버킷에 대한 보안 관리임
- Access Point 가 가지는 속성
- 개별 DNS 이름이 있음 (Internet Origin , VPC Origin)
- Access Point Policy를 가짐
- 버킷 정책과 유사함
- 유연하게 보안을 관리할 수 있음
※ 액세스 포인트는 복잡한 S3 버킷 정책을 분산시켜 보안 관리 간소화함. 각 포인트가 독립적 정책 보유하며 고유 DNS로 접근. VPC 오리진 설정 시 프라이빗 액세스 가능하며 VPC 엔드포인트 필요. 다층 보안 구조로 세밀한 권한 제어 가능
VPC Origin
- VPC 내부에서만 Access Point에 접근하도록 설정할 수 있음
- VPC Endpoint를 반드시 생성해야 함(Gateway 또는 Interface Endpoint)
- VPC Endpoint 정책에 대상 버킷의 Access Point에 접근이 가능하도록 설정해야 함
Amazon S3 - 오브젝트 람다
- 어플리케이션이 오브젝트를 읽어오기 전에 AWS Lambda 함수가 오브젝트를 변경하도록 함
- S3 Access Point 와 S3 Object Lambda Access Point를 한 개의 버킷에 여러 개 생성할 수 있음
- 예시
- 데이터 분석을 하기 위해 데이터를 가져올 때 개인정보를 비식별화 함
- XML to JSON 같이 데이터 포맷을 변경함
- 이미지 워터마크를 생성하거나 썸네일을 위한 사이즈 조정을 진행함
※ S3 객체 람다는 액세스 포인트와 람다 함수 결합으로 요청 시점에 객체 즉석 변환함. 여러 버킷 복제 없이 하나 버킷으로 다양한 변형 제공 가능. PII 삭제, 형식 변환, 이미지 처리 등에 활용됨
'IT > AWS' 카테고리의 다른 글
| AWS SAA(SQS, SNS, Kinesis, Amazon MQ) (0) | 2025.10.12 |
|---|---|
| AWS SAA(CloudFront, Global Accelerator, Storage Extras) (0) | 2025.10.12 |
| AWS SAA(ElastiCache, Route53) (0) | 2025.09.29 |
| AWS SAA(Load Balancer, Auto Scaling, RDS, Aurora) (2) | 2025.09.27 |
| AWS SAA(IAM, EC2) (1) | 2025.09.23 |