署名付き URL と署名付き Cookie を作成できる署名者の指定
トピック
署名付き URL または署名付き Cookie を作成するには、署名者が必要です。署名者は、(CloudFront で作成した) 信頼されたキーグループ、または CloudFront のキーペアを含む AWS アカウントのいずれかです。署名付き URL と署名付き Cookie が有効な信頼されたキーグループを使用することをお勧めします。詳細については、「信頼されたキーグループ (推奨) または AWS アカウントの選択」を参照してください。
署名者には 2 つの目的があります。
-
署名者をディストリビューションに追加するとすぐに、ビューワーからファイルへのアクセスには、署名付き URL または署名付き Cookie の使用が CloudFront によって求められるようになります。
-
署名付き URL または署名付き Cookie を作成するときは、署名者のキーペアのプライベートキーを使用して URL または Cookie に署名します。制限されたファイルがリクエストされると、CloudFront は URL または Cookie の署名を署名のない URL または Cookie と比較し、改ざんされていないことを確認します。CloudFront は、URL または Cookie が有効であることも確認します。たとえば、有効期限切れ日時が経過していないことを確認します。
署名者を指定するときは、署名者をキャッシュ動作に追加することにより、署名付き URL または署名付き Cookie を必要とするファイルも間接的に指定します。ディストリビューションのキャッシュ動作が 1 つしかない場合、ビューワーはディストリビューション内のファイルへのアクセスに、署名付き URL または署名付き Cookie の使用を求められます。複数のキャッシュ動作を作成して、署名者を一部のキャッシュ動作に追加し、それ以外のキャッシュ動作に追加しなかった場合、ビューワーは一部のファイルへのアクセスに、署名付き URL または署名付き Cookie の使用を求められ、その他のファイルへのアクセスには求められません。
署名付き URL または署名付き Cookie の作成を許可する署名者 (プライベートキー) を指定し、署名者を CloudFront ディストリビューションに追加するには、以下のタスクを実行します。
-
署名者として、信頼されたキーグループを使用するか AWS アカウントを使用するかを決定します。信頼されたキーグループを使用することをお勧めします。詳細については、「信頼されたキーグループ (推奨) または AWS アカウントの選択」 を参照してください。
-
ステップ 1 で選択した署名者に対して、パブリックとプライベートのキーペアを作成します。詳細については、「署名者のキーペアの作成」 を参照してください。
-
署名付き URL または署名付き Cookie の作成に .NET または Java を使用する場合は、プライベートキーの形式を変更します。詳細については、「プライベートキーの形式の変更 (.NET および Java のみ)」 を参照してください。
-
署名付き URL または署名付き Cookie を作成するディストリビューションで、署名者を指定します。詳細については、「ディストリビューションへの署名者の追加」 を参照してください。
信頼されたキーグループ (推奨) または AWS アカウントの選択
署名付き URL または署名付き Cookie を使用するには、署名者が必要です。署名者は、(CloudFront で作成した) 信頼されたキーグループ、または CloudFront のキーペアを含む AWS アカウントのいずれかです。以下の理由から、信頼されたキーグループを使用することをお勧めします。
-
CloudFront キーグループでは、CloudFront 署名付き URL および署名付き Cookie のパブリックキーを管理するために AWS アカウントの root ユーザーを使用する必要はありません。AWS のベストプラクティスでは、必要がなければ root ユーザーを使用しないことが推奨されています。
-
CloudFront キーグループを使用すると、CloudFront API を使用して、パブリックキー、キーグループ、および信頼された署名者を管理できます。API を使用して、キーの作成とキーの更新を自動化できます。AWS root ユーザーを使用する場合は、AWS マネジメントコンソールを使用して CloudFront のキーペアを管理する必要があるため、プロセスを自動化することはできません。
-
CloudFront API を使用してキーグループを管理できるため、AWS Identity and Access Management (IAM) のアクセス許可ポリシーを使用して、ユーザーに許可される操作を制限することもできます。例えば、ユーザーにパブリックキーのアップロードを許可し、削除を禁止することができます。または、ユーザーにパブリックキーの削除を許可するが、許可するのは、多要素認証の使用、特定のネットワークからのリクエストの送信、特定の日時範囲内でのリクエストの送信など、特定の条件が満たされた場合に限ることもできます。
AWS アカウントの root ユーザーを使用して CloudFront のキーペアを管理する場合は、root ユーザーが実行できる操作や、実行できる条件を制限することはできません。IAM アクセス許可ポリシーを root ユーザーに適用することはできません。このことは、AWS のベストプラクティスで root ユーザーの使用が推奨されない理由の 1 つです。
-
CloudFront キーグループを使用すると、より多くのパブリックキーを CloudFront ディストリビューションに関連付けることができるため、パブリックキーの使用方法と管理方法をより柔軟に設定できます。デフォルトでは、最大 4 つのキーグループを 1 つのディストリビューションに関連付けることができ、キーグループには最大 5 つのパブリックキーを含めることができます。
root ユーザーを使用して CloudFront のキーペアを管理する場合、AWS アカウントごとにアクティブにできる CloudFront のキーペアは 2 つまでです。
署名者のキーペアの作成
CloudFront 署名付き URL または署名付き Cookie の作成に使用する各署名者には、パブリックとプライベートのキーペアが必要です。署名者はプライベートキーを使用して URL または Cookie に署名し、CloudFront はパブリックキーを使用して署名を検証します。
キーペアを作成する方法は、信頼されたキーグループを署名者として使用するか (推奨)、CloudFront のキーペアを使用するかによって異なります。詳細については、次のセクションを参照してください。作成するキーペアは、以下の要件を満たしている必要があります。
-
SSH-2RSA キーペアである必要があります。
-
base64 エンコードされた PEM 形式である必要があります。
-
1024、2048、または 4096 ビットのキーペアである必要があります。
アプリケーションを保護するために、キーペアを定期的に更新することをお勧めします。詳細については、「キーペアの更新」 を参照してください。
信頼されたキーグループのキーペアを作成する (推奨)
信頼されたキーグループのキーペアを作成するには、以下の手順を実行します。
-
パブリックとプライベートのキーペアを作成します。
-
パブリックキーを CloudFront にアップロードします。
-
パブリックキーを CloudFront キーグループに追加します。
詳細については、次の手順を参照してください。
キーペアを作成するには
以下の手順では、キーペアを作成する方法の一例として OpenSSL を使用します。RSA キーペアを作成する方法は他にも多数あります。
-
以下のコマンド例では、OpenSSL を使用して 2,048 ビット長の RSA キーペアを生成し、
private_key.pem
という名前のファイルに保存します。openssl genrsa -out private_key.pem 2048
-
生成されるファイルには、パブリックキーとプライベートキーの両方が含まれます。以下のコマンド例では、
private_key.pem
という名前のファイルからパブリックキーを抽出します。openssl rsa -pubout -in private_key.pem -out public_key.pem
後で、以下の手順でパブリックキー (
public_key.pem
ファイル内) をアップロードします。
パブリックキーを CloudFront にアップロードするには
-
AWS マネジメントコンソールにサインインし、CloudFront コンソール (https://console.aws.amazon.com/cloudfront/
) を開きます。 -
ナビゲーションメニューで、[Public keys (パブリックキー)] を選択します。
-
[Add public key (パブリックキーを追加)] を選択します。
-
[Add public key (パブリックキーの追加)] ウィンドウで、以下の手順を実行します。
-
[Key name (キー名)] に、パブリックキーを識別するための名前を入力します。
-
[Key value (キー値)] に、パブリックキーを貼り付けます。前の手順のステップに従った場合、パブリックキーは
public_key.pem
という名前のファイルにあります。パブリックキーの内容をコピーして貼り付けるには、以下の手順を実行します。-
macOS または Linux コマンドラインで cat コマンドを次のように使用します。
cat public_key.pem
そのコマンドの出力をコピーして、[Key value (キー値)] フィールドに貼り付けます。
-
メモ帳 (Windows の場合) やテキストエディット (macOS の場合) などのプレーンテキストエディタで、
public_key.pem
ファイルを開きます。ファイルの内容をコピーし、[Key value (キー値)] フィールドに貼り付けます。
-
-
(オプション) [Comment (コメント)] に、パブリックキーを説明するコメントを追加します。
完了したら、[Add (追加)] を選択します。
-
-
パブリックキー ID を記録します。この ID は、後で署名付き URL または署名付き Cookie を作成するときに、
Key-Pair-Id
フィールドの値として使用します。
パブリックキーをキーグループに追加するには
-
CloudFront コンソール (https://console.aws.amazon.com/cloudfront/
) を開きます。 -
ナビゲーションメニューで、[Key groups (キーグループ)] を選択します。
-
[Add key group (キーグループの追加)] を選択します。
-
[Create key group (キーグループの作成)] ページで、以下の手順を実行します。
-
[Key group name (キーグループ名)] に、キーグループを識別するための名前を入力します。
-
(オプション) [Comment (コメント}] に、キーグループを説明するコメントを入力します。
-
[Public keys (パブリックキー)] で、キーグループに追加するパブリックキーを選択してから、[Add (追加)] を選択します。キーグループに追加するパブリックキーごとに、このステップを繰り返します。
-
-
[Create key group (キーグループの作成)] を選択します。
-
キーグループ名を記録します。この名前は、後でキーグループを CloudFront ディストリビューションのキャッシュ動作に関連付けるときに使用します。(CloudFront API では、キーグループ ID を使用して、キーグループをキャッシュ動作に関連付けます。)
ここでの手順に従う代わりに、信頼されたキーグループのパブリックキーを作成することをお勧めします。署名付き URL および署名付き Cookie のパブリックキーを作成するための推奨される方法については、「信頼されたキーグループのキーペアを作成する (推奨)」を参照してください。
CloudFront のキーペアは、次の方法で作成できます。
-
AWS マネジメントコンソールでキーペアを作成し、プライベートキーをダウンロードします。後述の手順を参照してください。
-
OpenSSL などのアプリケーションを使用して RSA キーペアを作成し、パブリックキーを AWS マネジメントコンソールにアップロードします。RSA キーペアの作成の詳細については、「信頼されたキーグループのキーペアを作成する (推奨)」を参照してください。
AWS マネジメントコンソールで CloudFront のキーペアを作成するには
-
AWS アカウントの root ユーザーの認証情報を使用して、AWS マネジメントコンソールにサインインします。
重要 IAM ユーザーは CloudFront のキーペアを作成できません。キーペアを作成するには、root ユーザーの認証情報を使用してサインインする必要があります。
-
アカウント名を選択してから、[My Security Credentials (セキュリティ認証情報)] を選択します。
-
[CloudFront のキーペア] を選択します。
-
複数のキーペアが有効になっていないことを確認します。既に 2 つのキーペアが有効になっていると、キーペアを作成できません。
-
[Create New Key Pair (新しいキーペアの作成)] を選択します。
-
[Create Key Pair (キーペアの作成)] ダイアログボックスで、[Download Private Key File (プライベートキーファイルのダウンロード)] を選択し、ファイルをコンピュータに保存します。
重要 CloudFront のキーペアのプライベートキーを安全な場所に保存し、必要な管理者だけがそのプライベートキーを読み取ることができるようにファイルのアクセス許可を設定します。別のユーザーがこのプライベートキーを取得すると、そのユーザーは有効な署名付き URL および署名付き Cookie を生成し、コンテンツをダウンロードできます。プライベートキーを再取得することはできません。したがって、プライベートキーを削除したか失った場合は、新しい CloudFront キーペアを作成する必要があります。
-
キーペアのキーペア ID を記録しておきます(AWS マネジメントコンソールでは、これはアクセスキー ID と呼ばれます。) この情報は、署名付き URL または署名付き Cookie を作成するときに使用します。
プライベートキーの形式の変更 (.NET および Java のみ)
.NET または Java を使用して署名付き URL または署名付き Cookie を作成する場合、キーペアのプライベートキーをデフォルトの PEM 形式のまま使用して署名を作成することはできません。代わりに、以下の手順を実行します。
-
.NET Framework – .NET Framework で使用する XML 形式にプライベートキーを変換します。いくつかのツールを利用できます。
-
Java – DER 形式にプライベートキーを変換します。そのための 1 つの方法は、以下の OpenSSL コマンドを使用することです。以下のコマンドで、
private_key.pem
は PEM 形式のプライベートキーを含むファイルの名前であり、private_key.der
はコマンドの実行後に DER 形式のプライベートキーを含むファイルの名前です。openssl pkcs8 -topk8 -nocrypt -in private_key.pem -inform PEM -out
private_key.der
-outform DERエンコーダが正常に機能するように、Bouncy Castle の Java 用暗号 API の JAR をプロジェクトに追加してから Bouncy Castle プロバイダーを追加します。
ディストリビューションへの署名者の追加
署名者は、ディストリビューション用の署名付き URL と署名付き Cookie を作成できる、信頼されたキーグループ (推奨) または CloudFront キーペアです。署名付き URL または署名付き Cookie を CloudFront ディストリビューションで使用するには、署名者を指定する必要があります。
署名者はキャッシュ動作に関連付けられています。これにより、同じディストリビューション内で、一部のファイルに署名付き URL または署名付き Cookie を要求し、その他のファイルには要求しないということが可能になります。ディストリビューションでは、対応するキャッシュ動作に関連付けられているファイルにのみ、署名付き URL または Cookie が必要です。
同様に、署名者は、対応するキャッシュ動作に関連付けられているファイルの URL または Cookie にのみ署名できます。例えば、1 つのキャッシュ動作に対して 1 つの署名者があり、別のキャッシュ動作に対して別の署名者がある場合、どちらの署名者も、もう一方のキャッシュ動作に関連付けられたファイルに対して署名付き URL または署名付き Cookie を作成できません。
ディストリビューションに署名者を追加する前に、以下の手順を実行します。
-
キャッシュ動作のパスパターンとキャッシュ動作のシーケンスを慎重に定義して、ユーザーにコンテンツへの意図しないアクセスを許可したり、すべてのユーザーを対象としたコンテンツへのアクセスを禁止したりしないようにします。
たとえば、リクエストが、2 つのキャッシュ動作のパスパターンに一致したと仮定します。最初のキャッシュ動作は署名付き URL または署名付き Cookie を要求しませんが、2 番目のキャッシュ動作はこれらを要求します。ユーザーは署名付き URL または署名付き Cookie を使用せずにファイルにアクセスできます。これは、CloudFront が、最初の一致に関連付けられたキャッシュ動作を処理するためです。
パスパターンの詳細については、「パスパターン」を参照してください。
-
コンテンツの配信に既に使用しているディストリビューションの場合は、署名者を追加する前に、署名付き URL と署名付き Cookie の生成を開始する準備ができていることを確認してください。署名者を追加すると、CloudFront は有効な署名付き URL または署名付き Cookie を含まないリクエストを拒否します。
CloudFront コンソールまたは CloudFront API を使用して、署名者をディストリビューションに追加できます。
CloudFront コンソールを使用したディストリビューションへの署名者の追加
以下の手順では、信頼されたキーグループを署名者として追加する方法を示します。信頼された署名者として AWS アカウントを追加することもできますが、お勧めしません。
コンソールを使用してディストリビューションに署名者を追加するには
-
信頼された署名者として使用するキーグループのキーグループ ID を記録します。詳細については、「信頼されたキーグループのキーペアを作成する (推奨)」 を参照してください。
-
CloudFront コンソール (https://console.aws.amazon.com/cloudfront/
) を開きます。 -
署名付き URL または署名付き Cookie でファイルを保護するディストリビューションを選択します。
注記 新しいディストリビューションに署名者を追加するには、ディストリビューションを作成するときにステップ 6 で説明したのと同じ設定を指定します。
-
[Behaviors] タブを選択します。
-
署名付き URL または署名付き Cookie で保護するファイルとパスパターンが一致するキャッシュ動作を選択し、[Edit (編集)] を選択します。
-
[Edit Behavior (動作の編集)] ページで、以下の手順を実行します。
-
[Restrict Viewer Access (Use Signed URLs or Signed Cookies) (ビューワーのアクセスを制限 (署名付き URL または署名付き Cookie の使用))] で、[はい] を選択します。
-
[Trusted Key Groups or Trusted Signer (信頼されたキーグループまたは信頼された署名者)] で、[Trusted Key Groups (信頼されたキーグループ)] を選択します。
-
[Trusted Key Groups (信頼されたキーグループ)] で、追加するキーグループを選択し、[Add (追加)] を選択します。複数のキーグループを追加する場合は、この手順を繰り返します。
-
-
[Yes, Edit (はい、編集する)] を選択して、キャッシュ動作を更新します。
CloudFront API を使用したディストリビューションへの署名者の追加
CloudFront API を使用して、信頼されたキーグループを署名者として追加できます。署名者を既存のディストリビューションまたは新しいディストリビューションに追加できます。どちらの場合も、TrustedKeyGroups
要素の値を指定します。
信頼された署名者として AWS アカウントを追加することもできますが、お勧めしません。
Amazon CloudFront API リファレンスの以下のトピックを参照してください。
-
既存のディストリビューションを更新する – 「UpdateDistribution」
-
新しいディストリビューションを作成する – 「CreateDistribution」
キーペアの更新
署名付き URL と署名付き Cookie のキーペアを定期的に更新 (変更) することをお勧めします。有効期限がまだ切れていない URL または Cookie を無効にすることなく、署名付き URL または署名付き Cookie の作成に使用しているキーペアを更新するには、以下のタスクを実行します。
-
新しいキーペアを作成し、パブリックキーをキーグループに追加します。詳細については、「信頼されたキーグループのキーペアを作成する (推奨)」 を参照してください。
-
前の手順で新しいキーグループを作成した場合は、キーグループを署名者としてディストリビューションに追加します。
重要 キーグループから既存のパブリックキーを削除したり、ディストリビューションからキーグループを削除したりしないでください。新規追加のみを行ってください。
-
新しいキーペアのプライベートキーを使用して署名を作成するようにアプリケーションを更新します。新しいプライベートキーで署名された URL または Cookie が機能することを確認します。
-
以前のプライベートキーを使用して署名付き URL または Cookie の有効期限切れ日時が経過するまで待ちます。次に、古いパブリックキーをキーグループから削除します。ステップ 2 で新しいキーグループを作成した場合は、ディストリビューションから古いキーグループを削除します。