AWS S3 + CloudFront
AWS CloudFront와 S3 연동 방법 알아보기
[Redmine on AWS] S3/CloudFront 연동
구조
- S3는 웹 스토리지이고 CloudFront는 글로벌 컨텐츠 전송 네트워크 (CDN)
- S3는 높은 신뢰성과 안정성을 제공하고 CloudFront는 전세계 어디서나 빠른 속도로 접속 할 수 있도록 해줌
- 두 서비스를 함께 사용하는 것은 여러가지 측면에서 환상의 조합으로 다양한 장점을 얻을 수 있음
- Private Content 전달 방법도 S3와 CloudFront의 역할을 분리해서 원하는 목표를 달성하고 있음
- 데이터는 S3에 저장하고 그 데이터에 접속하는 권한은 CloudFront에게 할당하며 CloudFront는 URL 또는 쿠키에 달려있는 signature를 확인 후 데이터의 접근 여부를 결정하는 방식
Tip! 추가 내용
- AWS S3를 Origin으로 사용하는 CloudFront 배포를 만드는 경우가 있음
- 예를 들면 S3에 저장된 파일들을 CDN으로 배포하려는 경우
- S3에서 정적 웹호스팅 기능을 사용하면서 SSL을 적용하기 위해서 CloudFront를 이용하는 경우
- 위의 두 경우 모두 S3 Bucket에 저장한 파일을 Public Internet에 제공하기 위한 것이기 때문에 S3 Bucket의 정책을 퍼블릭하게 설정하게 됨
- 하지만 CloudFront를 이용해서 S3 Bucket의 파일들을 Public Internet에 공개한다면 Bucket의 정책을 퍼블릭하게 설정하지 않고 CloudFront 배포에서만 접근하도록 설정 가능
- 방법은 아주 간단
- S3 Bucket 정책의 Pricipal에 허용하려는 CloudFront 배포의 Origin Access Identity (OAI) 를 명세하는 것
작업 내용
- S3에 컨텐츠가 있어야 하고 S3에서 컨텐츠 접근 권한을 모두 제거
- S3는 CloudFront에서 Origin으로 표시되고 Origin 탭에서 설정 변경이 가능한데, 여기에서
Restrict Bucket Access
를 Yes
로 선택해서 접근을 제한
- S3에서도 접근 권한을 설정해주고 CloudFront에서도 해줘야 함
Your Identities
항목이 중요한데, 이 항목은 생성한 Cloudfront Distribution이 연결된 S3에 접근하는 계정에 대한 설정
- S3의 Bucket 설정에서도 반드시 권한을 추가해 줘야 Access Denied 에러가 나지 않음
- 권한을 추가할 때는 Canonical User ID 가 필요한데 Origin Access Identity 메뉴로 진입하면 계정별 ID를 확인 할 수 있음
- 버킷 정책 업데이트 부분은 자동 업데이트로 설정해두는 것을 권장