メニュー
Amazon CloudFront
開発者ガイド (API Version 2016-09-29)

既定ポリシーを使用した署名付き Cookie の設定

既定ポリシーを使用して署名付き Cookie を設定するには、以下の手順を実行します。

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

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

  2. 承認されたビューアに 3 つの Set-Cookie ヘッダーを送信するアプリケーションをプログラムします。各 Set-Cookie ヘッダーには名前と値のペアを 1 つだけ含めることができ、CloudFront 署名付き Cookie では 3 つの名前と値のペアが必要であるため、3 つの Set-Cookie ヘッダーが必要です。名前と値のペアは、CloudFront-ExpiresCloudFront-Key-Pair-Id、および CloudFront-Signature です。アクセスを制御するオブジェクトに対してユーザーが最初のリクエストを行う前に、値がビューアに存在している必要があります。

    注記

    一般的に、Expires 属性と Max-Age 属性を除外することをお勧めします。これらの属性を除外すると、ユーザーがブラウザを閉じたときに、ブラウザで Cookie が削除されるため、ユーザーがコンテンツに不正アクセスする可能性が低くなります。詳細については、「署名付き Cookie の悪用の防止」を参照してください。

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

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

    Copy
    Set-Cookie: Domain=optional domain name; Path=/optional directory path; Secure; HttpOnly; CloudFront-Expires=date and time in Unix time format (in seconds) and Coordinated Universal Time (UTC) Set-Cookie: Domain=optional domain name; Path=/optional directory path; Secure; HttpOnly; CloudFront-Signature=hashed and signed version of the policy statement Set-Cookie: Domain=optional domain name; Path=/optional directory path; Secure; HttpOnly; CloudFront-Key-Pair-Id=active CloudFront key pair Id for the key pair that you are using to generate the signature
    (オプション)Domain

    リクエストされたオブジェクトのドメイン名。Domain 属性を指定しない場合、デフォルト値は URL のドメイン名で、指定されたドメイン名にのみ適用され、サブドメインには適用されません。Domain 属性を指定する場合、サブドメインにも適用されます。ドメイン名の先頭のドット(たとえば、Domain=.example.com)はオプションです。さらに、Domain 属性を指定する場合は、URL のドメイン名と Domain 属性の値が一致している必要があります。

    CloudFront がディストリビューションに割り当てたドメイン名(d111111abcdef8.cloudfront.net など)を指定することはできますが、*.cloudfront.net をドメイン名として指定することはできません。

    URL で代替ドメイン名(example.com など)を使用する場合は、Domain 属性を指定するかどうかにかかわらず、代替ドメイン名をディストリビューションに追加する必要があります。詳細については、トピック「ウェブディストリビューションを作成または更新する場合に指定する値」の「代替ドメイン名(CNAME)」を参照してください。

    (オプション)Path

    リクエストされたオブジェクトのパス。Path 属性を指定しない場合、デフォルト値は URL のパスです。

    安全性

    リクエストを送信する前に、ビューアが Cookie を暗号化することを要求します。Cookie の属性を中間者攻撃から保護するために、HTTPS 接続で Set-Cookie ヘッダーを送信することをお勧めします。

    HttpOnly

    ビューアが HTTP または HTTPS リクエストでのみ Cookie を送信することを要求します。

    CloudFront-Expires

    有効期限切れ日時を Unix 時間形式(秒単位)および協定世界時(UTC)で指定します。たとえば、UTC の 2015 年 3 月 16 日午前 10 時 00 分は、UNIX 時間形式の 1426500000 に変換されます。UTC の詳細については、「RFC 3339、インターネットでの日付と時間: タイムスタンプ」(http://tools.ietf.org/html/rfc3339)を参照してください。

    CloudFront-Signature

    ハッシュ化され、署名された base64 エンコードバージョンの JSON ポリシーステートメント。詳細については、「既定ポリシーを使用する署名付き Cookie の署名の作成」を参照してください。

    CloudFront-Key-Pair-Id

    アクティブな CloudFront キーペアの ID(APKA9ONS7QCOWEXAMPLE など)。CloudFront キーペア ID は、署名付き Cookie の検証に使用するパブリックキーを CloudFront に指示します。CloudFront は、署名内の情報をポリシーステートメント内の情報と比較して、URL が改ざんされていないことを確認します。

    CloudFront 署名付き Cookie に含めるキーペア ID は、該当のキャッシュ動作に対するいずれかの信頼された署名者の AWS アカウントに関連付けられる必要があります。

    詳細については、「署名付き URL と署名付き Cookie(信頼された署名者)の作成が可能な AWS アカウントの指定」を参照してください。

    CloudFront キーペアを更新している間にキーペアを無効にした場合、いずれかの信頼された署名者の新しい有効なキーペアを使用するようにアプリケーションを更新する必要があります。キーペアの更新の詳細については、「CloudFront キーペアを更新する」を参照してください。

オブジェクトの URL のディストリビューションに関連付けられたドメイン名を使用する場合の、1 つの署名付き Cookie の Set-Cookie ヘッダーの例

Copy
Set-Cookie: Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly; CloudFront-Expires=1426500000 Set-Cookie: Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly; CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_ Set-Cookie: Domain=d111111abcdef8.cloudfront.net; Path=/images/*; Secure; HttpOnly; CloudFront-Key-Pair-Id=APKA9ONS7QCOWEXAMPLE

オブジェクトの URL に代替ドメイン名 example.org を使用している場合の、1 つの署名付き Cookie の Set-Cookie ヘッダーの例:

Copy
Set-Cookie: Domain=example.org; Path=/images/*; Secure; HttpOnly; CloudFront-Expires=1426500000 Set-Cookie: Domain=example.org; Path=/images/*; Secure; HttpOnly; CloudFront-Signature=yXrSIgyQoeE4FBI4eMKF6ho~CA8_ Set-Cookie: Domain=example.org; Path=/images/*; Secure; HttpOnly; CloudFront-Key-Pair-Id=APKA9ONS7QCOWEXAMPLE

URL で代替ドメイン名(example.com など)を使用する場合は、Domain 属性を指定するかどうかにかかわらず、代替ドメイン名をディストリビューションに追加する必要があります。詳細については、トピック「ウェブディストリビューションを作成または更新する場合に指定する値」の「代替ドメイン名(CNAME)」を参照してください。

既定ポリシーを使用する署名付き Cookie の署名の作成

既定ポリシーを使用する署名付き Cookie の署名を作成するには、以下のタスクを実行します。

  1. ポリシーステートメントを作成します。「既定ポリシーを使用する署名付き Cookie のポリシーステートメントの作成」を参照してください。

  2. ポリシーステートメントに署名して、署名を作成します。「既定ポリシーを使用する署名付き Cookie の署名を作成するためのポリシーステートメントの署名」を参照してください。

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

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

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

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

    Copy
    { "Statement":[ { "Resource":"base URL or stream name", "Condition":{ "DateLessThan":{ "AWS:EpochTime":ending date and time in Unix time format and UTC } } } ] }
  2. ポリシーステートメントからすべての空白文字(タブと改行文字を含む)を削除します。アプリケーションコード内の文字列にエスケープ文字を含めることが必要になる場合があります。

署名付き Cookie の既定ポリシーのポリシーステートメントで指定する値

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

リソース

クエリ文字列(存在する場合)を含むベース URL。以下に例を示します。

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

Resource の日付形式は 1 つだけ指定できます。

次の点に注意してください。

  • プロトコル – 値は http://、https://、または http*:// で始まっている必要があります。

  • クエリ文字列パラメーター – クエリ文字列パラメーターがない場合は、疑問符を省略します。

  • 代替ドメイン名 – URL で代替ドメイン名(CNAME)を指定する場合は、ウェブページまたはアプリケーション内のオブジェクトを参照するときに代替ドメイン名を指定する必要があります。オブジェクトの Amazon S3 URL を指定しないでください。

DateLessThan

URL の有効期限切れ日時。Unix 時間形式(秒単位)および協定世界時(UTC)で指定します。値を引用符で囲まないでください。

たとえば、UTC の 2015 年 3 月 16 日午前 10 時 00 分は、UNIX 時間形式の 1426500000 に変換されます。

この値は、Set-Cookie ヘッダーの CloudFront-Expires 属性の値と一致する必要があります。値を引用符で囲まないでください。

詳細については、「CloudFront が署名付き Cookie 内の有効期限切れ日時を確認するタイミング」を参照してください。

既定ポリシーのポリシーステートメントの例

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

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

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

Set-Cookie ヘッダーの CloudFront-Signature 属性の値を作成するには、「既定ポリシーを使用する署名付き Cookie のポリシーステートメントを作成するには」で作成したポリシーステートメントをハッシュ化して署名します。

ポリシーステートメントのハッシュ化、署名、およびエンコードを行う方法の詳細および例については、以下のトピックを参照してください。

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

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

    ハッシュ関数で必要とされるプライベートキーについては、該当する有効な信頼済み署名者に関連付けられたプライベートキーを使用します。

    注記

    ポリシーステートメントをハッシュ化および署名するための方法は、プログラミング言語およびプラットフォームによって異なります。サンプルコードについては、「署名付き URL の署名を作成するためのコード例」を参照してください。

  2. ハッシュ化および署名された文字列から、空白文字(タブや改行文字を含む)を削除します。

  3. MIME base64 エンコーディングを使用して文字列を Base64 エンコードします。詳細については、『RFC 2045, MIME (Multipurpose Internet Mail Extensions) Part One: Format of Internet Message Bodies』の「Section 6.8, Base64 Content-Transfer-Encoding」を参照してください。

  4. URL クエリ文字列内の無効な文字を有効な文字で置き換えます。次の表に無効な文字と有効な文字を示します。

    無効な文字(置換元) 有効な文字(置換先)

    +

    - (ハイフン)

    =

    _(下線)

    /

    ~(チルダ)

  5. 結果の値を、CloudFront-Signature の名前と値のペアの Set-Cookie ヘッダーに含めます。次に、「既定ポリシーを使用して署名付き Cookie を設定するには」に戻り、CloudFront-Key-Pair-IdSet-Cookie ヘッダーを追加します。