STUDY/AWS

AWS | S3 HTTP Referer + CloudFront (S3 핫링크 방지)

개미606 2021. 2. 1. 10:51
S3에 올라간 객체를 특정 도메인에서만 접근할 수 있도록 설정한다.

 

버킷 > 권한
버킷 정책 편집

 

✔️Resource의 [bucket-name]부분에 꼭 해당 버킷 명으로 변경할 것

✔️Referer를 하나만 적을 경우 []배열 지워줄 것

✔️Effect 허용에 대한 설정이므로 Allow

✔️Principal은 정책을 적용할 대상. 모두 공개로 설정(*)

✔️파일을 보여줄 때의 상황이므로 Action은 GetObject가 됨

✔️Condition은 조건절을 설정하는 곳. StringLike는 문자열을 포함한다는 뜻으로 aws:Referer를 통해 도메인을 설정한다

{
    "Version": "2012-10-17",
    "Id": "http referer policy",
    "Statement": [
        {
            "Sid": "Allow get request originated from ~",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[bucket-name]/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "https://example.com/*",
                        "https://www.example.com/*"
                    ]
                }
            }
        }
    ]
}

 

설정 이후 객체의 URL을 눌렀을 때 Access Denied이 뜨면 설정이 잘 된 것이다!

 


CloudFront에서 위에서 설정한 S3 버킷을 오리진으로 사용하고 있기 때문에, CloudFront측에도 설정이 필요하다.

ID를 클릭

 

Behaviors > 체크박스 선택 > Edit

 

 

Cache Based on Selected Request Headers에서 Whitelist를 선택 (Referer에 대한 설정을 하기 위해)