CloudFront OAI(origin access identity)를 통해 S3 버킷 콘텐츠에 대한 액세스

S3 버킷 콘텐츠에 대한 직접적인 액세스 제한하고, CloudFront를 통해서만 액세스가 가능하도록 OAI(origin access identity)를 설정하는 방법에 대해서 정리해 봤습니다.
2022.01.29

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 S3 버킷 콘텐츠에 대한 직접적인 액세스 제한하고, CloudFront를 통해서만 액세스가 가능하도록 OAI(origin access identity)를 설정하는 방법에 대해서 정리해 봤습니다.

S3 버킷 생성

먼저 CloudFront를 생성하기 전에, 버킷을 하나 만들어줍니다.

외부에서 접근이 불가능 하도록「모든 퍼블릭 액세스 차단」을 체크한 상태로 버킷을 생성합니다.

「cloudfront-oai-test-1」버킷에 이미지를 하나 업로드 하고 S3에서 직접 액세스 해 보면 모든 퍼블릭 액세스가 차단이 되어 있기 때문에「AccessDenied」이라는 에러가 발생합니다.

CloudFront OAI 설정

이제 S3 버킷에서 직접 액세스 하는 것이 불가능하기 때문에 CloudFront를 통해서 액세스 해 보도록 하겠습니다.

Origin Access ID 생성

먼저 CloudFront를 생성하기 전에, Origin Access ID를 생성합니다.

적절하게 이름을 입력해 주고, 생성 버튼을 클릭합니다.

CloudFront 배포 생성

이제 CloudFront 배포 카테고리로 들어와서「배포 생성」버튼을 클릭합니다.

  • 원본 도메인의 경우 조금 전 생성한 S3 버킷인「cloudfront-oai-test-1」을 선택합니다.
  • 이름의 경우 자동 완성으로 생성 되지만, 적절하게 바꿔줍니다.
  • 그리고 S3 버킷 액세스를 OAI 사용으로 변경합니다.
  • 원본 액세스 ID의 경우 조금 전 생성한「cloudfront-test-origin」을 선택하고 버킷 정책 업데이트를 실시합니다.

이제 "배포 도메인 이름/이미지파일이름" 으로 접속해 보면

CloudFront를 통해 S3 버킷에 업로드 한 이미지 파일에 정상적으로 접근가능 한 것을 확인할 수 있습니다.

마지막으로 S3 버킷 정책을 확인해 보면 조금 전「버킷 정책 업데이트를 실시」를 선택했기 때문에 자동으로 정책이 추가된 것을 볼 수 있습니다.

CNAME과 SSL 설정

이번에는 Route53에 도메인을 등록하고 해당 도메인으로 접속할 수 있도록 CNAME을 수정해보고자 합니다. 먼저 도메인 발급은 아래 블로그를 참고해 주세요.

CloudFront에서 사용자 정의 SSL 인증서를 추가합니다.

이어서 CNAME을 입력합니다. Route53에서 등록한 도메인 형식에 맞춰서 입력해야 합니다. 예를 들어 test.route53domain.com 와 같은 형태로 입력해야 합니다.

마지막으로 Route53에서 레코드를 생성합니다. 하위 도메인의 경우 CloudFront의 CNAME을 적어주고, 값/트래픽 라우팅 대상을 CloudFront로 선택하고, 아래 CloudFront의 배포 도메인 이름을 적거나 선택하고 레코드 생성을 끝마칩니다.

다시 변경된 도메인으로 접속해 보면, 문제 없이 S3 버킷에 액세스할 수 있는 것을 볼 수 있습니다.

참고