

# 既定ポリシーを使用して署名付き Cookie を設定する
<a name="private-content-setting-signed-cookie-canned-policy"></a>

既定ポリシーを使用して署名付き Cookie を設定するには、以下のステップを実行します。署名を作成するには、「[既定ポリシーを使用する署名付き Cookie の署名を作成する](#private-content-canned-policy-signature-cookies)」を参照してください。<a name="private-content-setting-signed-cookie-canned-policy-procedure"></a>

**既定ポリシーを使用して署名付き Cookie を設定するには**

1. .NET または Java を使用して署名付き Cookie を作成しており、キーペアのプライベートキーをデフォルトの .pem 形式から .NET または Java 対応の形式に変更していない場合は、それを変換します。詳細については、「[プライベートキーの形式を変更する (.NET および Java のみ)](private-content-trusted-signers.md#private-content-reformatting-private-key)」を参照してください。

1. 承認されたビューワーに 3 つの `Set-Cookie` ヘッダーを送信するようにアプリケーションを設定します (ハッシュアルゴリズムを指定する場合は 4 つ)。各 `Set-Cookie` ヘッダーには名前と値のペアを 1 つだけ含めることができ、CloudFront 署名付き Cookie では 3 つの名前と値のペアが必要であるため、3 つの `Set-Cookie` ヘッダーが必要です。名前と値のペアは、`CloudFront-Expires`、`CloudFront-Signature`、および `CloudFront-Key-Pair-Id` です。オプションで、4 番目の名前と値のペアである `CloudFront-Hash-Algorithm` を含めて、署名に使用されるハッシュアルゴリズムを指定できます。アクセスを制御するファイルに対してユーザーが最初のリクエストを行う前に、値がビューワーに存在している必要があります。
**注記**  
一般的に、`Expires` 属性と `Max-Age` 属性を除外することをお勧めします。これらの属性を除外すると、ユーザーがブラウザを閉じたときに、ブラウザで Cookie が削除されるため、ユーザーがコンテンツに不正アクセスする可能性が低くなります。詳細については、「[署名付き Cookie の悪用を防止する](private-content-signed-cookies.md#private-content-signed-cookie-misuse)」を参照してください。

   **Cookie の属性の名前では、大文字と小文字が区別されます**。

   改行は、属性を判読しやすくするためにのみ含まれています。

   ```
   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
   
   Set-Cookie: 
   CloudFront-Hash-Algorithm={{SHA1 or SHA256}}; 
   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` 属性を指定するかどうかにかかわらず、代替ドメイン名をディストリビューションに追加する必要があります。詳細については、トピック「[すべてのディストリビューション設定リファレンス](distribution-web-values-specify.md)」の「[代替ドメイン名 (CNAME)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME)」を参照してください。  
**(オプション) `Path`**  
リクエストされたファイルのパス。`Path` 属性を指定しない場合、デフォルト値は URL のパスです。  
**`Secure`**  
リクエストを送信する前に、ビューワーが Cookie を暗号化することを要求します。Cookie の属性を中間者攻撃から保護するために、HTTPS 接続で `Set-Cookie` ヘッダーを送信することをお勧めします。  
**`HttpOnly`**  
ブラウザ (サポートされている場合) が Cookie 値とどのようにやり取りするかを定義します。`HttpOnly` では、Cookie 値は JavaScript からアクセスできません。この予防策は、クロスサイトスクリプティング (XSS) 攻撃の軽減に役立ちます。詳細については、「[HTTP Cookie の使用](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)」を参照してください。  
**`CloudFront-Expires`**  
有効期限切れ日時を Unix 時間形式 (秒単位) および協定世界時 (UTC) で指定します。例えば、UTC の 2026 年 1 月 1 日午前 10 時 00 分は、Unix 時間形式の 1767290400 に変換されます。  
エポック時間を使用するには、`9223372036854775807` (2262 年 4 月 11 日金曜日の 23:47:16.854 UTC) 以前の日付に 64 ビット整数を指定します。  
UTC の詳細については、*RFC 3339, Date and Time on the Internet: Timestamps* ([https://tools.ietf.org/html/rfc3339](https://tools.ietf.org/html/rfc3339)) を参照してください。  
**`CloudFront-Signature`**  
ハッシュ化され、署名された base64 エンコードバージョンの JSON ポリシーステートメント。詳細については、「[既定ポリシーを使用する署名付き Cookie の署名を作成する](#private-content-canned-policy-signature-cookies)」を参照してください。  
**`CloudFront-Key-Pair-Id`**  
CloudFront パブリックキーの ID (`K2JCJMDEHXQW5F` など)。パブリックキー ID は、署名付き URL の検証に使用するパブリックキーを CloudFront に通知します。CloudFront は、署名内の情報をポリシーステートメント内の情報と比較して、URL が改ざんされていないことを確認します。  
このパブリックキーは、ディストリビューションの信頼された署名者であるキーグループに属している必要があります。詳細については、「[署名付き URL と署名付き Cookie を作成できる署名者を指定する](private-content-trusted-signers.md)」を参照してください。  
**`CloudFront-Hash-Algorithm`**  
(オプション) 署名を作成するために使用されるハッシュアルゴリズム。サポートされている値は `SHA1` および `SHA256` です。この Cookie を含めない場合、CloudFront のデフォルトは `SHA1` です。

以下は、ファイルの URL のディストリビューションに関連付けられたドメイン名を使用する場合の、1 つの署名付き Cookie の `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
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly
```

以下は、ファイルの URL に代替ドメイン名 example.org を使用している場合の、1 つの署名付き Cookie の `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
Set-Cookie: CloudFront-Hash-Algorithm=SHA256; Domain=example.org; Path=/images/*; Secure; HttpOnly
```

URL で代替ドメイン名 (example.com など) を使用する場合は、`Domain` 属性を指定するかどうかにかかわらず、代替ドメイン名をディストリビューションに追加する必要があります。詳細については、トピック「[すべてのディストリビューション設定リファレンス](distribution-web-values-specify.md)」の「[代替ドメイン名 (CNAME)](DownloadDistValuesGeneral.md#DownloadDistValuesCNAME)」を参照してください。

## 既定ポリシーを使用する署名付き Cookie の署名を作成する
<a name="private-content-canned-policy-signature-cookies"></a>

既定ポリシーを使用する署名付き Cookie の署名を作成するには、次の手順を実行します。

**Topics**
+ [既定ポリシーを使用する署名付き Cookie のポリシーステートメントを作成する](#private-content-canned-policy-statement-cookies)
+ [既定ポリシーを使用する署名付き Cookie の署名を作成するためのポリシーステートメントに署名する](#private-content-canned-policy-cookies-signing-policy-statement)

### 既定ポリシーを使用する署名付き Cookie のポリシーステートメントを作成する
<a name="private-content-canned-policy-statement-cookies"></a>

既定ポリシーを使用する署名付き Cookie を設定した場合、`CloudFront-Signature` 属性は、ポリシーステートメントのハッシュ化および署名されたバージョンです。カスタムポリシーを使用する署名付き Cookie とは異なり、既定ポリシーを使用する署名付き Cookie では、`Set-Cookie` ヘッダーにポリシーステートメントを含めません。ポリシーステートメントを作成するには、以下の手順を実行します。<a name="private-content-canned-policy-statement-cookies-procedure"></a>

**既定ポリシーを使用する署名付き Cookie のポリシーステートメントを作成するには**

1. 以下の JSON 形式および UTF-8 文字エンコードを使用してポリシーステートメントを構築します。すべての句読点および他のリテラル値を、指定されたとおりに正確に含めます。`Resource` および `DateLessThan` パラメータの詳細については、「[署名付き Cookie の既定ポリシーのポリシーステートメントで指定する値](#private-content-canned-policy-statement-cookies-values)」を参照してください。

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

1. ポリシーステートメントからすべての空白 (タブと改行文字を含む) を削除します。アプリケーションコード内の文字列にエスケープ文字を含めることが必要になる場合があります。

#### 署名付き Cookie の既定ポリシーのポリシーステートメントで指定する値
<a name="private-content-canned-policy-statement-cookies-values"></a>

既定ポリシーのポリシーステートメントを作成する場合、以下の値を指定します。

**リソース**  
クエリ文字列 (存在する場合) を含むベース URL。以下に例を示します。  
`https://d111111abcdef8.cloudfront.net/images/horizon.jpg?size=large&license=yes`  
`Resource` の日付形式は 1 つだけ指定できます。  
次の点に注意してください。  
+ **プロトコル** – 値は `http://` または `https://` で始まっている必要があります。
+ **クエリ文字列パラメータ** – クエリ文字列パラメータがない場合は、疑問符を省略します。
+ **代替ドメイン名** – URL で代替ドメイン名 (CNAME) を指定する場合は、ウェブページまたはアプリケーション内のファイルを参照するときに代替ドメイン名を指定する必要があります。ファイルの Amazon S3 URL を指定しないでください。

**DateLessThan**  
URL の有効期限切れ日時。Unix 時間形式 (秒単位) および協定世界時 (UTC) で指定します。値を引用符で囲まないでください。  
たとえば、UTC の 2015 年 3 月 16 日午前 10 時 00 分は、UNIX 時間形式の 1426500000 に変換されます。  
この値は、`CloudFront-Expires` ヘッダーの `Set-Cookie` 属性の値と一致する必要があります。値を引用符で囲まないでください。  
詳細については、「[CloudFront が署名付き Cookie の有効期限切れ日時を確認するタイミング](private-content-signed-cookies.md#private-content-check-expiration-cookie)」を参照してください。

#### 既定ポリシーのポリシーステートメントの例
<a name="private-content-canned-policy-cookies-sample-policy-statement"></a>

署名付き Cookie 内で以下のポリシーステートメントの例を使用すると、ユーザーは、UTC の 2015 年 3 月 16 日午前 10 時 00 分までファイル `https://d111111abcdef8.cloudfront.net/horizon.jpg` にアクセスできます。

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

### 既定ポリシーを使用する署名付き Cookie の署名を作成するためのポリシーステートメントに署名する
<a name="private-content-canned-policy-cookies-signing-policy-statement"></a>

`CloudFront-Signature` ヘッダーの `Set-Cookie` 属性の値を作成するには、「[既定ポリシーを使用する署名付き Cookie のポリシーステートメントを作成するには](#private-content-canned-policy-statement-cookies-procedure)」で作成したポリシーステートメントをハッシュ化して署名します。

ポリシーステートメントのハッシュ化、署名、およびエンコードを行う方法の詳細および例については、以下のトピックを参照してください。
+ [Linux コマンドおよび OpenSSL を使用した Base64 エンコードおよび暗号化](private-content-linux-openssl.md)
+ [署名付き URL の署名を作成するためのコード例](PrivateCFSignatureCodeAndExamples.md)

**注記**  
リンクされた例では、デフォルトで SHA-1 を使用します。代わりに SHA-256 を使用するには、OpenSSL コマンドで `sha1` を `sha256` に置き換え、`CloudFront-Hash-Algorithm` Cookie を含め、値を `SHA256` に設定します。<a name="private-content-canned-policy-cookie-creating-signature-procedure"></a>

**既定ポリシーを使用して署名付き Cookie の署名を作成するには**

1. 「[既定ポリシーを使用する署名付き Cookie のポリシーステートメントを作成するには](#private-content-canned-policy-statement-cookies-procedure)」の手順で作成したポリシーステートメントを、SHA-1 または SHA-256 ハッシュ関数と RSA を使用してハッシュ化し、署名します。空白を含まないバージョンのポリシーステートメントを使用します。

   SHA-256 を使用する場合は、値が `SHA256` の`CloudFront-Hash-Algorithm` Cookie を含める必要があります。

   ハッシュ関数に必要なプライベートキーには、対応するパブリックキーがディストリビューション内のアクティブな信頼されたキーグループにあるものを使用してください。
**注記**  
ポリシーステートメントをハッシュ化および署名するための方法は、プログラミング言語およびプラットフォームによって異なります。サンプルコードについては、「[署名付き 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/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-canned-policy.html)

1. 結果の値を、`Set-Cookie` の名前と値のペアの `CloudFront-Signature` ヘッダーに含めます。次に、「[既定ポリシーを使用して署名付き Cookie を設定するには](#private-content-setting-signed-cookie-canned-policy-procedure)」に戻り、`Set-Cookie` の `CloudFront-Key-Pair-Id` ヘッダーを追加します。