Question

S3 버킷에 있는 파일을 Signed URL을 사용해서 다운로드 중인데 S3의 endpoint가 노출되는 것을 원치 않을 때 어떻게 하면 좋을까요?


Answer


S3에 데이터 접근할때 URL 노출을 방지하기 위해 CloudFront에 OAI 방식을 연동하여 사용합니다.

[CloudFront OAI를 사용하는 이유]

"CloudFront가 S3에 저장된 Private 객체에 액세스 할 수 있도록 하는 특별한 식별자"

S3 엔드포인트 주소는 버킷명을 포함하고 있어, 권한을 갖지 않은 유저가 버킷 내 다른 Object에도 접근할 수 있는 위험성이 존재합니다. 

따라서 오리진 리소스에 대한 직접 액세스를 차단하고 CloudFront를 통해서만 웹사이트에 접근하여 오리진 리소스가 인터넷에서 직접 노출되는 것을 방지해야할 필요가 있는데, 이때 사용하는 것이 OAI입니다.  

[CloudFront OAI 기능을 활용하여 S3 버킷의 콘텐츠에 대한 액세스를 제한하는 방법]

  1. Origin 선택

  2. S3 버킷 액세스 허용 -> 예, OAI 사용

  3. 새 OAI 생성

OAI는 Origin으로 설정된 S3 버킷에 접근할 때 사용하게 되는 식별자이며,  이 식별자를 통해 Origin에 접근을 허용할지 결정하게 됩니다.

  1. 버킷 정책 업데이트 -> 예, 버킷 정책 업데이트 

‘예 버킷 정책에 업데이트'를 선택하시면 해당 버킷에 접근할 수 있는 식별자가 S3 권한에 자동으로 추가 됩니다.

위와 같이 설정 한 후 해당 Cloudfront에서 Signed URL을 설정하시게 되면, URL에는 Cloudfront의 endpoint만 기재되지만 실질적으로 도달하는 목적지는 Origin, 즉 S3 버킷으로 도달하게 됩니다.


[참고 문서]

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html