본문으로 바로가기

AWS CloudFront / Signed URL(서명 URL) [미완]

category AWS/☁️ AWS 2020. 2. 15. 04:46

signed URL이란 CloudFront로 배포되는 파일의 사용을 제한하는 기능이다.

 

즉, 특정 날짜가 지나면 파일을 받지 못하게 하거나, 특정 날짜가 지나야만 받게 하거나,

특정 IP만 파일을 볼 수 있게 하는 등의 용도로 사용한다.

 

주의할 점이 있다면

S3+CloudFront의 경우 Restrict Bucket Access를 Yes로 설정해야 하고(S3 부분 게시물에 올려 놓았다)

custom origin+CloudFront의 경우 웹 서버 레벨에서 CloudFront 접근만 가능하도록 설정해야 한다.

 

접근해오는 서버가 CloudFront인지 확인하려면 HTTP의 헤더를 확인해봐야 한다.

크롬에서 [개발자 도구]-[Network]를 열어서 확인해보자.

 

왼쪽이 EC2 접속 오른쪽이 CloudFront접속. X-Cache를 볼 수 있다.

왼쪽이 EC2 접속 오른쪽이 CloudFront접속. X-Cache를 볼 수 있다.

 

꺼무위키를 인용하자면 다음과 같은 말이 있다.

이 서비스(CloudFront)는 유료 콘텐츠를 제공할 때 비로소 빛을 발한다. 서명 URL(Signed URL)이나 서명 쿠키를 사용해서 인증된 사용자에게만 콘텐츠를 배달하는 서비스를 할 수 있다.

출처) https://namu.wiki/w/Amazon%20Web%20Services?from=aws

즉, 유료 콘텐츠를 전달할 때 유용하다는 것이다. 

 

Signed URL에는 2가지 종류가 있다

(왜 분리했는지 모르겠다. 강력한 custom policy를 사용하자)

 

1. Canned Policy를 사용한 Signed URL(미리 준비된 정책을 사용하여 서명된 URL 생성)

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html

 

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html

미리 준비된 정책을 사용하여 서명된 URL 생성

docs.aws.amazon.com

파일 1개의 사용을 제한합니다. 또한, 특정 날짜가 지나면 파일을 받지 못하게 하는 기능 사용할 수 있습니다. 정책(Policy)의 내용이 URL에 포함되어 있지 않아 URL의 길이가 짧습니다.

 

2. Custom Policy를 사용한 Signed URL(사용자 지정 정책을 사용하여 서명된 URL 생성)

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html

 

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html

사용자 지정 정책을 사용한 서명된 URL 생성

docs.aws.amazon.com

파일 여러 개의 사용을 제한합니다. 특정 날짜가 지나면 파일을 받지 못하게 하는 기능, 특정 날짜 이후에 파일을 받을 수 있도록 하는 기능, 특정 IP 혹은 IP대역에서만 파일을 받을 수 있도록 하는 기능을 사용할 수 있습니다. 정책(Policy)의 내용이 URL에 포함되어 있어 URL의 길이가 깁니다.


하여튼 Signed URL을 사용해보자.

서명 URL을 사용하기 위해선 CloudFront의 Behavior 설정을 바꿔야 한다.

우선 CloudFront에 가서 Distribution Settings를 눌러보자.

 

 

Behavors에서 Edit를 눌러 설정을 바꿔 봅시다.

 

Edit에서 Restrict Viewer Access에 Yes를 선택합니다.

 

설정을 마치면 Trusted Signers에 self가 뜬 것을 확인할 수 있습니다.

 

접속을 시도하면 MissingKey, 즉, 키가 없어서 접속할 수 없다고 뜬다.

이제 Signed URL(서명 URL)에 맞는 매개변수가 없으면 접근할 수 없는 것이다.


이제, 서명 URL을 위한 CloudFront 전용 키를 만들어보자.

RSA 암호를 기반으로 한 키 쌍(공개 키, 개인 키)를 만들어야 한다.

 

우선 상단의 자신의 이름을 클릭하여 '내 보안 자격 증명'으로 이동한다.

 

'내 보안 자격 증명'

그 후 CloudFront 키 페어를 생성해주면 되겠다.

 

 

아래의 창을 그냥 닫으면 안된다!!! 반드시 다운로드 받고난 후에 닫아라

 

이 창을 그냥 닫으면 안된다!!! 반드시 다운로드 받고난 후에 닫아라

개인 키는 앞에 pk가 붙고 공개 키는 rsa가 붙으니 참고하라.

 

 


 

Canned Policy

 

 

Canned Policy를 사용해서 Signed URL을 만들어보자.

우선 오리진이 되는 EC2에 접속한 뒤

touch canned_policy.json
nano canned_policy.json
{
    "Statement": [{
        "Resource": "your CloudFront Domain",
        "Condition": {
            "DateLessThan": {
                "AWS:EpochTime": [원하는 시간]
            }
        }
    }]
}
위으 코드를 공백을 전부 없앤 뒤 canned_policy.json에 저장한다.

{"Statement":[{"Resource":"d1vpnjsa0ikc97.cloudfront.net","Condition":{"DateLessThan":{"AWS:EpochTime":1581751980}}}]}

이제 서명값을 생성하자.

cat canned_policy.json | openssl sha1 -sign [개인 키 파일] | openssl base64 | tr '+=' "-_~"
오류가 난다면
1. 실행하는 경로 내에 개인 키 파일이 있는지 (없다면 WinSCP를 이용해서 옮겨주자)
https://darrengwon.tistory.com/66?category=858372
2.  json을 잘못 입력한 것이 아닌지
확인한다

명령을 입력하면 canned_policy.json의 내용을 서명한 데이터가 출력된다.

 

생성된 서명 값 일부를 가져와봤다.

 

이제 Signed URL로 접속할 수 있다.

접속할CloudFront도메인?Expires=설정한timestamp&signature=생성된서명값&Key-Pair-Id=액세스키값

설정한 timestamp는 canned_policy.json에 입력한 값이며

생성된 서명값은 앞서 실행한 명령어로 나온 값이고

액세스 키 값은 아래 첨부한 사진(보안 자격 증명)의 액세스 키 ID를 말한다.

 

 

해당 경로로 접속했을 때 설정한 시간이 지나면 접속이 안된다.

성공적!

 


 

Cusmtom Policy

 

canned_policy와 대동소이하다.

앞서 왜 canned_policy와 custom_policy를 분리해놓았는지 모르겠다고 말한 이유가 여기에 있다.


https://blog.leedoing.com/87

 

AWS CloudFront SignedURL/Cookie 사용

AWS CloudFront로 비공개 컨텐츠 혹은 유료 컨텐츠를 서빙할 때는 Signed URL/Cookie 라는 토큰 기반의 인증 옵션을 사용한다. 1. 구성은 뭐 인증 API 서버가 필요할테고 일반적인 인증 구성 2. CloudFront Signe..

blog.leedoing.com

https://velog.io/@minholee_93/AWS-Signed-URL%EB%A1%9C-CloudFront-%EC%BD%98%ED%85%90%EC%B8%A0-%EC%82%AC%EC%9A%A9-%EC%A0%9C%ED%95%9C%ED%95%98%EA%B8%B0-fek3qydbf4

 

[AWS] Signed URL로 CloudFront 콘텐츠 사용 제한하기

참고서적 : 아마존 웹 서비스를 다루는 기술 12장(http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966187935&orderClick=LEa&Kc=) image.png > 책 너무 좋아요... 🤣🤣 꼭 읽어보세요! 이번 글에서는 Signed...

velog.io

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체