각 페이지에 많은 이미지 (수십 또는 수백 개)가있는 많은 페이지가있는 웹 사이트가 있습니다.
이미지 핫 링크를 피하려고 노력하고 있지만 AWS 비용을 너무 많이 늘리지 않습니다.
지금까지 3 가지 옵션을 찾았습니다.
옵션 1 : WAF를 사용하여 참조 자 헤더를 기반으로 차단할 규칙을 만들어 핫 링크를 방지합니다.
이 솔루션의 문제는 각 페이지에로드 된 이미지가 많은 경우 비용이 너무 많이 증가한다는 것입니다. S3 및 CloudFront를 지불하는 것 이상으로 비용이 증가하기 때문에 모든 이미지 요청 에 대해 WAF도 지불해야합니다 (이미지가 100 개있는 경우 예를 들어 각 페이지에서).
옵션 2 : Lambda @ Edge 뷰어 요청 트리거를 실행하도록 CloudFront를 구성하여 각 요청이 프런트 도어에 들어올 때마다 검사하고 리퍼러 헤더를 기반으로 요청을 차단합니다.
https://stackoverflow.com/a/46044606/2444386
위의 옵션과 유사합니다. 문제는 이미지가 이미 CloudFront 캐시에 있더라도 모든 요청에 오버 헤드를 추가한다는 것 입니다. Lambda @ Edge는 항상 호출되며 웹 사이트의 각 페이지에 많은 이미지가있는 경우 비용이 너무 많이 증가합니다.
옵션 3 : 리퍼러 헤더를 기반으로 요청을 차단하도록 S3 버킷 정책을 구성하고 CloudFront에서 리퍼러 헤더를 화이트리스트에 추가합니다.
지금까지는 이미지가 이미 CloudFront 캐시에있는 경우 오버 헤드가없고 WAF 나 WAF를 지불 할 필요가 없기 때문에 비용이 가장 저렴하기 때문에 지금까지 이것이 비용 이점이 가장 좋은 옵션 인 것 같습니다. Lambda @ Edge.
문제는 들어오는 요청의 Referer 헤더 가 이미 캐시 된 요청의 헤더와 정확히 일치하지 않는 한 CloudFront가 캐시에서 응답을 제공하지 않기 때문에 캐시 적중률이 훨씬 더 작다는 것 입니다.
이 문제를 피하기 위해 "원본"요청 헤더를 사용하려고했지만 브라우저가 이미지 GET 요청에 대해이 헤더를 보내지 않는 것 같습니다.
더 나은 옵션이 있습니까?
결국 옵션 3 ( S3 버킷 정책 )을 사용하고 추가로 CloudFlare 의 무료 요금제를 사용했습니다 . CloudFlare는 무료 요금제에서도 "Scrape Shield"에 "Hotlink Protection"이 있습니다.
핫 링크 방지를위한 S3 버킷 정책 :
{
"Version": "2012-10-17",
"Id": "http referer policy",
"Statement": [
{
"Sid": "Allow access only from my website",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::resources.mywebsite.com/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"https://dev.mywebsite.com:8080/*",
"https://staging.mywebsite.com/*",
"https://www.mywebsite.com/*"
]
}
}
}
]
}
CloudFront에서 Referer 헤더를 허용 목록에 추가했습니다.
그리고 CloudFlare에서 "Scrape Shield"메뉴의 "Hotlink Protection"옵션을 활성화 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다