既定ポリシーを使用して署名付き URL を作成する - Amazon CloudFront

既定ポリシーを使用して署名付き URL を作成する

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

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

  2. 以下の値を、リストされた順に連結し、この署名付き URL の例に示されている形式を複製します。

    https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Expires=1357034400&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 形式をカスタマイズする」を参照してください。

    • 以下の CloudFront URL は、ディストリビューション内のイメージファイルの URL です (CloudFront ドメイン名を使用)。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 です。どちらも代替ドメイン名を使用します。2 番目にはクエリ文字列が含まれています。

      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. ?

    ? は、クエリ文字列パラメータがベース URL の後に続くことを示します。独自のクエリ文字列パラメータがない場合も ? を含めます。

    3. クエリ文字パラメータ (ある場合) &

    この値はオプションです。独自のクエリ文字列パラメータ、たとえば次のクエリ文字列パラメータを追加すると仮定します。

    color=red&size=medium

    この場合は、? の後、かつ Expires パラメータの前にパラメータを追加します。特定のまれな状況では、Key-Pair-Id の後にクエリ文字列パラメータを配置する必要があります。

    重要

    パラメータに ExpiresSignature、または Key-Pair-Id という名前を付けることはできません。

    独自のパラメータを追加する場合は、各パラメータの後に & を付加します (最後のパラメータにも付加します)。

    4.Expires=Unix 時間形式 (秒単位) および協定世界時 (UTC) の日時

    URL によるファイルへのアクセスの許可を停止する日付と時刻。

    有効期限切れ日時を Unix 時間形式 (秒単位) および協定世界時 (UTC) で指定します。例えば、このトピックの冒頭にある例に示すように、2013 年 1 月 1 日午前 10:00 UTC は Unix 時間形式で 1357034400 に変換されます。エポック時間を使用するには、2147483647 (2038 年 1 月 19 日 03:14:07 UTC) 以前の日付に 32 ビット整数を使用します。UTC の詳細については、RFC 3339, Date and Time on the Internet: Timestamps を参照してください。

    5. &Signature=ハッシュ化および署名されたバージョンのポリシーステートメント

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

    6. &Key-Pair-Id=署名の生成に使用しているプライベートキーに対応する CloudFront パブリックキーのパブリックキー ID

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

    このパブリックキーは、ディストリビューションの信頼された署名者であるキーグループに属している必要があります。詳細については、「署名付き URL と署名付き Cookie を作成できる署名者を指定する」を参照してください。

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

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

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

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

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

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

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

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

リソース
注記

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

クエリ文字列 (ある場合) が含まれるベース URL。ただし、CloudFront の ExpiresSignature、および Key-Pair-Id パラメータが除外されます。次に例を示します。

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

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

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

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

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

DateLessThan

URL の有効期限切れ日時。Unix 時間形式 (秒単位) および協定世界時 (UTC) で指定します。たとえば、UTC の 2013 年 1 月 1 日午前 10 時 00 分は、Unix 時間形式の 1357034400 に変換されます。

この値は、署名付き URL 内の Expires クエリ文字列パラメータの値と一致する必要があります。値を引用符で囲まないでください。

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

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

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

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

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

署名付き URL の Signature パラメータの値を作成するには、「既定ポリシーを使用する署名付き URL のポリシーステートメントを作成する」で作成したポリシーステートメントをハッシュ化して署名します。

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

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

    ハッシュ関数に必要なプライベートキーには、対応するパブリックキーがディストリビューション内のアクティブな信頼されたキーグループにあるものを使用してください。

    注記

    ポリシーステートメントをハッシュ化および署名するための方法は、プログラミング言語およびプラットフォームによって異なります。サンプルコードについては、「署名付き 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 の各パートの連結を終了します。