📄 2025.12.08 (Day 31) - AWS 스토리지 서비스: S3, EBS, 데이터 전송


1. 핵심 개념 정리

#핵심 개념설명실무/보안 관점
1Amazon S3AWS의 객체 스토리지 서비스. 버킷이라는 컨테이너에 객체(파일+메타데이터)를 저장하며 무제한 확장이 가능. 99.999999999%(11 9’s)의 내구성 제공데이터 레이크, 백업, 정적 웹 호스팅의 핵심. Block Public Access 기본 활성화 필수. 민감 데이터는 서버측 암호화(SSE-S3/KMS) 적용
2S3 버킷 정책과 ACL버킷 정책은 JSON 형식의 리소스 기반 정책으로 교차 계정 접근 허용 가능. ACL은 객체/버킷 단위 접근 제어 목록최소 권한 원칙 적용 필수. Principal이 와일드카드인 정책은 데이터 유출 위험. CloudTrail에서 PutBucketPolicy 이벤트 모니터링
3S3 버전 관리동일한 키에 대해 여러 버전의 객체를 유지하는 기능. 실수로 삭제/덮어써도 이전 버전으로 복구 가능랜섬웨어 공격 대응에 필수. Delete 작업도 Delete Marker만 추가되어 실제 데이터 보존. MFA Delete로 추가 보안
4S3 암호화SSE-S3(S3 관리형 키), SSE-KMS(KMS 키, 감사 추적), SSE-C(고객 제공 키), 클라이언트 측 암호화 등 다양한 옵션규정 준수(GDPR, HIPAA)를 위해 필수. SSE-KMS 사용 시 CloudTrail에서 키 사용 로그 추적 가능
5S3 스토리지 클래스Standard(빈번한 접근), IA(비빈번 접근), Glacier(아카이브), Intelligent-Tiering(자동 계층화) 등 용도별 저장 계층비용 최적화 핵심. 수명 주기 정책으로 오래된 데이터를 저렴한 계층으로 자동 전환
6S3 정적 웹사이트 호스팅S3 버킷을 웹 서버로 사용하여 HTML, CSS, JS 등 정적 콘텐츠 호스팅. 서버리스 웹사이트 구축 가능CloudFront와 결합하면 전 세계 배포 가능. Route 53으로 커스텀 도메인, ACM으로 HTTPS 적용
7Amazon EBSEC2 인스턴스에 연결하여 사용하는 블록 레벨 스토리지. 파일 시스템을 생성하여 OS, DB 저장. 단일 AZ 종속데이터 영속성 및 성능에 핵심. EBS 볼륨 암호화로 미사용 데이터 보호. Delete on Termination 설정 확인 필요
8VPC 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 비교

특성S3EBSEFS
스토리지 유형객체블록파일
접근 방식HTTP APIEC2 직접 연결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
gp3SSD범용 (기본 권장)16,000
gp2SSD범용 (레거시)16,000
io2SSD고성능 DB64,000
st1HDD처리량 최적화500
sc1HDDCold 데이터250

SOC 모니터링 대상 이벤트

CloudTrail 이벤트의미위험도
PutBucketPolicy버킷 정책 변경높음
PutBucketAclACL 변경높음
DeleteBucketEncryption암호화 비활성화높음
PutBucketPublicAccessBlock퍼블릭 접근 설정 변경높음
ModifySnapshotAttributeEBS 스냅샷 공유 범위 변경중간
PutBucketVersioning버전 관리 설정 변경중간