📄 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 \
--bucket oooo-labbucket-1234 \
--public-access-block-configuration \
"BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false"
# 객체에 퍼블릭 읽기 ACL 부여
aws s3api put-object-acl \
--bucket oooo-labbucket-1234 \
--key myfile.txt \
--acl public-read
# 실습 후 반드시 Block Public Access 다시 활성화
aws s3api put-public-access-block \
--bucket oooo-labbucket-1234 \
--public-access-block-configuration \
"BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
실습 14: S3 정적 웹사이트 호스팅#
# 정적 웹사이트 호스팅 활성화
aws s3 website s3://oooo-labbucket-1234 \
--index-document index.html \
--error-document error.html
# 버킷 정책 설정 (퍼블릭 읽기 허용)
cat << 'EOF' > bucket-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::oooo-labbucket-1234/*"
}
]
}
EOF
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 접근 테스트 (User Data)
#!/bin/bash
echo "Test file" > /tmp/s3test.txt
aws s3 mb s3://oooo-s3-gw-endpoint-test-01
aws s3 cp /tmp/s3test.txt s3://oooo-s3-gw-endpoint-test-01/
실습 7: EBS 볼륨 생성 및 연결#
# EBS 볼륨 생성 (gp3, 1GB, 동일 AZ 필수)
aws ec2 create-volume \
--availability-zone ap-northeast-2a \
--size 1 \
--volume-type gp3
# EC2 인스턴스에 볼륨 연결
aws ec2 attach-volume \
--volume-id vol-0volumeid \
--instance-id i-0instanceid \
--device /dev/sdf
# EC2 내부에서 파일시스템 생성 및 마운트
sudo mkfs -t ext4 /dev/sdf
sudo mkdir /appdir
sudo mount /dev/sdf /appdir
df -k
# 볼륨 분리 전 umount 필수
sudo umount /appdir
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 | 버전 관리 설정 변경 | 중간 |