이번 장은 S3를 깊이 다룬다.
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 같은 정적 파일을 웹사이트로 서비스할 수 있다.
서버 없이 웹사이트를 띄우는 가장 싼 방법이다.
절차는 다음과 같다.
- 버킷을 만들고 정적 웹 호스팅을 켠다.
index.html을 인덱스 문서로 지정한다.- 버킷 정책으로 객체를 공개한다.
aws s3 sync ./website s3://my-web-bucket --acl public-read
여기에 CloudFront(CDN)를 앞에 두면 더 좋다.
- 전 세계 엣지 서버에 캐싱해 빠르다.
- HTTPS를 붙일 수 있다.
- S3를 직접 공개하지 않고 CloudFront로만 접근하게 해 보안이 낫다.
정리
- S3 버킷은 기본 비공개다. 버킷 정책으로 세밀하게 연다.
- 스토리지 클래스와 수명주기로 비용을 최적화한다.
- 버전 관리로 실수·손상에서 복구한다.
- 정적 사이트는 S3 + CloudFront 조합이 정석이다.
다음 장에서는 이 모든 것이 도는 네트워크, VPC를 다룬다.
댓글 0
댓글은 운영자만 작성할 수 있어요.