AWS

AWS 클라우드 따라잡기 5장

S3 심화 — 정책, 스토리지 클래스, 수명주기, 정적 웹 호스팅

이번 장은 S3를 깊이 다룬다.

AWS 5장 개념도

4장에서 S3의 기본을 봤다면, 이번엔 실무에서 꼭 쓰는 기능들을 배운다.

이 장의 목표는 다음과 같다.

  • 버킷 정책과 접근 제어를 이해한다.
  • 스토리지 클래스로 비용을 최적화한다.
  • 수명주기 규칙과 버전 관리를 쓴다.
  • S3로 정적 웹사이트를 호스팅한다.

1. S3 접근 제어

S3 버킷은 기본적으로 비공개다.

접근을 열어 주는 방법은 여러 가지가 있다.

  • 버킷 정책(Bucket Policy): 버킷 전체에 적용하는 JSON 정책. 가장 많이 쓴다.
  • IAM 정책: 특정 사용자/역할에 S3 권한을 준다.
  • ACL: 오래된 방식으로, 지금은 잘 쓰지 않는다.

예를 들어 특정 버킷의 객체를 누구나 읽게 하는 버킷 정책은 다음과 같다.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::my-web-bucket/*"
  }]
}

Principal: "*"는 "누구나"라는 뜻이다. 공개 웹사이트에만 신중히 쓴다.

실수로 버킷을 공개하는 사고가 많아, AWS는 퍼블릭 액세스 차단(Block Public Access)을 기본으로 켜 둔다.

정말 공개가 필요할 때만 이 차단을 풀어야 한다.

2. 스토리지 클래스로 비용 줄이기

모든 데이터를 같은 등급에 두면 비용이 낭비된다.

자주 쓰는 데이터와 거의 안 쓰는 데이터를 나눠 저장하면 싸진다.

클래스 용도 특징
Standard 자주 접근 기본, 가장 비쌈
Standard-IA 가끔 접근 저장 싸고 꺼낼 때 비용
One Zone-IA 가끔 접근, 재생성 가능 AZ 1개, 더 쌈
Glacier Instant 아카이브, 즉시 조회 매우 쌈
Glacier Deep Archive 장기 보관 가장 쌈, 복원 몇 시간

접근 패턴을 모르겠다면 Intelligent-Tiering을 쓴다.

AWS가 접근 빈도를 보고 자동으로 등급을 옮겨 준다.

3. 수명주기 규칙

수명주기(Lifecycle) 규칙은 객체를 시간에 따라 자동으로 옮기거나 지운다.

예를 들어 로그 파일에 이런 규칙을 건다.

  • 30일 지나면 Standard-IA로 옮긴다.
  • 90일 지나면 Glacier로 옮긴다.
  • 365일 지나면 삭제한다.

이렇게 하면 사람이 손대지 않아도 비용이 자동으로 최적화된다.

4. 버전 관리

버전 관리(Versioning)를 켜면 객체를 덮어쓰거나 지워도 이전 버전이 남는다.

실수로 파일을 지웠을 때 복구할 수 있다.

랜섬웨어나 실수로 인한 데이터 손실을 막는 중요한 안전장치다.

단, 버전이 쌓이면 저장 비용이 늘어나니 수명주기 규칙과 함께 쓴다.

5. 정적 웹 호스팅

S3는 HTML, CSS, JS 같은 정적 파일을 웹사이트로 서비스할 수 있다.

서버 없이 웹사이트를 띄우는 가장 싼 방법이다.

절차는 다음과 같다.

  1. 버킷을 만들고 정적 웹 호스팅을 켠다.
  2. index.html을 인덱스 문서로 지정한다.
  3. 버킷 정책으로 객체를 공개한다.
aws s3 sync ./website s3://my-web-bucket --acl public-read

여기에 CloudFront(CDN)를 앞에 두면 더 좋다.

  • 전 세계 엣지 서버에 캐싱해 빠르다.
  • HTTPS를 붙일 수 있다.
  • S3를 직접 공개하지 않고 CloudFront로만 접근하게 해 보안이 낫다.

정리

  • S3 버킷은 기본 비공개다. 버킷 정책으로 세밀하게 연다.
  • 스토리지 클래스와 수명주기로 비용을 최적화한다.
  • 버전 관리로 실수·손상에서 복구한다.
  • 정적 사이트는 S3 + CloudFront 조합이 정석이다.

다음 장에서는 이 모든 것이 도는 네트워크, VPC를 다룬다.

댓글 0