Cloudfront - OAI를 통한 S3 URL 공개

Cloudfront와 OAI를 통해 S3 객체 URL을 버킷명을 공개하지 않고 외부로 공유할 수 있는 방법을 살펴봅니다.

들어가며

S3에 저장된 객체를 퍼블릭으로 공개를 할 경우, 자신의 S3 버킷 구조가 그대로 노출되는 문제와 함께, 보안이 우려되는 경우가 있다.

이 경우 Cloudfront와 원본 액세스 ID, 즉 OAI를 사용해 S3 버킷 구조를 숨기고, 객체를 외부에 공개할 수 있다.

객체를 공개할 S3 버킷 생성

외부 사용자들에게 공개할 객체를 담는 버킷을 생성한다. 나같은 경우에는 링크드인에 수료증 링크를 걸기 위해 kade-certificate라는 버킷을 생성하고 그 안에 수료증 파일들을 저장했다.

버킷 내부 구조

콘솔을 사용하여 OAI 생성 및 Cloudfront 배포에 추가

Cloudfront 페이지에서 배포 생성을 클릭하고, 생성한 S3 버킷을 원본 도메인으로 선택한다.

원본 도메인 선택

이후 하단의 S3 버킷 액세스에서 Legacy access identities 항목을 선택하고, 새 OAI를 생성한다.

생성한 OAI를 선택한다.

그리고 버킷 정책 항목에서 예, 버킷 정책 업데이트를 선택하면 자동으로 S3 정책을 수정해준다.

OAI 생성 후 선택 화면

GET 요청만 수락하므로 하단의 모든 항목들의 수정 없이 배포 생성 버튼을 클릭한다.

생성된 Cloudfront url로 접근

배포가 생성되고 나면 다음 화면과 같다.

Cloudfront 배포 생성 후 화면

도메인 이름에 접근 가능한 URL이 생성된다. (d3sdxwnh25t6pc.cloudfront.net 처럼)

이 URL 뒤에 버킷내에 저장된 객체명을 붙여 접근하면 다음과 같이 외부에서 접근이 가능함을 알 수 있다.

https://d3sdxwnh25t6pc.cloudfront.net/2022_udacity_aws_ml.pdf 로 접근했을 때 정상적으로 수료증이 출력된다.

이처럼 Cloudfront와 OAI를 사용하여 사용자의 버킷 URL은 숨긴채, 외부에서 접근을 허용할 수 있다.

Reference

Hugo로 만듦
JimmyStack 테마 사용 중