사용자 지정 정책을 사용한 서명된 URL 생성 - 아마존 CloudFront

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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

사용자 지정 정책을 사용하여 서명된 URL을 만들려면 다음 절차를 수행합니다.

사용자 지정 정책을 사용하여 서명된 URL을 만들려면
  1. .NET 또는 Java를 사용하여 서명된 URL을 만드는 중인데 키 페어의 프라이빗 키를 기본 .pem 형식에서 .NET 또는 Java와 상환되는 형식으로 다시 포맷하지 않았다면 지금 포맷하세요. 자세한 설명은 프라이빗 키 재포맷(.NET 및 Java만 해당) 섹션을 참조하세요.

  2. 지정된 순서대로 다음 값을 연결하고 사이의 공백(탭과 줄바꿈 문자 포함)을 제거합니다. 애플리케이션 코드의 문자열에 이스케이프 문자를 포함해야 할 수도 있습니다. 모든 값에는 일종의 문자열이 있습니다. 다음 두 가지 예처럼 각 부분을 숫자( 
							1
						)로 입력합니다.

    
										1
									파일의 기본 URL

    기본 URL은 자체 쿼리 문자열 파라미터 (있는 경우) 를 포함하여 서명된 URL을 사용하지 않는 경우 파일에 액세스하는 데 사용하는 CloudFront URL입니다. 웹 배포의 URL 형식에 대한 자세한 내용은 파일의 URL 형식 사용자 지정 CloudFront을 참조하세요.

    다음 예는 배포에 대해 지정하는 값을 보여줍니다.

    • 다음 CloudFront URL은 배포된 이미지 파일 ( CloudFront 도메인 이름 사용) 용 URL입니다. image.jpgimages 디렉터리에 있습니다. URL에 있는 파일의 경로는 HTTP 서버 또는 Amazon S3 버킷의 파일 경로와 일치해야 합니다.

      https://d111111abcdef8.cloudfront.net/images/image.jpg

    • 다음 CloudFront URL에는 쿼리 문자열이 포함되어 있습니다.

      https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large

    • 다음 CloudFront URL은 배포판의 이미지 파일용 URL입니다. 둘 다 대체 도메인 이름을 사용하며 두 번째는 쿼리 문자열을 포함합니다.

      https://www.example.com/images/image.jpg

      https://www.example.com/images/image.jpg?color=red

    • 다음 CloudFront URL은 대체 도메인 이름과 HTTPS 프로토콜을 사용하는 배포의 이미지 파일을 위한 URL입니다.

      https://www.example.com/images/image.jpg

    
										2
									?

    The ?는 기본 URL 뒤에 쿼리 문자열 파라미터가 있음을 나타냅니다. 자체 쿼리 문자열 파라미터가 없는 경우에는 ?를 포함하십시오.

    
										3
									자체 쿼리 문자열 파라미터(있는 경우)&

    이 값은 선택 사항입니다. 예를 들어, 자체 쿼리 문자열 파라미터로

    color=red&size=medium

    을 추가하고 싶은 경우 ? 뒤( 
											2
										참조)와 Policy 파라미터 앞 사이에 추가합니다. 드물지만 Key-Pair-Id 뒤에 쿼리 문자열 파라미터를 넣어야 하는 경우도 있습니다.

    중요

    파라미터는 Policy, Signature 또는 Key-Pair-Id라는 이름으로 지정할 수 없습니다.

    자체 파라미터를 추가하는 경우, 마지막 파라미터를 포함하여 각 파라미터 뒤에 &를 추가합니다.

    
										4
									Policy=정책 설명의 base64 인코딩 버전

    공백이 제거된 JSON 형식의 정책 설명은 base64로 인코딩합니다. 자세한 설명은 사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 설명 생성 섹션을 참조하세요.

    정책 설명은 서명된 URL이 사용자에게 부여하는 액세스를 제어합니다. 여기에는 파일의 URL, 만료 날짜 및 시간, URL의 효력이 발생하는 날짜 및 시간(선택 사항), 파일에 액세스할 수 있는 IP 주소 또는 IP 주소 범위(선택 사항)가 포함됩니다.

    
										5
									&Signature=정책 설명의 해시 및 서명된 버전

    JSON 정책 설명을 해시, 서명 및 base64로 인코딩한 버전입니다. 자세한 설명은 사용자 지정 정책을 사용하는 서명된 URL에 대한 서명 생성 섹션을 참조하세요.

    
									6
								&Key-Pair-Id=서명을 생성하는 데 사용하는 해당 개인 키의 CloudFront 공개 키 ID입니다.

    CloudFront 퍼블릭 키의 ID (예:)K2JCJMDEHXQW5F. 공개 키 ID는 CloudFront 서명된 URL의 유효성을 검사하는 데 사용할 공개 키를 알려줍니다. CloudFront 서명의 정보를 정책 설명의 정보와 비교하여 URL이 변조되지 않았는지 확인합니다.

    이 퍼블릭 키는 배포에서 신뢰할 수 있는 서명자인 키 그룹에 속해야 합니다. 자세한 설명은 서명된 URL 및 서명된 쿠키를 생성할 수 있는 서명자 지정 섹션을 참조하세요.

서명된 URL의 예:


					1
				https://d111111abcdef8.cloudfront.net/image.jpg 
					2
				? 
					3
				color=red&size=medium& 
					4
				Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA 6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ 29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiI yMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQ VdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp 7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo 
					5
				&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~ -ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmat EXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6 
					6
				&Key-Pair-Id=K2JCJMDEHXQW5F

사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 설명 생성

다음 단계를 완료하여 사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 명령문을 만듭니다.

다양한 방법으로 파일에 대한 액세스를 제어하는 예시 정책 명령문에 대한 내용은 사용자 지정 정책을 사용하는 서명된 URL에 대한 예제 정책 설명 섹션을 참조하세요.

사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 설명을 만들려면
  1. 다음 JSON 형식을 사용하여 정책 설명을 구성하세요. 다음 보다 작음(<) 및 다음보다 큼(>) 기호 및 해당 기호 내의 설명을 사용자 지정 값으로 바꿉니다. 자세한 설명은 사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 설명에서 지정한 값 섹션을 참조하세요.

    { "Statement": [ { "Resource": "<Optional but recommended: URL of the file>", "Condition": { "DateLessThan": { "AWS:EpochTime": <Required: ending date and time in Unix time format and UTC> }, "DateGreaterThan": { "AWS:EpochTime": <Optional: beginning date and time in Unix time format and UTC> }, "IpAddress": { "AWS:SourceIp": "<Optional: IP address>" } } } ] }

    다음을 참고합니다.

    • 정책에는 명령문을 하나만 포함할 수 있습니다.

    • UTF-8 문자 인코딩을 사용하세요.

    • 지정된 대로 정확하게 모든 문장 부호 및 파라미터 이름을 포함하세요. 파라미터 이름의 약어는 허용되지 않습니다.

    • Condition 섹션의 파라미터 순서는 중요하지 않습니다.

    • Resource, DateLessThan, DateGreaterThan, IpAddress에 대한 값 관련 내용은 사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 설명에서 지정한 값을 참조하세요.

  2. 정책 설명에서 모든 공백(탭과 줄바꿈 문자 포함)을 제거합니다. 애플리케이션 코드의 문자열에 이스케이프 문자를 포함해야 할 수도 있습니다.

  3. MIME base64 인코딩 기준으로 정책 설명을 Base64로 인코딩합니다. 자세한 내용은 RFC 2045, MIME(Multipurpose Internet Mail Extensions) Part One: Format of Internet Message BodiesSection 6.8, Base64 Content-Transfer-Encoding을 참조하십시오.

  4. URL 쿼리 문자열에서 사용할 수 없는 문자를 유효한 문자로 교체합니다. 아래 표에 사용할 수 없는 문자와 유효한 문자가 나열되어 있습니다.

    무효 문자를 교체할 유효한 문자

    +

    - (하이픈)

    =

    _ (밑줄)

    /

    ~ (물결표)

  5. 서명된 URL의 Policy= 뒤에 결과 값을 추가하세요.

  6. 정책 설명을 해시, 서명 및 base64로 인코딩하여 서명된 URL에 대한 서명을 만드세요. 자세한 설명은 사용자 지정 정책을 사용하는 서명된 URL에 대한 서명 생성 섹션을 참조하세요.

사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 설명에서 지정한 값

사용자 지정 정책에 대한 정책 설명을 생성할 때 다음 값을 지정합니다.

Resource

URL (모든 쿼리 문자열 포함 CloudFront PolicySignature, 및 Key-Pair-Id 매개 변수 제외) 예:

https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes

Resource에 대해 값을 하나만 지정할 수 있습니다.

중요

정책에서 Resource 파라미터를 생략할 수 있지만 생략하는 경우 서명된 URL을 가진 사람은 누구나 서명된 URL을 만드는 데 사용한 키 페어와 연결된 어떠한 배포에서든 모든 파일에 액세스할 수 있다는 뜻이 됩니다.

다음을 참고합니다.

  • 프로토콜(Protocol) – 값은 http://, https:// 또는 *://로 시작해야 합니다.

  • 쿼리 문자열 매개 변수 - URL에 쿼리 문자열 매개 변수가 있는 경우 백슬래시 문자(\)를 사용하여 쿼리 문자열을 시작하는 물음표 문자(?)를 이스케이프 처리합니다. 예:

    https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes

  • 와일드카드 문자 - 정책의 URL에 와일드카드 문자를 사용할 수 있습니다. 다음 와일드카드 문자가 지원됩니다.

    • 별표(*). 0개 이상의 문자와 매칭됩니다.

    • 물음표(?). 정확히 한 문자와 매칭됩니다.

    정책의 URL이 HTTP 요청의 CloudFront URL과 일치할 경우 정책의 URL은 다음과 같이 프로토콜, 도메인, 경로, 쿼리 문자열의 4개 섹션으로 구분됩니다.

    [protocol]://[domain]/[path]\?[query string]

    정책의 URL에 와일드카드 문자를 사용하는 경우 와일드카드 매칭은 와일드카드가 포함된 섹션의 경계 내에서만 적용됩니다. 예를 들어, 다음 정책에서 이 URL을 고려해 보세요.

    https://www.example.com/hello*world

    이 예시에서 별표 와일드카드(*)는 경로 섹션 내에만 적용되므로 URL https://www.example.com/helloworldhttps://www.example.com/hello-world와는 매칭되지만 URL https://www.example.net/hello?world와는 매칭되지 않습니다.

    와일드카드 매칭을 위한 섹션 경계에는 다음과 같은 예외가 적용됩니다.

    • 경로 섹션의 후행 별표는 쿼리 문자열 섹션의 별표를 의미합니다. 예를 들어, http://example.com/hello*http://example.com/hello*\?*과 같습니다.

    • 도메인 섹션의 후행 별표는 경로와 쿼리 문자열 섹션의 별표를 의미합니다. 예를 들어, http://example.com*http://example.com*/*\?*과 같습니다.

    • 정책의 URL은 프로토콜 섹션을 생략하고 도메인 섹션에서 별표로 시작할 수 있습니다. 이 경우 프로토콜 섹션은 암시적으로 별표로 설정됩니다. 예를 들어, 정책의 *example.com URL은 *://*example.com/에 해당합니다.

    • 별표("Resource": "*")는 그 자체로 모든 URL과 매칭됩니다.

    예를 들어, 정책의 https://d111111abcdef8.cloudfront.net/*game_download.zip* 값은 다음 URL 모두와 매칭됩니다.

    • https://d111111abcdef8.cloudfront.net/game_download.zip

    • https://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes

    • https://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp

  • 대체 도메인 이름 – 정책의 URL에 대체 도메인 이름(CNAME)을 지정하는 경우, 웹 페이지 또는 애플리케이션에서 HTTP 요청이 대체 도메인 이름을 사용해야 합니다. 정책의 파일에 Amazon S3 URL을 지정하지 마시기 바랍니다.

DateLessThan

Unix 시간 형식(초) 및 협정 세계시(UTC) 기준의 URL 만료 날짜 및 시간. 정책에서 값을 인용 부호로 묶지 마세요. UTC에 대한 자세한 내용은 인터넷의 날짜 및 시간: 타임스탬프를 참조하세요.

예를 들면 2023년 1월 31일 오전 10시(UTC)를 Unix 시간 형식의 1675159200으로 변환합니다.

이 섹션의 유일한 필수 매개 변수입니다. Condition CloudFront 사용자가 개인 콘텐츠에 영구적으로 액세스하는 것을 방지하려면 이 값이 필요합니다.

자세한 내용은 서명된 URL의 만료 날짜 및 시간은 언제 CloudFront 확인하나요?을(를) 참조하세요.

DateGreaterThan (선택 사항)

Unix 시간 형식(초)과 협정 세계시(UTC)의 URL에 대한 선택적 시작 날짜 및 시간. 사용자는 지정된 날짜 및 시간 또는 그 이전에 파일에 액세스할 수 없습니다. 값을 인용 부호로 묶지 마세요.

IpAddress (선택 사항)

HTTP 요청을 수행하는 클라이언트의 IP 주소입니다. 다음을 참고합니다.

  • 파일에 액세스하는 IP 주소를 허용하려면 IpAddress 파라미터를 생략합니다.

  • 하나의 IP 주소 또는 하나의 IP 주소 범위를 지정할 수 있습니다. 클라이언트의 IP 주소가 두 개의 다른 범위 중 하나에 있는 경우, 정책을 사용하여 액세스를 허용할 수 없습니다.

  • 단일 IP 주소에서 액세스를 허용하기 위해 다음을 지정합니다.

    "IPv4 IP 주소/32"

  • IP 주소 범위는 스탠다드 IPv4 CIDR 형식(예: 192.0.2.0/24)을 지정해야 합니다. 자세한 내용은 Classless Inter-domain Routing(CIDR): 인터넷 주소 할당 및 집계 계획을 참조하세요.

    중요

    IPv6 형식의 IP 주소(예: 2001:0db8:85a3::8a2e:0370:7334)는 지원되지 않습니다.

    IpAddress를 포함하는 사용자 지정 정책을 사용할 경우 배포에 대해 IPv6를 사용하도록 설정하지 마세요. IP 주소로 일부 콘텐츠에 대한 액세스를 제한하고, 다른 콘텐츠에 대해서는 IPv6 요청을 지원하려면 두 가지 배포를 만들면 됩니다. 자세한 내용은 IPv6 사용 주제에서 배포를 만들거나 업데이트할 때 지정하는 값 섹션을 참조하세요.

사용자 지정 정책을 사용하는 서명된 URL에 대한 예제 정책 설명

다음 예제 정책 설명은 특정 파일, 디렉터리의 모든 파일 또는 키 페어 ID에 연결된 모든 파일의 액세스 제어 방법을 보여줍니다. 예제는 또한 개별 IP 주소 또는 IP 주소 범위에서 액세스를 제어하는 방법과 지정된 날짜 및 시간 이후 사용자의 서명된 URL 사용 방지 방법을 보여줍니다.

이러한 예시를 복사하여 붙여 넣는 경우, 공백(탭과 줄바꿈 문자 포함)을 제거하고 값을 자체 값과 교체한 후 닫는 괄호(})뒤에 줄바꿈 문자를 포함합니다.

자세한 설명은 사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 설명에서 지정한 값 섹션을 참조하세요.

예제 정책 설명: IP 주소 범위에서 하나의 파일에 액세스

다음 서명된 URL의 예시 사용자 지정 정책은 UTC 기준 2023년 1월 31일 오전 10시까지 192.0.2.0/24 범위의 IP 주소에서 https://d111111abcdef8.cloudfront.net/game_download.zip 파일에 액세스할 수 있는 사용자를 지정합니다.

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

예제 정책 설명: IP 주소 범위에서 디렉터리의 모든 파일에 액세스

다음 예시 사용자 지정 정책은 Resource 파라미터의 와일드카드 문자(*)로 표시된 바와 같이 training 디렉터리의 파일에 대한 서명된 URL을 만들 수 있도록 허용합니다. 사용자는 UTC 기준 2023년 1월 31일 오전 10시까지 192.0.2.0/24 범위의 IP 주소에서 파일에 액세스할 수 있습니다.

{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/training/*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1675159200 } } } ] }

이 정책과 함께 사용하는 서명된 URL에는 다음과 같이 특정 파일을 식별하는 URL이 있습니다.

https://d111111abcdef8.cloudfront.net/training/orientation.pdf

예제 정책 설명: 하나의 IP 주소에서 키 페어 ID에 연결된 모든 파일에 액세스

다음 예시 사용자 지정 정책은 Resource 파라미터의 와일드카드 문자(*)로 표시된 대로 배포와 연결된 파일에 대한 서명된 URL을 만들 수 있도록 허용합니다. 서명된 URL은 http:// 프로토콜이 아닌 https:// 프로토콜을 사용해야 합니다. 사용자는 IP 주소 192.0.2.10/32를 사용해야 합니다. CIDR 표기법의 192.0.2.10/32 값은 단일 IP 주소 192.0.2.10을(를) 가리킵니다. 파일은 UTC 기준 2023년 1월 31일 오전 10시에서 2023년 2월 2일 오전 10시까지만 사용할 수 있습니다.

{ "Statement": [ { "Resource": "https://*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.10/32" }, "DateGreaterThan": { "AWS:EpochTime": 1675159200 }, "DateLessThan": { "AWS:EpochTime": 1675332000 } } } ] }

이 정책을 사용하는 서명된 각 URL에는 특정 CloudFront 배포의 특정 파일을 식별하는 URL이 있습니다. 예를 들면 다음과 같습니다.

https://d111111abcdef8.cloudfront.net/training/orientation.pdf

또한 서명된 URL은 키 페어 ID를 포함하고 이는 URL에서 지정한 배포(d111111abcdef8.cloudfront.net)의 신뢰할 수 있는 키 그룹과 연결되어야 합니다.

사용자 지정 정책을 사용하는 서명된 URL에 대한 서명 생성

서명된 URL에 대한 서명은 정책 설명의 해시, 서명 및 base64로 인코딩된 버전의 사용자 지정 정책을 사용합니다. 사용자 지정 정책에 대한 서명을 만들려면 다음 단계를 수행합니다.

다음을 참조하여 정책 설명을 해시, 서명 및 인코딩하는 방법에 대한 추가적인 내용과 예제를 확인하세요.

옵션 1: 사용자 지정 정책을 사용하여 서명을 만들려면
  1. SHA-1 해시 함수 및 RSA를 사용하여 사용자 지정 정책을 사용하는 서명된 URL에 대한 정책 설명을 만들려면 절차에서 만든 JSON 정책 설명을 해시하고 서명합니다. 더 이상 공백을 포함하지 않지만 base64로 인코딩되지 않은 정책 설명 버전을 사용합니다.

    해시 함수에 필요한 프라이빗 키의 경우 배포에 대해 신뢰할 수 있는 활성 키 그룹에 퍼블릭 키가 있는 프라이빗 키를 사용합니다.

    참고

    정책 설명을 해시 및 서명하는 방법은 프로그래밍 언어와 플랫폼에 따라 달라집니다. 샘플 코드에 대한 내용은 서명 URL에 대한 서명을 만드는 코드 예제 단원을 참조하십시오.

  2. 해시 및 서명된 문자열에서 공백(탭과 줄바꿈 문자 포함)을 제거합니다.

  3. MIME base64 인코딩 기준으로 문자열을 base64로 인코딩합니다. 자세한 내용은 RFC 2045, MIME(Multipurpose Internet Mail Extensions) Part One: Format of Internet Message BodiesSection 6.8, Base64 Content-Transfer-Encoding을 참조하십시오.

  4. URL 쿼리 문자열에서 사용할 수 없는 문자를 유효한 문자로 교체합니다. 아래 표에 사용할 수 없는 문자와 유효한 문자가 나열되어 있습니다.

    무효 문자를 교체할 유효한 문자

    +

    - (하이픈)

    =

    _ (밑줄)

    /

    ~ (물결표)

  5. 서명된 URL의 &Signature= 뒤에 결과 값을 추가하고 사용자 지정 정책을 사용하여 서명된 URL을 만들려면로 돌아가서 서명된 URL 부분을 마저 연결합니다.