CloudFront의 서명된 URL 또는 서명된 쿠키와 관련된 문제를 해결하려면 어떻게 해야 하나요?

6분 분량
0

Amazon CloudFront와 서명된 URL 또는 서명된 쿠키를 사용하여 프라이빗 콘텐츠를 보호하고 있습니다. 하지만 403 액세스 거부 오류가 발생합니다.

해결 방법

Amazon CloudFront는 서명된 URL 또는 서명된 쿠키에 문제가 발생하면 403 액세스 거부 오류가 표시될 수 있습니다.

서명된 URL 또는 서명된 쿠키에 올바른 서명자가 포함되어 있지 않음

동작에서 뷰어 액세스 제한을 설정하는 경우, 서명자를 결정해야 합니다. 서명자는 CloudFront에서 만든 신뢰할 수 있는 키 그룹이거나 CloudFront 키 쌍이 포함된 AWS 계정입니다. 다음 403 오류 메시지는 서명자 정보가 누락되었거나 잘못되었음을 나타냅니다.

이 오류에는 ‘누락된 키 쌍 ID 쿼리 매개 변수 또는 쿠키 값’이라는 메시지가 포함됩니다.

이 메시지는 서명된 URL을 사용할 때 누락되었거나 비어 있는 Key-Pair-Id 쿼리 매개변수를 나타냅니다. 또는 서명된 쿠키에 누락된 CloudFront-Key-Pair-ID 쿼리 문자열 매개 변수가 있음을 나타냅니다.

이 오류에는 ‘알 수 없는 키’라는 메시지가 포함됩니다.

이 메시지는 CloudFront가 Key-Pair-ID(서명된 URL의 경우) 또는 CloudFront-Key-Pair-ID(서명된 쿠키의 경우)를 통해 서명자 정보를 확인할 수 없음을 나타냅니다. (서명된 쿠키의 경우)를 통해 서명자 정보를 확인할 수 없습니다. 이 문제를 해결하려면 서명된 URL에 올바른 Key-Pair-ID 값이 사용되었는지 또는 서명된 쿠키에 CloudFront-Key-Pair-ID가 사용되었는지 확인하세요.

서명된 URL을 사용하는 경우, Key-Pair-ID의 값을 찾아서 기록해 두세요.

-또는-

서명된 쿠키를 사용하는 경우 CloudFront-Key-Pair-ID의 값을 찾아서 기록합니다.

그런 다음 키 ID를 찾아서 Key-Pair-ID 또는 CloudFront-Key-Pair-ID와 일치하는지 확인합니다.

  1. CloudFront 콘솔을 엽니다. 탐색 메뉴에서 배포를 선택합니다.

2.    배포를 선택합니다. 그런 다음 동작 탭을 선택합니다.

  1. 동작 이름을 선택한 다음 편집을 선택합니다.

4.    뷰어 접근 제한 설정을 찾습니다.  참고: 로 설정된 경우, 이 캐시 동작의 경로 패턴과 일치하는 파일에 대한 요청은 서명된 URL 또는 서명된 쿠키를 사용해야 합니다.

  1. 보기 액세스 제한 필드가 로 설정되어 있는지 확인한 후 신뢰하는 권한 부여 유형 필드를 확인합니다.

  2. 신뢰할 수 있는 권한 유형 값 설정이 신뢰할 수 있는 키 그룹인 경우, 신뢰 키 그룹의 이름을 기록합니다.

신뢰 키 그룹의 공개 키 ID를 찾습니다.
CloudFront 콘솔을 엽니다. 키 그룹을 선택합니다.
키 그룹 목록에서 기록해 둔 신뢰할 수 있는 키 그룹의 이름을 선택합니다.

1단계에서 기록한 Key-Pair-Id 또는 CloudFront-Key-Pair-Id 값이 신뢰할 수 있는 키 그룹에 있는 공개 키 ID 중 하나와 일치하는지 확인합니다.

  1. 신뢰할 수 있는 권한 유형 값이 신뢰할 수 있는 서명자인 경우, CloudFront는 AWS가 생성한 보안 인증 정보를 사용합니다. 이 경우, 1단계에서 언급한 Key-Pair-Id 또는 CloudFront-Key-Pair-Id의 값은 CloudFront 자격 증명의 액세스 키 ID와 일치해야 합니다.   CloudFront 보안 인증 정보의 액세스 키 ID를 찾으려면 서명자에 대한 키 쌍 만들기를 참조하세요.

서명된 URL 또는 서명된 쿠키가 유효한 시간에 전송되지 않음

서명된 URL 또는 서명된 쿠키를 만들 때 JSON 형식의 정책 문이 서명된 URL에 대한 제한을 지정합니다. 이 문은 URL의 유효 기간을 결정합니다. 다음 시나리오 중 하나에 해당하는 경우 CloudFront는 403 액세스 거부 오류를 반환합니다.

  • 준비된 정책을 사용하는 서명된 URL에서 Expires 값보다 큰 시간에 서명된 URL이 전송되는 경우.

  • 준비된 정책을 사용하는 서명된 쿠키의 CloudFront-Expires 값보다 큰 시간에 서명된 쿠키가 전송됩니다.

  • 서명된 URL 또는 서명된 쿠키는 사용자 지정 정책의 DateLessThan 값보다 큰 시간에 전송됩니다. 또는 DateGreaterThan 값보다 작은 시간에 전송됩니다.

참고: Expires, CloudFront-Expires, DateLessThanDateGreaterThan 값은 유닉스 시간 형식(초) 및 UTC(협정 세계시) 값입니다. 예를 들어, 2013년 1월 1일 오전 10:00 UTC는 유닉스 시간 형식에서 1357034400으로 변환됩니다. 서머타임을 사용하는 경우 2147483647(2038년 1월 19일 03:14:07 UTC)보다 늦지 않은 날짜에 32비트 정수를 사용합니다.

서명된 URL의 Policy 매개변수 또는 서명된 쿠키의 CloudFront-Policy 속성은 사용자 지정 정책을 사용 중임을 나타냅니다. 정책 문은 JSON 형식이며 base64로 인코딩됩니다. DateLessThan 또는 DateGreaterThan 값을 찾으려면 64base 디코딩 명령을 사용합니다.

base64로 인코딩된 사용자 지정 정책의 예입니다.

eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__

base64로 인코딩된 형식의 사용자 지정 정책을 JSON 형식으로 디코딩하려면 다음 Linux 명령을 실행합니다. 이 예에서는 이전 예의 값을 사용합니다. 정책 값을 사용자 지정 정책 값으로 바꿉니다.

$ echo -n eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__ | base64 -di

다음 메시지와 유사한 출력이 표시됩니다.

{ "Statement": [{ "Resource": "http://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1426500000 } } }] }

서명된 URL 또는 서명된 쿠키에 정책에 둘 이상의 문이 있습니다.

미리 준비된 정책 또는 사용자 지정 정책에 둘 이상의 문이 포함된 경우 CloudFront는 403 액세스 거부 오류를 반환합니다.

이 문제를 해결하려면 이전 섹션의 Linux 명령을 실행하여 사용자 지정 정책 문을 확인하세요. 코드 세부 정보를 확인한 다음 미리 준비된 정책 또는 사용자 지정 정책에 하나의 문만 포함되어 있는지 확인합니다.

서명된 URL 또는 서명된 쿠키에 정책의 기본 URL이 잘못됨

다음 시나리오 중 하나에 해당하는 경우 CloudFront는 403 액세스 거부 오류를 반환합니다.

  • 정책 명세서의 Resource 키에 기본 URL이 축약되어 있습니다(www.example.com). 전체 URL(http://www.example.com)을 사용합니다.

  • 기본 URL에 UTF-8 문자 인코딩이 없습니다.

  • 기본 URL에 모든 구두점 및 매개변수 이름이 포함되어 있지 않습니다.

  • 기본 URL의 HTTP 또는 HTTPS 프로토콜이 서명된 URL 또는 서명된 쿠키를 전송하는 요청에 사용되는 프로토콜과 일치하지 않습니다.

  • 기본 URL의 도메인 이름이 사용자 에이전트가 서명된 URL 또는 서명된 쿠키를 전송하는 데 사용하는 호스트 헤더와 일치하지 않습니다.

  • 기본 URL 쿼리 문자열에 유효하지 않은 문자가 포함되어 있습니다.

서명된 URL 또는 서명된 쿠키의 정책 서명이 잘못되었습니다.

다음 시나리오 중 하나에 해당하는 경우 CloudFront는 403 액세스 거부 오류를 반환합니다.

  • 정책 문장에 공백(탭 및 개행 문자 포함)이 포함된 경우.

  • 준비된 정책 또는 사용자 지정 정책이 해시되기 전에 문자열로 형식이 지정되지 않은 경우. 이 문제는 AWS SDK를 사용하지 않고 서명된 URL 또는 서명된 쿠키를 만드는 경우에 발생합니다.

  • 서명을 생성하기 전에 정책이 해시되지 않습니다. 이는 AWS SDK를 사용하지 않고 서명된 URL 또는 서명된 쿠키를 생성하는 경우에 발생합니다.

서명된 URL 또는 서명된 쿠키를 사용할 때의 서명 모범 사례는 서명된 URL에 대한 서명 만들기 코드 예시를 참조하세요.

서명된 URL 또는 서명된 쿠키가 사용자 지정 정책에서 허용되지 않는 IP 주소 또는 IP 범위에서 전송되었습니다.

다음 시나리오 중 하나에 해당하는 경우 CloudFront는 403 액세스 거부 오류를 반환합니다.

  • 서명된 URL 또는 서명된 쿠키가 IPv6 IP 주소에서 전송된 경우.

  • 서명된 URL 또는 서명된 쿠키가 사용자 지정 정책에 지정된 IPv4 IP 주소 또는 IPv4 IP 범위에서 전송되지 않은 경우.

IpAddress 키는 서명된 URL 또는 서명된 쿠키에 있는 사용자 지정 정책에서만 사용할 수 있습니다. IPv6 형식의 IP 주소는 지원되지 않습니다. IpAddress가 포함된 사용자 지정 정책을 사용하는 경우 배포에 대해 IPv6를 켜지 마세요.

서명된 쿠키는 Set-cookie 응답 헤더에 도메인 및 경로 속성을 포함하지 않습니다.

쿠키가 CloudFront에서 반환되었지만 이후 동일한 도메인에 대한 요청에 포함되지 않은 경우 CloudFront는 403 액세스 거부 오류를 반환합니다. 이 경우 Set-Cookie 응답 헤더에서 DomainPath 쿠키 속성을 확인하세요.

도메인 값은 요청된 파일의 도메인 이름입니다. 도메인 속성을 지정하지 않으면 기본값은 URL의 도메인 이름입니다. 이는 지정된 도메인 이름에만 적용되며 하위 도메인에는 적용되지 않습니다. 도메인 속성을 지정하면 하위 도메인에도 적용됩니다.

도메인 속성을 지정하는 경우 URL의 도메인 이름과 도메인 속성 값이 일치해야 합니다. CloudFront가 배포에 할당하는 도메인 이름(예: d111111abcdef8.cloudfront.net)을 지정할 수는 있지만 도메인 이름에 *.cloudfront.net를 지정할 수는 없습니다. URL에 example.com과 같은 대체 도메인 이름을 사용하려면 배포에 대체 도메인 이름을 추가하세요.

Path 속성은 요청된 파일의 경로입니다. Path 속성을 지정하지 않으면 기본값은 URL의 경로입니다.

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음