📄 2025.12.08 (Day 31) - AWS 스토리지 서비스: S3, EBS, 데이터 전송
1. 핵심 개념 정리
| # | 핵심 개념 | 설명 | 실무/보안 관점 |
|---|---|---|---|
| 1 | Amazon S3 | AWS의 객체 스토리지 서비스. 버킷이라는 컨테이너에 객체(파일+메타데이터)를 저장하며 무제한 확장이 가능. 99.999999999%(11 9’s)의 내구성 제공 | 데이터 레이크, 백업, 정적 웹 호스팅의 핵심. Block Public Access 기본 활성화 필수. 민감 데이터는 서버측 암호화(SSE-S3/KMS) 적용 |
| 2 | S3 버킷 정책과 ACL | 버킷 정책은 JSON 형식의 리소스 기반 정책으로 교차 계정 접근 허용 가능. ACL은 객체/버킷 단위 접근 제어 목록 | 최소 권한 원칙 적용 필수. Principal이 와일드카드인 정책은 데이터 유출 위험. CloudTrail에서 PutBucketPolicy 이벤트 모니터링 |
| 3 | S3 버전 관리 | 동일한 키에 대해 여러 버전의 객체를 유지하는 기능. 실수로 삭제/덮어써도 이전 버전으로 복구 가능 | 랜섬웨어 공격 대응에 필수. Delete 작업도 Delete Marker만 추가되어 실제 데이터 보존. MFA Delete로 추가 보안 |
| 4 | S3 암호화 | SSE-S3(S3 관리형 키), SSE-KMS(KMS 키, 감사 추적), SSE-C(고객 제공 키), 클라이언트 측 암호화 등 다양한 옵션 | 규정 준수(GDPR, HIPAA)를 위해 필수. SSE-KMS 사용 시 CloudTrail에서 키 사용 로그 추적 가능 |
| 5 | S3 스토리지 클래스 | Standard(빈번한 접근), IA(비빈번 접근), Glacier(아카이브), Intelligent-Tiering(자동 계층화) 등 용도별 저장 계층 | 비용 최적화 핵심. 수명 주기 정책으로 오래된 데이터를 저렴한 계층으로 자동 전환 |
| 6 | S3 정적 웹사이트 호스팅 | S3 버킷을 웹 서버로 사용하여 HTML, CSS, JS 등 정적 콘텐츠 호스팅. 서버리스 웹사이트 구축 가능 | CloudFront와 결합하면 전 세계 배포 가능. Route 53으로 커스텀 도메인, ACM으로 HTTPS 적용 |
| 7 | Amazon EBS | EC2 인스턴스에 연결하여 사용하는 블록 레벨 스토리지. 파일 시스템을 생성하여 OS, DB 저장. 단일 AZ 종속 | 데이터 영속성 및 성능에 핵심. EBS 볼륨 암호화로 미사용 데이터 보호. Delete on Termination 설정 확인 필요 |
| 8 | VPC Gateway Endpoint | 프라이빗 서브넷에서 인터넷 없이 S3/DynamoDB에 직접 접근. 라우팅 테이블에 엔드포인트 경로 자동 추가 | 보안 강화 및 비용 절감. NAT Gateway 없이 S3 접근 가능. Gateway Endpoint는 무료 |
2. 실습 내용
실습 12: S3 버킷 생성 및 파일 관리
버킷 생성 및 파일 관리:
- aws s3 mb s3://oooo-labbucket-1234 –region ap-northeast-2 → 버킷 생성
- aws s3 cp myfile.txt s3://oooo-labbucket-1234/ → 파일 업로드
- aws s3 cp s3://oooo-labbucket-1234/myfile.txt ./downloaded.txt → 파일 다운로드
- aws s3 ls s3://oooo-labbucket-1234/ → 버킷 내 객체 목록 확인
버전 관리 활성화:
- aws s3api put-bucket-versioning –bucket oooo-labbucket-1234 –versioning-configuration Status=Enabled
- aws s3api list-object-versions –bucket oooo-labbucket-1234 → 객체 버전 목록 확인
실습 13: 퍼블릭 접근 설정
Block Public Access 비활성화 (보안 위험 주의 - 실습 후 반드시 복원):
- aws s3api put-public-access-block 명령어로 BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets 모두 false로 설정
- aws s3api put-object-acl –bucket oooo-labbucket-1234 –key myfile.txt –acl public-read → 객체에 퍼블릭 읽기 ACL 부여
- 실습 후 반드시 Block Public Access 다시 활성화 (모두 true로 복원)
실습 14: S3 정적 웹사이트 호스팅
정적 웹사이트 호스팅 활성화:
- aws s3 website s3://oooo-labbucket-1234 –index-document index.html –error-document error.html
버킷 정책 설정 (퍼블릭 읽기 허용):
- bucket-policy.json 파일 내용:
- Version: “2012-10-17”
- Statement: Effect Allow, Principal “”, Action s3:GetObject, Resource arn:aws:s3:::oooo-labbucket-1234/
- aws s3api put-bucket-policy –bucket oooo-labbucket-1234 –policy file://bucket-policy.json
- 웹사이트 URL 형식: http://버킷이름.s3-website.리전.amazonaws.com
실습 15: VPC Gateway Endpoint로 S3 연결
Gateway VPC Endpoint 생성:
- aws ec2 create-vpc-endpoint 주요 파라미터:
- –vpc-id vpc-0abcdef1234567890
- –service-name com.amazonaws.ap-northeast-2.s3
- –route-table-ids rtb-0privateroutableid
- –vpc-endpoint-type Gateway
- Private EC2에서 S3 접근 테스트: NAT Gateway 없이도 aws s3 mb s3://oooo-s3-gw-endpoint-test-01 성공
실습 7: EBS 볼륨 생성 및 연결
EBS 볼륨 생성 (동일 AZ 필수):
- aws ec2 create-volume –availability-zone ap-northeast-2a –size 1 –volume-type gp3 → gp3, 1GB 볼륨 생성
- aws ec2 attach-volume –volume-id vol-xxx –instance-id i-xxx –device /dev/sdf → EC2에 볼륨 연결
EC2 내부에서 파일시스템 생성 및 마운트:
- sudo mkfs -t ext4 /dev/sdf → ext4 파일시스템 생성
- sudo mkdir /appdir → 마운트 포인트 생성
- sudo mount /dev/sdf /appdir → 볼륨 마운트
- df -k → 마운트 확인
- sudo umount /appdir → 볼륨 분리 전 반드시 umount 먼저 실행
3. 실무/보안 관점 분석
| 분야 | 시나리오 |
|---|---|
| 스토리지 유형 선택 | S3: 비정형 데이터, 백업, 미디어, 로그, 정적 웹에 적합. HTTP로 어디서나 접근. EBS: OS, DB, 파일 시스템 등 빈번한 읽기/쓰기에 적합. EC2 직접 연결 필요. EFS: 여러 EC2에서 동시 접근 필요한 공유 파일 시스템에 적합 |
| 데이터 보호 전략 | S3는 버전 관리로 실수/랜섬웨어 대비, Cross-Region Replication으로 DR 구성. EBS는 정기 스냅샷 생성, DLM으로 자동화 |
| 접근 제어 모범 사례 | S3는 Block Public Access 기본 활성화, IAM과 버킷 정책 조합, VPC Endpoint로 프라이빗 접근. EBS는 보안 그룹으로 EC2 접근 제어, 볼륨 암호화 필수 |
| 비용 최적화 | S3는 스토리지 클래스 적절 선택, 수명 주기 정책으로 자동 전환. EBS는 적절한 볼륨 타입 선택(gp3 권장), 미사용 볼륨/스냅샷 정기 삭제 |
| 프라이빗 접근 구성 | Gateway Endpoint는 S3/DynamoDB 전용, 무료, 라우팅 테이블 기반. Interface Endpoint는 대부분 서비스 지원, 유료, ENI 기반 |
4. 배운 점 및 심화 방향
- 배운 점: S3는 HTTP 기반 객체 스토리지로 무제한 확장 가능, EBS는 EC2 직접 연결 블록 스토리지로 파일 시스템 구성. Block Public Access, 버킷 정책, ACL 등 다층적 접근 제어가 존재하며, 실수로 퍼블릭 노출 시 데이터 유출 사고 발생 가능. VPC Gateway Endpoint로 NAT Gateway 없이 프라이빗 서브넷에서 S3 접근하면 비용 절감과 보안 강화를 동시에 달성할 수 있음. EBS 볼륨은 특정 가용 영역에 종속되어 다른 AZ의 EC2에 연결 불가 — 스냅샷 활용한 AZ 간 데이터 이동이 DR 전략의 핵심.
- 심화 방향: S3 수명 주기 정책(30일 후 IA, 90일 후 Glacier, 365일 후 삭제), S3 이벤트 트리거(파일 업로드 시 Lambda 트리거하여 이미지 리사이징), EBS 스냅샷 자동화(DLM으로 스냅샷 생성/삭제 자동화), S3 보안 자동화(AWS Config로 퍼블릭 접근 감지, Lambda로 자동 수정).
5. Quick Reference
S3 vs EBS vs EFS 비교
| 특성 | S3 | EBS | EFS |
|---|---|---|---|
| 스토리지 유형 | 객체 | 블록 | 파일 |
| 접근 방식 | HTTP API | EC2 직접 연결 | NFS |
| 확장성 | 무제한 | 최대 64TiB | 자동 확장 |
| 가용 영역 | 리전 내 자동 복제 | 단일 AZ | 다중 AZ |
| 동시 접근 | 무제한 | 단일 EC2 | 수천 개 EC2 |
| 주요 용도 | 백업, 미디어, 로그 | OS, DB | 공유 파일 시스템 |
S3 스토리지 클래스
| 클래스 | 용도 | 검색 시간 | 최소 저장 기간 |
|---|---|---|---|
| Standard | 빈번한 접근 | 즉시 | 없음 |
| Intelligent-Tiering | 접근 패턴 불확실 | 즉시 | 없음 |
| Standard-IA | 비빈번 접근 | 즉시 | 30일 |
| One Zone-IA | 비빈번, 단일 AZ | 즉시 | 30일 |
| Glacier Instant | 아카이브, 즉시 접근 | 밀리초 | 90일 |
| Glacier Flexible | 아카이브 | 분~시간 | 90일 |
| Glacier Deep Archive | 장기 아카이브 | 12~48시간 | 180일 |
EBS 볼륨 타입
| 타입 | 유형 | 용도 | 최대 IOPS |
|---|---|---|---|
| gp3 | SSD | 범용 (기본 권장) | 16,000 |
| gp2 | SSD | 범용 (레거시) | 16,000 |
| io2 | SSD | 고성능 DB | 64,000 |
| st1 | HDD | 처리량 최적화 | 500 |
| sc1 | HDD | Cold 데이터 | 250 |
SOC 모니터링 대상 이벤트
| CloudTrail 이벤트 | 의미 | 위험도 |
|---|---|---|
| PutBucketPolicy | 버킷 정책 변경 | 높음 |
| PutBucketAcl | ACL 변경 | 높음 |
| DeleteBucketEncryption | 암호화 비활성화 | 높음 |
| PutBucketPublicAccessBlock | 퍼블릭 접근 설정 변경 | 높음 |
| ModifySnapshotAttribute | EBS 스냅샷 공유 범위 변경 | 중간 |
| PutBucketVersioning | 버전 관리 설정 변경 | 중간 |