S3 Bucket Referer 제한관련 문제

KIM YONG GU·2024년 1월 2일
0

IT 인프라

목록 보기
5/11
post-thumbnail

당시의 문제점

접근 Referer을 설정하기 위해 S3에서 정책 수정을 하였으나 Cloud Front의 Behaviors(동작) 설정에서 SimpleCORS를 적용하면 Referer이 제대로 전달되지 않아. 403 에러가 발생하는 것을 확인. 이를 위해서는 Referer 제한자를 잘 전달시켜줄 필요가 있었다.

즉 aws의 엔드포인트 주소를 Referer 사이트 경로에서 접속하면 제대로 접근이 가능했으나 Clound Front의 도메인으로 접속하면 계속 403 에러 문제가 발생하는 상황이었음

CloudFront에서 SimpleCORS를 적용하면 S3 버킷에서 설정한 Referer 헤더가 전달되는가?

CloudFront에서 Origin에 대한 요청 시에는 보통 Referer 헤더가 전달되지 않습니다. 이는 기본 동작이며, CloudFront는 Origin에 전달되는 헤더를 변경하지 않습니다.

Referer 헤더를 Origin으로 전달하고 싶은 경우에는 다음과 같은 방법을 고려해볼 수 있습니다:

Lambda@Edge 사용: Lambda@Edge를 사용하여 CloudFront 요청 이벤트에 대한 Lambda 함수를 생성하고, 해당 함수 내에서 Referer 헤더를 원하는대로 조작한 후 요청을 전달하는 방법이 있습니다.

CloudFront 헤더 구성: CloudFront 콘솔에서 특정 Distribution의 "Behaviors" 설정에서 "Forward Headers" 부분을 확인할 수 있습니다. 여기서 Referer 헤더를 "Whitelist"에 추가하여 전달하도록 설정할 수 있습니다. 이 설정을 변경하면 CloudFront에서 Origin으로 해당 헤더를 전달합니다.

Origin에 직접 Referer 추가: S3 버킷이나 다른 Origin에 직접 Referer를 추가하여 Origin에서 처리하도록 하는 방법도 있습니다. 이 경우 CloudFront는 해당 헤더를 변경하지 않습니다.

이 중에서 가장 적합한 방법은 상황에 따라 다를 수 있습니다. Lambda@Edge를 사용하는 경우에는 더욱 자세한 로직을 적용할 수 있습니다. 하지만 CloudFront 설정에서 간단하게 헤더를 전달하도록 설정하는 것이 더 편리할 수 있습니다.

위와 같이 설정하여 해결하였음

현재 bright.json -> tile.json -> *.tiles.domain으로 이동하는 경로를 따르고 있는데 aws:Referer만 사용하여 F12 관리자모드에서 확인할 수 있는 bright.json의 경로를 통제하였음. 이 경우 유저는 brght.json의 내용물을 알 수 없게 되어 어느정도 보안처리는 가능함. (즉, 허용된 도메인이 아닌이상 제3자는 맵타일 서버를 사용할 수 없음) 그러나 aws:Referer은 본질적으로 탈취의 위험이 있음으로 향후 실제 AWS EC2 등에서 웹서비스를 실시할 때는 AWS WAF를 사용하여 IP기반의 권한을 부여하는 방안을 모색하여야 함. 아래는 우아한 기술 블로그에 작성된 관련내용임.

우아한 기술 블로그 (사례별로 알아본 안전한 S3 사용 가이드)

profile
Engineer, Look Beyond the Code.

0개의 댓글