S3 및 CloudFront를 사용하여 이미지 핫 링크 방지

다니엘

각 페이지에 많은 이미지 (수십 또는 수백 개)가있는 많은 페이지가있는 웹 사이트가 있습니다.

이미지 핫 링크를 피하려고 노력하고 있지만 AWS 비용을 너무 많이 늘리지 않습니다.

지금까지 3 가지 옵션을 찾았습니다.

옵션 1 : WAF를 사용하여 참조 자 헤더를 기반으로 차단할 규칙을 만들어 핫 링크를 방지합니다.

https://aws.amazon.com/pt/blogs/security/how-to-prevent-hotlinking-by-using-aws-waf-amazon-cloudfront-and-referer-checking/

이 솔루션의 문제는 각 페이지에로드 된 이미지가 많은 경우 비용이 너무 많이 증가한다는 것입니다. 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

.htaccess 및 PHP로 이미지 해상도로 핫 링크 방지?

분류에서Dev

AWS CDK를 사용하여 S3 Origin 및 사용자 지정 오리진 (ELB)으로 CloudFront 배포 구성

분류에서Dev

PHP SDK를 사용하여 Amazon S3에서 크기 조정 된 이미지 업로드

분류에서Dev

Node.js를 사용하여 Amazon S3에서 즉시 이미지 크기 조정

분류에서Dev

Python boto3를 사용하여 S3 및 Cloudfront로 정적 사이트 배포

분류에서Dev

nmp papercut을 사용하여 s3 버킷에서 파일 및 이미지를 연결 해제 / 제거하는 방법은 무엇입니까?

분류에서Dev

특정 웹 사이트에 대해서만 핫 링크 방지

분류에서Dev

PHP를 사용하여 mysql db에 blob으로 저장된 이미지 표시 (링크 및 새 창을 통해)

분류에서Dev

Selenium WebDriver (Java)를 사용하여 이미지 / 링크를 클릭하는 방법

분류에서Dev

Amazon Cloudfront를 사용하여 S3를 사용하지 않고 온 디맨드 스트리밍

분류에서Dev

CSS를 사용하여 링크 내부에 이미지 배치

분류에서Dev

Swift3를 사용하여 Amazon S3에 이미지 업로드

분류에서Dev

PHP를 사용하여 JavaScript 및 Ajax 기반 웹 페이지 데이터를 크롤링하는 방법

분류에서Dev

PHP를 사용하여 JavaScript 및 Ajax 기반 웹 페이지 데이터를 크롤링하는 방법

분류에서Dev

ajax를 사용하여 img 태그에 이미지 링크를 넣는 방법

분류에서Dev

PHP 및 gd를 사용하여 이미지 크기 조정 및 표시

분류에서Dev

htaccess는 핫 링크 이미지 특정 파일 이름 구조를 방지합니다.

분류에서Dev

s3 연결 및 s3 후크를 사용하여 Airflow에 boto3 s3 클라이언트 생성

분류에서Dev

다른 페이지의 앵커 링크 및 JQuery를 사용하여 scroolTo 앵커

분류에서Dev

IIS는 HTTP와 HTTPS 모두에서 이미지 핫 링크를 방지합니다.

분류에서Dev

Express 및 NodeJS를 사용하여 javascript 파일을 html 페이지에 링크하는 방법

분류에서Dev

Swift 3 및 Amazon SDK를 사용하여 Amazon S3에 이미지 업로드를위한 업로드 진행률 표시

분류에서Dev

Laravel 5-중재 이미지 패키지를 사용하여 이미지 업로드 및 크기 조정

분류에서Dev

WWW :: Mechanize 및 Perl을 사용하여 웹 페이지에서 링크를 가져 오는 방법

분류에서Dev

Node를 사용하여 S3에 이미지를 업로드하는 방법

분류에서Dev

스크래피를 사용하여 Amazon-s3 이미지를 다운로드하는 방법

분류에서Dev

getUserMedia 및 canvas를 사용하여 데스크톱 이미지 캡처 시도

분류에서Dev

ImageJ를 사용하여 이미지 크기 조정 및 자르기

분류에서Dev

Flask를 사용하여 링크를 클릭하면 이미지로 이동

Related 관련 기사

  1. 1

    .htaccess 및 PHP로 이미지 해상도로 핫 링크 방지?

  2. 2

    AWS CDK를 사용하여 S3 Origin 및 사용자 지정 오리진 (ELB)으로 CloudFront 배포 구성

  3. 3

    PHP SDK를 사용하여 Amazon S3에서 크기 조정 된 이미지 업로드

  4. 4

    Node.js를 사용하여 Amazon S3에서 즉시 이미지 크기 조정

  5. 5

    Python boto3를 사용하여 S3 및 Cloudfront로 정적 사이트 배포

  6. 6

    nmp papercut을 사용하여 s3 버킷에서 파일 및 이미지를 연결 해제 / 제거하는 방법은 무엇입니까?

  7. 7

    특정 웹 사이트에 대해서만 핫 링크 방지

  8. 8

    PHP를 사용하여 mysql db에 blob으로 저장된 이미지 표시 (링크 및 새 창을 통해)

  9. 9

    Selenium WebDriver (Java)를 사용하여 이미지 / 링크를 클릭하는 방법

  10. 10

    Amazon Cloudfront를 사용하여 S3를 사용하지 않고 온 디맨드 스트리밍

  11. 11

    CSS를 사용하여 링크 내부에 이미지 배치

  12. 12

    Swift3를 사용하여 Amazon S3에 이미지 업로드

  13. 13

    PHP를 사용하여 JavaScript 및 Ajax 기반 웹 페이지 데이터를 크롤링하는 방법

  14. 14

    PHP를 사용하여 JavaScript 및 Ajax 기반 웹 페이지 데이터를 크롤링하는 방법

  15. 15

    ajax를 사용하여 img 태그에 이미지 링크를 넣는 방법

  16. 16

    PHP 및 gd를 사용하여 이미지 크기 조정 및 표시

  17. 17

    htaccess는 핫 링크 이미지 특정 파일 이름 구조를 방지합니다.

  18. 18

    s3 연결 및 s3 후크를 사용하여 Airflow에 boto3 s3 클라이언트 생성

  19. 19

    다른 페이지의 앵커 링크 및 JQuery를 사용하여 scroolTo 앵커

  20. 20

    IIS는 HTTP와 HTTPS 모두에서 이미지 핫 링크를 방지합니다.

  21. 21

    Express 및 NodeJS를 사용하여 javascript 파일을 html 페이지에 링크하는 방법

  22. 22

    Swift 3 및 Amazon SDK를 사용하여 Amazon S3에 이미지 업로드를위한 업로드 진행률 표시

  23. 23

    Laravel 5-중재 이미지 패키지를 사용하여 이미지 업로드 및 크기 조정

  24. 24

    WWW :: Mechanize 및 Perl을 사용하여 웹 페이지에서 링크를 가져 오는 방법

  25. 25

    Node를 사용하여 S3에 이미지를 업로드하는 방법

  26. 26

    스크래피를 사용하여 Amazon-s3 이미지를 다운로드하는 방법

  27. 27

    getUserMedia 및 canvas를 사용하여 데스크톱 이미지 캡처 시도

  28. 28

    ImageJ를 사용하여 이미지 크기 조정 및 자르기

  29. 29

    Flask를 사용하여 링크를 클릭하면 이미지로 이동

뜨겁다태그

보관