미리 준비된 정책을 사용하여 서명된 쿠키 설정
미리 준비된 정책을 사용하여 서명된 쿠키를 설정하려면 다음 단계를 완료하세요. 서명을 만들려면 미리 준비된 정책을 사용하는 서명된 쿠키에 대한 서명 생성 단원을 참조하세요.
미리 준비된 정책을 사용하여 서명된 쿠키를 설정하려면
-
.NET 또는 Java를 사용하여 서명된 쿠키를 생성하는 중인데 키 페어의 프라이빗 키를 기본 .pem 형식에서 .NET 또는 Java와 상환되는 형식으로 다시 포맷하지 않았다면 지금 포맷하세요. 자세한 내용은 프라이빗 키 재포맷(.NET 및 Java만 해당) 단원을 참조하십시오.
-
Set-Cookie
헤더 세 개를 승인된 최종 사용자에게 보내도록 애플리케이션을 프로그래밍합니다. 각Set-Cookie
헤더는 이름-값 페어를 하나만 포함할 수 있고 CloudFront 서명된 쿠키에는 이름-값 페어 3개가 필요하기 때문에Set-Cookie
헤더가 3개 있어야 합니다. 이름-값 페어는CloudFront-Expires
,CloudFront-Signature
,CloudFront-Key-Pair-Id
입니다. 액세스가 제한되는 파일에 대해 사용자가 첫 번째 요청을 하려면 최종 사용자에게 값이 있어야 합니다.참고
일반적으로
Expires
및Max-Age
속성을 제외하는 것이 좋습니다. 이러한 속성을 제외하면 사용자가 브라우저를 닫을 때 쿠키가 삭제되므로 권한 없는 사람이 콘텐츠에 액세스할 가능성이 줄어듭니다. 자세한 내용은 서명된 쿠키 악용 방지 단원을 참조하십시오.쿠키 속성의 이름은 대소문자를 구분합니다.
줄바꿈은 속성의 가독성을 높이기 위해서만 사용됩니다.
Set-Cookie: CloudFront-Expires=
date and time in Unix time format (in seconds) and Coordinated Universal Time (UTC)
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly Set-Cookie: CloudFront-Signature=hashed and signed version of the policy statement
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature
; Domain=optional domain name
; Path=/optional directory path
; Secure; HttpOnly- (선택 사항)
Domain
-
요청된 파일의 도메인 이름입니다.
Domain
속성을 지정하지 않는 경우, 기본값은 URL의 도메인 이름이고 이는 하위 도메인이 아닌 지정된 도메인 이름에만 적용됩니다.Domain
속성을 지정하는 경우, 하위 도메인에도 적용됩니다. 도메인 이름 앞의 점(예:Domain=.example.com
)은 선택 사항입니다. 또한Domain
속성을 지정하는 경우, URL의 도메인 이름과Domain
속성의 값이 일치해야 합니다.CloudFront가 배포에 할당하는 도메인 이름을 d111111abcdef8.cloudfront.net과 같이 지정할 수 있으나, *.cloudfront.net을 도메인 이름으로 지정할 수는 없습니다.
URL에 example.com과 같은 대체 도메인 이름을 사용하려면
Domain
속성 지정 여부와 상관없이 대체 도메인 이름을 배포에 추가해야 합니다. 자세한 내용은 대체 도메인 이름(CNAME) 주제에서 배포 설정 참조 섹션을 참조하세요. - (선택 사항)
Path
-
요청된 파일의 경로입니다.
Path
속성을 지정하지 않는 경우, 기본값은 URL의 경로입니다. Secure
-
요청을 보내기 전 최종 사용자에게 쿠키의 암호화를 요청하세요. 쿠키 속성이 MITM(중간자 공격)을 당하지 않도록 HTTPS 연결을 통해
Set-Cookie
헤더를 보내는 것이 좋습니다. HttpOnly
-
브라우저(지원되는 경우)가 쿠키 값과 상호 작용하는 방식을 정의합니다.
HttpOnly
를 사용하면 JavaScript에서 쿠키 값에 액세스할 수 없습니다. 이 예방 조치는 크로스 사이트 스크립팅(XSS) 공격을 완화하는 데 도움이 될 수 있습니다. 자세한 내용은 HTTP 쿠키 사용을 참조하세요. CloudFront-Expires
-
Unix 시간 형식(초) 및 협정 세계시(UTC) 기준의 URL 만료 날짜 및 시간을 지정합니다. 예를 들면 2013년 1월 1일 오전 10시(UTC)를 Unix 시간 형식의 1357034400으로 변환합니다. 에포크(epoch) 시간을 사용하려면 날짜에 대해 32비트 정수를 사용합니다. 이 정수는 2147483647(2038년 1월 19일 03:14:07 UTC)를 넘을 수 없습니다. UTC에 대한 자세한 내용은 RFC 3339, 인터넷의 날짜 및 시간: 타임스탬프, https://tools.ietf.org/html/rfc3339
를 참조하세요. CloudFront-Signature
-
JSON 정책 설명의 해시, 서명 및 base64 인코딩 버전입니다. 자세한 내용은 미리 준비된 정책을 사용하는 서명된 쿠키에 대한 서명 생성 단원을 참조하십시오.
CloudFront-Key-Pair-Id
-
CloudFront 퍼블릭 키의 ID입니다(예:
K2JCJMDEHXQW5F
). CloudFront는 서명된 URL을 확인할 때 사용할 퍼블릭 키를 퍼블릭 키 ID로 판단합니다. CloudFront는 서명의 정보를 정책 설명의 정보와 비교하고 URL이 변조되지 않았음을 확인합니다.이 퍼블릭 키는 배포에서 신뢰할 수 있는 서명자인 키 그룹에 속해야 합니다. 자세한 내용은 서명된 URL 및 서명된 쿠키를 생성할 수 있는 서명자 지정 단원을 참조하십시오.
- (선택 사항)
다음 예제는 배포와 연결된 도메인 이름을 파일의 URL에 사용할 때 서명된 쿠키 한 개의 Set-Cookie
헤더를 보여줍니다.
Set-Cookie: CloudFront-Expires=1426500000; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly
다음 예제는 파일에 대한 URL의 example.org 대체 도메인 이름을 사용할 때 하나의 서명된 쿠키에 대한 예제 Set-Cookie
헤더를 보여줍니다.
Set-Cookie: CloudFront-Expires=1426500000; Domain=example.org; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_; Domain=example.org; Path=/images/*; Secure; HttpOnly Set-Cookie: CloudFront-Key-Pair-Id=K2JCJMDEHXQW5F; Domain=example.org; Path=/images/*; Secure; HttpOnly
URL에 example.com과 같은 대체 도메인 이름을 사용하려면 Domain
속성 지정 여부와 상관없이 대체 도메인 이름을 배포에 추가해야 합니다. 자세한 내용은 대체 도메인 이름(CNAME) 주제에서 배포 설정 참조 섹션을 참조하세요.
미리 준비된 정책을 사용하는 서명된 쿠키에 대한 서명 생성
미리 준비된 정책을 사용하는 서명된 쿠키의 서명을 만들려면 다음 절차를 완료하세요.
미리 준비된 정책을 사용하는 서명된 쿠키에 대한 정책 설명 생성
미리 준비된 정책을 사용하는 서명된 쿠키를 설정할 때 CloudFront-Signature
속성은 정책 설명의 해시 및 서명된 버전입니다. 미리 준비된 정책을 사용하는 서명된 쿠키의 경우, 사용자 지정 정책을 사용하는 서명된 쿠키와 마찬가지로 Set-Cookie
헤더에 정책 설명을 포함하지 않습니다. 정책 설명을 만들려면 다음 단계를 수행합니다.
미리 준비된 정책을 사용하는 서명된 쿠키에 대한 정책 설명을 만들려면
-
다음 JSON 형식과 UTF-8 문자 인코딩을 사용하여 정책 설명을 구성합니다. 지정된 모든 문장 부호 및 기타 리터럴 값을 정확히 포함해야 합니다.
Resource
및DateLessThan
파라미터에 대한 내용은 서명된 쿠키에서 미리 준비된 정책을 위한 정책 설명에서 지정한 값를 참조하세요.{ "Statement": [ { "Resource": "base URL or stream name", "Condition": { "DateLessThan": { "AWS:EpochTime": ending date and time in Unix time format and UTC } } } ] }
-
정책 설명에서 모든 공백(탭과 줄바꿈 문자 포함)을 제거합니다. 애플리케이션 코드의 문자열에 이스케이프 문자를 포함해야 할 수도 있습니다.
서명된 쿠키에서 미리 준비된 정책을 위한 정책 설명에서 지정한 값
미리 준비된 정책에 대한 정책 설명을 만들 때 다음 값을 지정합니다.
- 리소스
-
쿼리 문자열을 포함하는 기본 URL(있는 경우)은 다음과 같습니다.
https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes
Resource
에 대해 값을 하나만 지정할 수 있습니다.다음을 참조하세요.
-
프로토콜(Protocol) – 값은
http://
또는https://
로 시작해야 합니다. -
쿼리 문자열 파라미터(Query string parameters) – 쿼리 문자열 파라미터가 없는 경우, 물음표를 생략합니다.
-
대체 도메인 이름(Alternate domain names) – URL에 대체 도메인 이름(CNAME)을 지정하는 경우, 웹 페이지 또는 애플리케이션의 파일을 참조할 때 대체 도메인 이름을 지정해야 합니다. 파일에 대한 Amazon S3 URL을 지정하지 마시기 바랍니다.
-
- DateLessThan
-
Unix 시간 형식(초) 및 협정 세계시(UTC) 기준의 URL 만료 날짜 및 시간. 값을 인용 부호로 묶지 마세요.
예를 들면 2015년 3월 16일 오전 10시(UTC)를 Unix 시간 형식인 1426500000으로 변환합니다.
이 값은
CloudFront-Expires
헤더의Set-Cookie
속성 값과 일치해야 합니다. 값을 인용 부호로 묶지 마세요.자세한 내용은 CloudFront가 서명된 쿠키의 만료 날짜 및 시간을 확인하는 시기 단원을 참조하십시오.
미리 준비된 정책에 대한 정책 설명 예제
서명된 쿠키에 다음 예제의 정책 설명을 사용할 경우, 사용자는 UTC 기준 2015년 3월 16일 오전 10시까지 https://d111111abcdef8.cloudfront.net/horizon.jpg
파일에 액세스할 수 있습니다.
{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/horizon.jpg?size=large&license=yes", "Condition": { "DateLessThan": { "AWS:EpochTime": 1426500000 } } } ] }
정책 설명에 서명하여 미리 준비된 정책을 사용하는 서명된 쿠키에 대한 서명 생성
CloudFront-Signature
헤더의 Set-Cookie
속성의 값을 만들려면 미리 준비된 정책을 사용하는 서명된 쿠키에 대한 정책 설명을 만들려면에서 만든 정책 설명을 해시하고 서명합니다.
다음 주제를 참조하여 정책 설명을 해시, 서명 및 인코딩하는 방법에 대한 추가적인 내용과 예제를 확인하세요.
미리 준비된 정책을 사용하는 서명된 쿠키에 대한 서명을 만들려면
-
SHA-1 해시 함수 및 RSA를 사용하여 미리 준비된 정책을 사용하는 서명된 쿠키에 대한 정책 설명을 만들려면 절차에서 만든 RSA 정책 설명을 해시하고 서명합니다. 공백이 삭제된 버전의 정책 설명을 사용합니다.
해시 함수에 필요한 프라이빗 키의 경우 배포에 대해 신뢰할 수 있는 활성 키 그룹에 퍼블릭 키가 있는 프라이빗 키를 사용합니다.
참고
정책 설명을 해시 및 서명하는 방법은 프로그래밍 언어와 플랫폼에 따라 달라집니다. 샘플 코드에 대한 내용은 서명 URL에 대한 서명을 만드는 코드 예제 섹션을 참조하십시오.
-
해시 및 서명된 문자열에서 공백(탭과 줄바꿈 문자 포함)을 제거합니다.
-
MIME base64 인코딩 기준으로 문자열을 base64로 인코딩합니다. 자세한 내용은 RFC 2045, MIME(Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies의 Section 6.8, Base64 Content-Transfer-Encoding
을 참조하십시오. -
URL 쿼리 문자열에서 사용할 수 없는 문자를 유효한 문자로 교체합니다. 아래 표에 사용할 수 없는 문자와 유효한 문자가 나열되어 있습니다.
무효 문자를 교체할 유효한 문자 +
- (하이픈)
=
_ (밑줄)
/
~ (물결표)
-
결과로 얻은 값을
Set-Cookie
이름-값 페어의CloudFront-Signature
헤더에 포함하세요. 그런 다음, 미리 준비된 정책을 사용하여 서명된 쿠키를 설정하려면 절차로 돌아가서Set-Cookie
에 대한CloudFront-Key-Pair-Id
헤더를 추가합니다.