들어가며
S3에 저장된 객체를 퍼블릭으로 공개를 할 경우, 자신의 S3 버킷 구조가 그대로 노출되는 문제와 함께, 보안이 우려되는 경우가 있다.
이 경우 Cloudfront와 원본 액세스 ID, 즉 OAI를 사용해 S3 버킷 구조를 숨기고, 객체를 외부에 공개할 수 있다.
객체를 공개할 S3 버킷 생성
외부 사용자들에게 공개할 객체를 담는 버킷을 생성한다. 나같은 경우에는 링크드인에 수료증 링크를 걸기 위해 kade-certificate
라는 버킷을 생성하고 그 안에 수료증 파일들을 저장했다.
콘솔을 사용하여 OAI 생성 및 Cloudfront 배포에 추가
Cloudfront 페이지에서 배포 생성을 클릭하고, 생성한 S3 버킷을 원본 도메인으로 선택한다.
이후 하단의 S3 버킷 액세스에서 Legacy access identities 항목을 선택하고, 새 OAI를 생성한다.
생성한 OAI를 선택한다.
그리고 버킷 정책 항목에서 예, 버킷 정책 업데이트를 선택하면 자동으로 S3 정책을 수정해준다.
GET 요청만 수락하므로 하단의 모든 항목들의 수정 없이 배포 생성 버튼을 클릭한다.
생성된 Cloudfront url로 접근
배포가 생성되고 나면 다음 화면과 같다.
도메인 이름에 접근 가능한 URL이 생성된다. (d3sdxwnh25t6pc.cloudfront.net 처럼)
이 URL 뒤에 버킷내에 저장된 객체명을 붙여 접근하면 다음과 같이 외부에서 접근이 가능함을 알 수 있다.
이처럼 Cloudfront와 OAI를 사용하여 사용자의 버킷 URL은 숨긴채, 외부에서 접근을 허용할 수 있다.
Reference
- 원본 액세스 ID(OAI)를 사용하여 Amazon S3 콘텐츠에 대한 액세스 제한: https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html