

# 미리 준비된 정책을 사용하여 서명된 URL 생성
<a name="private-content-creating-signed-url-canned-policy"></a>

미리 준비된 정책을 사용하여 서명된 URL을 만들려면 다음 단계를 수행합니다.<a name="private-content-creating-signed-url-canned-policy-procedure"></a>

**미리 준비된 정책을 사용하여 서명된 URL을 만들려면**

1. .NET 또는 Java를 사용하여 서명된 URL을 만드는 중인데 키 페어의 프라이빗 키를 기본 .pem 형식에서 .NET 또는 Java와 상환되는 형식으로 다시 포맷하지 않았다면 지금 포맷하세요. 자세한 내용은 [프라이빗 키 재포맷(.NET 및 Java만 해당)](private-content-trusted-signers.md#private-content-reformatting-private-key) 섹션을 참조하세요.

1. 다음 값을 연결합니다. 이 예제의 서명된 URL의 형식을 사용할 수 있습니다.

   ```
   https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Expires=1767290400&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F
   ```

   모든 빈 공백(탭과 줄바꿈 문자 포함)을 제거합니다. 애플리케이션 코드의 문자열에 이스케이프 문자를 포함해야 할 수도 있습니다. 모든 값에는 일종의 `String`이 있습니다.  
**1. *파일의 기본 URL***  
기본 URL이란 서명된 URL을 사용하지 않고 파일에 액세스할 때 사용할 CloudFront URL을 말합니다. 자체 쿼리 문자열 파라미터가 있는 경우 여기에 포함됩니다. 이전 예제에서 기본 URL은 `https://d111111abcdef8.cloudfront.net/image.jpg`입니다. 웹 배포의 URL 형식에 대한 자세한 내용은 [CloudFront에서 파일에 대한 URL 형식 사용자 지정](LinkFormat.md)을 참조하세요.  
   + 다음 CloudFront URL은 배포의 이미지 파일을 위한 것입니다(CloudFront 도메인 이름 사용). `image.jpg`는 `images` 디렉터리에 있습니다. URL에 있는 파일의 경로는 HTTP 서버 또는 Amazon S3 버킷의 파일 경로와 일치해야 합니다.

     `https://d111111abcdef8.cloudfront.net/images/image.jpg`
   + 다음 CloudFront URL은 쿼리 문자열을 포함합니다.

     `https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large`
   + 다음 CloudFront URL은 배포의 이미지 파일을 위한 것입니다. 모두 대체 도메인 이름을 사용합니다. 두 번째는 쿼리 문자열을 포함합니다.

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

     `https://www.example.com/images/image.jpg?color=red`
   + 다음 CloudFront URL은 대체 도메인 이름과 HTTPS 프로토콜을 사용하는 배포의 이미지 파일을 위한 것입니다.

     `https://www.example.com/images/image.jpg`  
** 2. `?` **  
`?`는 기본 URL 뒤에 쿼리 파라미터가 있음을 나타냅니다. 쿼리 파라미터를 지정하지 않은 경우에도 `?`를 포함합니다.  
순서에 관계없이 다음 쿼리 파라미터를 지정할 수 있습니다.  
**3. *자체 쿼리 문자열 파라미터(있는 경우*`&`**  
(선택 사항) 자체 쿼리 문자열 파라미터를 입력할 수 있습니다. 이렇게 하려면 `color=red&size=medium`처럼 각 문자열 파라미터 간에 앰퍼샌드(`&`)를 추가합니다. 쿼리 문자열 파라미터는 URL 내에서 원하는 순서로 지정할 수 있습니다.  
쿼리 문자열 파라미터의 이름은 `Expires`, `Signature`, `Key-Pair-Id`로 지정할 수 없습니다.  
** 4. `Expires=`*Unix 시간 형식(초) 및 협정 세계시(UTC) 기준의 날짜 및 시간***  
URL에서 파일에 대한 액세스 허용을 중지하게 할 날짜 및 시간입니다.  
Unix 시간 형식(초) 및 협정 세계시(UTC) 기준의 URL 만료 날짜 및 시간을 지정합니다. 예를 들면 2026년 1월 1일 오전 10시(UTC)를 이 주제의 시작 부분에 있는 예와 같이 Unix 시간 형식의 `1767290400`으로 변환합니다.  
에포크 시간을 사용하려면 `9223372036854775807`(금요일, 2262년 4월 11일 23:47:16.854 UTC) 이전 날짜에 대한 64비트 정수를 지정합니다.  
  
UTC에 대한 자세한 내용은 [RFC 3339, 인터넷의 날짜 및 시간: 타임스탬프](https://tools.ietf.org/html/rfc3339)를 참조하세요.  
** 5. `&Signature=`*정책 설명의 해시 및 서명된 버전***  
JSON 정책 설명을 해시, 서명 및 base64로 인코딩한 버전입니다. 자세한 내용은 [미리 준비된 정책을 사용하는 서명된 URL에 대한 서명 생성](#private-content-canned-policy-creating-signature) 섹션을 참조하세요.  
** 6. `&Key-Pair-Id=`*서명을 생성하는 데 사용 중인 해당 프라이빗 키가 있는 CloudFront 퍼블릭 키의 퍼블릭 키 ID***  
CloudFront 퍼블릭 키의 ID입니다(예: `K2JCJMDEHXQW5F`). CloudFront는 서명된 URL을 확인할 때 사용할 퍼블릭 키를 퍼블릭 키 ID로 판단합니다. CloudFront는 서명의 정보를 정책 설명의 정보와 비교하고 URL이 변조되지 않았음을 확인합니다.  
이 퍼블릭 키는 배포에서 신뢰할 수 있는 서명자인 키 그룹에 속해야 합니다. 자세한 내용은 [서명된 URL 및 서명된 쿠키를 생성할 수 있는 서명자 지정](private-content-trusted-signers.md) 섹션을 참조하세요.

## 미리 준비된 정책을 사용하는 서명된 URL에 대한 서명 생성
<a name="private-content-canned-policy-creating-signature"></a>

미리 준비된 정책을 사용하는 서명된 URL의 서명을 만들려면 다음 절차를 완료하세요.

**Topics**
+ [미리 준비된 정책을 사용하는 서명된 URL의 정책 설명 생성](#private-content-canned-policy-creating-policy-statement)
+ [미리 준비된 정책을 사용하는 서명된 URL에 대한 서명 생성](#private-content-canned-policy-signing-policy-statement)

### 미리 준비된 정책을 사용하는 서명된 URL의 정책 설명 생성
<a name="private-content-canned-policy-creating-policy-statement"></a>

미리 준비된 정책을 사용하여 서명된 URL을 만드는 경우, `Signature` 파라미터는 정책 설명의 해시 및 서명된 버전입니다. 미리 준비된 정책을 사용하는 서명된 URL의 경우, 사용자 지정 정책을 사용하는 서명된 URL과 마찬가지로 URL에 정책 설명을 포함하지 않습니다. 정책 설명을 만들려면 다음 절차를 수행하세요.<a name="private-content-canned-policy-creating-policy-statement-procedure"></a>

**미리 준비된 정책을 사용하는 서명된 URL에 대한 정책 설명을 만들려면**

1. 다음 JSON 형식과 UTF-8 문자 인코딩을 사용하여 정책 설명을 구성합니다. 지정된 모든 문장 부호 및 기타 리터럴 값을 정확히 포함해야 합니다. `Resource` 및 `DateLessThan` 파라미터에 대한 내용은 [미리 준비된 정책을 사용하는 서명된 URL에 대한 정책 설명에서 지정한 값](#private-content-canned-policy-statement-values)를 참조하세요.

   ```
   {
       "Statement": [
           {
               "Resource": "base URL or stream name",
               "Condition": {
                   "DateLessThan": {
                       "AWS:EpochTime": ending date and time in Unix time format and UTC
                   }
               }
           }
       ]
   }
   ```

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

#### 미리 준비된 정책을 사용하는 서명된 URL에 대한 정책 설명에서 지정한 값
<a name="private-content-canned-policy-statement-values"></a>

미리 준비된 정책에 대한 정책 설명을 만들 때 다음 값을 지정합니다.

**리소스**  
`Resource`에 대해 값을 하나만 지정할 수 있습니다.
쿼리 문자열(있는 경우)을 포함하지만 CloudFront `Expires`, `Signature` 및 `Key-Pair-Id` 파라미터를 제외한 기본 URL입니다. 예를 들면 다음과 같습니다.  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
다음을 참조하세요.  
+ **프로토콜(Protocol)** – 값은 `http://` 또는 `https://`로 시작해야 합니다.
+ **쿼리 문자열 파라미터(Query string parameters)** – 쿼리 문자열 파라미터가 없는 경우, 물음표를 생략합니다.
+ **대체 도메인 이름(Alternate domain names)** – URL에 대체 도메인 이름(CNAME)을 지정하는 경우, 웹 페이지 또는 애플리케이션의 파일을 참조할 때 대체 도메인 이름을 지정해야 합니다. 객체에 대한 Amazon S3 URL을 지정하지 마세요.

**DateLessThan**  
Unix 시간 형식(초) 및 협정 세계시(UTC) 기준의 URL 만료 날짜 및 시간. 예를 들면 2026년 1월 1일 오전 10시(UTC)를 Unix 시간 형식의 1767290400으로 변환합니다.  
이 값은 서명된 URL의 `Expires` 쿼리 문자열 파라미터 값과 일치해야 합니다. 값을 인용 부호로 묶지 마세요.  
자세한 내용은 [CloudFront가 서명된 URL에서 만료 날짜 및 시간을 확인하는 시기](private-content-signed-urls.md#private-content-check-expiration) 단원을 참조하세요.

#### 미리 준비된 정책을 사용하는 서명된 URL에 대한 정책 설명 예제
<a name="private-content-canned-policy-creating-policy-statement-example"></a>

서명된 URL에 다음 예제의 정책 설명을 사용할 경우, 사용자는 UTC 기준 2026년 1월 1일 오전 10시까지 `https://d111111abcdef8.cloudfront.net/horizon.jpg` 파일에 액세스할 수 있습니다.

```
{
    "Statement": [
        {
            "Resource": "https://d111111abcdef8.cloudfront.net/horizon.jpg?size=large&license=yes",
            "Condition": {
                "DateLessThan": {
                    "AWS:EpochTime": 1767290400
                }
            }
        }
    ]
}
```

### 미리 준비된 정책을 사용하는 서명된 URL에 대한 서명 생성
<a name="private-content-canned-policy-signing-policy-statement"></a>

서명된 URL의 `Signature` 파라미터 값을 만들려면 [미리 준비된 정책을 사용하는 서명된 URL의 정책 설명 생성](#private-content-canned-policy-creating-policy-statement)에서 만든 정책 설명을 해시하고 서명합니다.

다음을 참조하여 정책 설명을 해시, 서명 및 인코딩하는 방법에 대한 추가적인 내용과 예제를 확인하세요.
+ [base64 인코딩 및 암호화를 위한 Linux 명령 및 OpenSSL](private-content-linux-openssl.md)
+ [서명 URL에 대한 서명을 만드는 코드 예제](PrivateCFSignatureCodeAndExamples.md)<a name="private-content-canned-policy-creating-signature-download-procedure"></a>

**옵션 1: 미리 준비된 정책을 사용하여 서명을 만들려면**

1. SHA-1 해시 함수와 생성된 RSA 또는 ECDSA 프라이빗 키를 사용하여 [미리 준비된 정책을 사용하는 서명된 URL에 대한 정책 설명을 만들려면](#private-content-canned-policy-creating-policy-statement-procedure) 절차에서 만든 정책 설명을 해시하고 서명합니다. 공백이 삭제된 버전의 정책 설명을 사용합니다.

   해시 함수에 필요한 프라이빗 키의 경우 배포에 대해 신뢰할 수 있는 활성 키 그룹에 퍼블릭 키가 있는 프라이빗 키를 사용합니다.
**참고**  
정책 설명을 해시 및 서명하는 방법은 프로그래밍 언어와 플랫폼에 따라 달라집니다. 샘플 코드에 대한 내용은 [서명 URL에 대한 서명을 만드는 코드 예제](PrivateCFSignatureCodeAndExamples.md)를 참조하세요.

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

1. MIME base64 인코딩 기준으로 문자열을 base64로 인코딩합니다. 자세한 내용은 *RFC 2045, MIME(Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies*의 [Section 6.8, Base64 Content-Transfer-Encoding](https://tools.ietf.org/html/rfc2045#section-6.8)을 참조하세요.

1. URL 쿼리 문자열에서 사용할 수 없는 문자를 유효한 문자로 교체합니다. 아래 표에 사용할 수 없는 문자와 유효한 문자가 나열되어 있습니다.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html)

1. 서명된 URL의 `&Signature=` 뒤에 결과 값을 추가하고 [미리 준비된 정책을 사용하여 서명된 URL을 만들려면](#private-content-creating-signed-url-canned-policy-procedure)로 돌아가서 서명된 URL 부분을 마저 연결합니다.