署名付き URL を使用する
署名付き URL には、有効期限切れ日時など、追加の情報も含まれており、コンテンツへのアクセスをより詳細に制御できます。この追加情報は、既定ポリシーまたはカスタムポリシーに基づくポリシーステートメントに含まれます。既定ポリシーとカスタムポリシーの違いを以下の 2 つのセクションで説明します。
注記
既定ポリシーを使用して一部の署名付き URL を作成し、同じディストリビューションで、カスタムポリシーを使用して一部の署名付き URL を作成することができます。
トピック
署名付き URL に既定ポリシーとカスタムポリシーのどちらを使用するかを決定する
署名付き URL を作成する場合、URL の有効期間など、署名付き URL で制限を指定する JSON 形式のポリシーステートメントを作成します。既定ポリシーまたはカスタムポリシーのいずれかを使用できます。既定ポリシーとカスタムポリシーの比較を以下に示します。
説明 | 既定ポリシー | カスタムポリシー |
---|---|---|
ポリシーステートメントを複数のファイル用に再利用できる。ポリシーステートメントを再利用するには、 |
いいえ |
はい |
ユーザーがコンテンツへのアクセスを開始できる日時を指定できる。 |
いいえ |
はい (オプション) |
ユーザーがコンテンツにアクセスできなくなる日時を指定できる。 |
はい |
はい |
コンテンツにアクセスできるユーザーの IP アドレスまたは IP アドレス範囲を指定できる。 |
いいえ |
はい (オプション) |
署名付き URL にポリシーの base64 エンコードされたバージョンが含まれているため、URL が長くなる。 |
いいえ |
はい |
既定ポリシーを使用して署名付き URL を作成する方法については、「既定ポリシーを使用して署名付き URL を作成する」を参照してください。
カスタムポリシーを使用して署名付き URL を作成する方法については、「カスタムポリシーを使用して署名付き URL を作成する」を参照してください。
署名付き URL の仕組み
署名付き URL 用の CloudFront と Amazon S3 の設定方法と、ユーザーが署名付き URL を使用してファイルをリクエストしたときの CloudFront の応答方法の概要を次に示します。
-
CloudFront ディストリビューションで、1 つ以上の信頼されたキーグループを指定します。指定したグループには、CloudFront が URL 署名の検証に使用できるパブリックキーが含まれている必要があります。対応するプライベートキーを使用して URL に署名します。
詳細については、「署名付き URL と署名付き Cookie を作成できる署名者を指定する」を参照してください。
-
アプリケーションを開発して、ユーザーがコンテンツへのアクセス許可を持つかどうかを決定し、アプリケーションでアクセスを制限するファイルまたは部分用に署名付き URL を作成するかを決定します。詳細については、以下のトピックを参照してください。
-
署名付き URL を必要とするファイルをユーザーが要求します。
-
アプリケーションは、ファイルにアクセスするための資格がユーザーにあることを検証します。たとえば、ユーザーがサインインしていること、コンテンツへのアクセス料を支払っていること、他のいくつかのアクセス要件を満たしていることを検証します。
-
アプリケーションは署名付き URL を作成してエンドユーザーに返します。
-
署名付き URL を使用すると、ユーザーはコンテンツのダウンロードやストリーミングができます。
このステップは自動で実行されます。ユーザーは、コンテンツにアクセスする以外に、何も行う必要はありません。たとえば、ユーザーがウェブブラウザでコンテンツにアクセスすると、アプリケーションは署名付き URL をブラウザに返します。ブラウザは、直ちに、署名付き URL を使用して CloudFront エッジキャッシュ内のファイルにアクセスします。ユーザーからの介入はありません。
-
CloudFront はパブリックキーを使用して署名を検証し、URL が改ざんされていないことを確認します。署名が無効である場合、リクエストは拒否されます。
署名が有効である場合、CloudFront は URL のポリシーステートメントを参照して (または既定ポリシーを使用している場合はポリシーステートメントを作成して)、リクエストがまだ有効であることを確認します。たとえば、URL の開始日時と終了日時を指定した場合、CloudFront は、アクセスが許可されている期間にユーザーがコンテンツへのアクセスを試みていることを確認します。
リクエストがポリシーステートメントの要件を満たしている場合、CloudFront は標準の操作を実行します。つまり、ファイルがエッジキャッシュにすでに存在するかどうかを確認し、必要に応じてリクエストをオリジンに転送して、ファイルをユーザーに返します。
注記
署名なし URL にクエリ文字列パラメータが含まれている場合は、署名する URL にそれらのパラメータを含めてください。URL への署名後にその URL にクエリ文字列を追加すると、HTTP 403 ステータスが返されます。
署名付き URL の有効期間を決定する
短期間 (おそらく数分) のみ有効な署名付き URL を使用してプライベートコンテンツを配信できます。このように短期間有効な署名付き URL は、特定の目的で、コンテンツをユーザーにオンザフライで配信する場合に適しています。たとえば、映画レンタルや音楽ダウンロードをカスタマーにオンデマンドで配信する場合に適しています。署名付き URL を短期間だけ有効にする場合、開発したアプリケーションを使用して、署名付き URL を自動生成することが必要になる場合があります。ユーザーがファイルのダウンロードまたはメディアファイルの再生を開始すると、CloudFront は、URL 内の有効期限切れ時刻と現在の時刻を比較して、URL が依然として有効かどうかを判別します。
これよりも有効期間の長い (おそらく数年間の) 署名付き URL を使用して、プライベートコンテンツを配信できます。有効期間の長い署名付き URL は、プライベートコンテンツを既知のユーザーに配信する場合に役立ちます。たとえば、事業計画を投資家に配信したり、教育資料を従業員に配信したりする場合に役立ちます。これらの長期的な署名付き URL を生成するアプリケーションを開発できます。
CloudFront が署名付き URL の有効期限切れの日時を確認するタイミング
CloudFront は、HTTP リクエスト時に署名付き URL の有効期限切れ日時を確認します。有効期限切れ時刻の直前にクライアントが大きなファイルのダウンロードを開始した場合、ダウンロード中に有効期限切れ時刻が経過してもダウンロードは完了します。TCP 接続が中断し、有効期限切れ時刻が経過した後にクライアントがダウンロードを再開した場合、ダウンロードは失敗します。
クライアントが、ファイルを断片的に取得するレンジ GET を使用した場合、有効期限切れ時刻が経過した後に実行された GET リクエストは失敗します。レンジ GET の詳細については、「CloudFront がオブジェクトの部分的リクエスト (レンジ GET) を処理する方法」を参照してください。
サンプルコードおよびサードパーティーツール
署名付き URL の、ハッシュ化および署名されたパートを作成するサンプルコードについては、以下のトピックを参照してください。