CloudFront の署名付き URL または署名付き Cookie に関連する問題をトラブルシューティングする方法を教えてください。
Amazon CloudFront と署名付き URL または署名付き Cookie を使用してプライベートコンテンツを保護しています。403 アクセス拒否エラーが表示されます。
解決策
Amazon CloudFront で署名付き URL または署名付き Cookie に関する問題が発生した場合、403 アクセス拒否エラーが表示される可能性があります。
署名付き URL または署名付き Cookie に正しい署名者が含まれていない
動作の**[ビューワーのアクセスを制限する]**をオンにする場合は、署名者を決定する必要があります。署名者は、CloudFront で作成した信頼されたキーグループ、または CloudFront キーペアを含む AWS アカウントのいずれかです。次の 403 エラーメッセージは、署名者情報がないか、正しくないことを示しています。
エラーには、「Missing Key Pair-ID query parameter or cookie value」(Key-Pair-Id クエリパラメータまたは Cookie 値が見つかりません) というメッセージが含まれます。
このメッセージは、署名付き URL に Key-Pair-Id クエリパラメータがないか空であることを示しています。または、署名付き cookie に CloudFront-Key-Pair-ID クエリ文字列パラメータがないことを示します。
エラーには「Unknown Key」(不明なキー) というメッセージが含まれます。
このメッセージは、CloudFront が Key-Pair-ID (署名付き URL の場合) または CloudFront-Key-Pair-ID (署名付き cookie の場合) を使用して署名者情報を検証できないことを示しています。
この問題を解決するには、署名付き URL に正しい Key-Pair-ID 値が使用されているか、署名付き cookie に CloudFront-Key-Pair-ID が使用されていることを確認します。
署名付き URL を使用する場合は、Key-Pair-ID の値を調べて書き留めてください。
または、
署名付き cookie を使用する場合は、CloudFront-Key-Pair-ID の値を見つけて書き留めておいてください。
次に、Key ID を見つけて、それが Key-Pair-ID または CloudFront-Key-Pair-ID と一致することを確認します。
- CloudFront コンソールを開きます。ナビゲーションメニューで、[Distributions] (ディストリビューション) を選択します。
- ディストリビューションを選択します。次に、[動作] タブを選択します。
- 動作名を選択し、[編集] を選択します。
- [ビューワーのアクセスを制限する] 設定を見つけます。
注:****[はい] に設定されている場合、このキャッシュ動作のパスパターンに一致するファイルへのリクエストには、署名付き URL または署名付き cookie を使用する必要があります。 - [信頼された認証タイプ] フィールドを確認してください。
- [信頼された認証タイプ] の値設定が [信頼されたキーグループ] である場合は、信頼キーグループの名前を書き留めます。信頼キーグループのパブリックキー ID を検索してください。
CloudFront コンソールを開きます。
[キーグループ] を選択します。書き留めた信頼されたキーグループの名前を選択します。
Key-Pair-Id または CloudFront-Key-Pair-Id の値が、信頼されたキーグループのパブリックキー ID のいずれかと一致することを確認します。 - [信頼された認証] タイプが [信頼された署名者] である場合は、CloudFront は AWS が生成する認証情報を使用します。この場合、Key-Pair-Id または CloudFront-Key-Pair-ID の値は、CloudFront 認証情報のアクセスキー ID と一致する必要があります。
**注:**CloudFront 認証情報の [アクセスキー ID] を確認するには、「署名者のキーペアの作成」を参照してください。
署名付き URL または署名付き cookie が有効な時刻に送信されない
署名付き URL または署名付き cookie を作成するとき、JSON 形式のポリシーステートメントは署名付き URL の制限を指定します。このステートメントは、URL の有効期間を決定します。CloudFront は、以下のいずれかのシナリオで 403 アクセス拒否エラーを返します。
- 既定ポリシーを使用する署名付き URL の Expires 値よりも大きい署名付き URL が送信されます。
- 署名付き cookie は、既定ポリシーを使用する署名 cookie の CloudFront-Expires 値よりも大きい時点で送信されます。
- 署名付き URL または署名付き cookie は、カスタムポリシーの DateLessThan 値よりも大きい時点で送信されます。または、DateGreaterThan 値よりも小さい時点で送信されます。
**注:**Expires、CloudFront-Expires、DateLessThan、および DateGreaterThan 値は Unix 時間形式 (秒単位) および協定世界時 (UTC) です。例えば、2013 年 1 月 1 日の午前 10 時 (UTC) は Unix 時間形式では 1357034400 に変換されます。エポックタイムを使用する場合は、2147483647 (2038 年 1 月 19 日 03:14:07 UTC) までの日付に 32 ビットの整数を使用してください。
署名付き URL の Policy パラメータ、または署名付き cookie の CloudFront-Policy 属性は、カスタムポリシーを使用していることを示しています。ポリシーステートメントは JSON 形式で、base64 でエンコードされています。DateLessThan または DateGreaterThan の値を確認するには、64base デコードコマンドを使用してください。
base64 でエンコードされたカスタムポリシーの例:
eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__
base64 でエンコードされた形式のカスタムポリシーを JSON 形式にデコードするには、次の Linux コマンドを実行します。ポリシー値をお使いのカスタムポリシー値に置き換えます。
echo "eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__" | tr -- '-_~' '+=/' | base64 -d
次のような出力が表示されます。
{ "Statement": [{ "Resource": "http://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1426500000 } } }] }
署名付き URL または署名付き cookie には、ポリシーに複数のステートメントがある
既定ポリシーまたはカスタムポリシーに複数のステートメントが含まれている場合、CloudFront は 403 アクセス拒否エラーを返します。
この問題をトラブルシューティングするには、前のセクションの Linux コマンドを実行してカスタムポリシーステートメントを確認してください。コードの詳細を確認してから、既定ポリシーまたはカスタムポリシーに含まれるステートメントが 1 つのみであることを確認します。
署名付き URL または署名付き cookie のポリシー内のベース URL が正しくない
ポリシー内のベース URL が正しくない場合、CloudFront は 403 アクセス拒否エラーを返します。
- リソースキーでは省略されています (www.example.com)。完全な URL (http://www.example.com) を使用してください。
- UTF-8 文字エンコーディングはありません。
- すべての句読点とパラメータ名が含まれているわけではありません。
- HTTP または HTTPS プロトコルが、署名付き URL または署名付き cookie を送信するリクエストで使用されるプロトコルと一致しない。
- ドメイン名が、ユーザーエージェントが署名付き URL または署名付き cookie を送信するために使用するホストヘッダーと一致しない。
- クエリ文字列には、無効な文字が含まれている。
署名付き URL または署名付き cookie のポリシーの署名が間違っている
CloudFront は、以下のいずれかのシナリオで 403 アクセス拒否エラーを返します。
- ポリシーステートメントにスペース (タブや改行文字を含む) が含まれている。
- 既定ポリシーまたはカスタムポリシーが、ハッシュされる前に文字列としてフォーマットされていない。これは、AWS SDK を使用せずに署名付き URL または署名付き ocokie を作成した場合に発生します。
- ポリシーが署名を生成する前にハッシュされていない。これは、AWS SDK を使用せずに署名付き URL または署名付き cookie を作成した場合に発生します。
署名付き URL または署名付き cookie を使用する場合の署名のベストプラクティスについては、「署名付き URL の署名を作成するためのコード例」を参照してください。
署名付き URL または署名付き Cookie が、サポートされていない IP アドレスまたは IP 範囲から送信された
署名付き URL または署名付きクッキーが IPv6 アドレスから送信されると、CloudFront は 403 アクセス拒否エラーを返します。または、カスタムポリシーで許可されていない IPv4 アドレスまたは IPv4 範囲から送信されます。
**IpAddress ** キーは、署名付き URL または署名付き cookie に含まれるカスタムポリシーでのみ使用できます。IPv6 形式の IP アドレスはサポートされていません。IpAddress を含むカスタムポリシーを使用する場合は、ディストリビューションの IPv6 を有効にしないでください。
署名付き cookie には、Set-cookie レスポンスヘッダーにドメイン属性と Path 属性が含まれていない
CloudFront から返された cookie が、同じドメインへの今後のリクエストに含まれていない場合、CloudFront は 403 アクセス拒否エラーを返します。この場合、Set-Cookie レスポンスヘッダーの Domain および Path cookie 属性を確認してください。
Domain 値は、リクエストされたファイルのドメイン名です。Domain 属性を指定しない場合、デフォルト値は URL のドメイン名です。これは指定されたドメイン名にのみ適用され、サブドメインには適用されません。Domian 属性を指定すると、サブドメインにも適用されます。
Domain 属性を指定する場合、URL のドメイン名と Domain 属性の値が一致する必要があります。CloudFront がディストリビューションに割り当てるドメイン名を指定できます (例えば、d111111abcdef8.cloudfront.net)。ただし、ドメイン名に *\ .cloudfront.net を指定することはできません。example.com などの代替ドメイン名を使用するには、URL のディストリビューションに代替ドメイン名を追加します。
Path 属性は、リクエストされたファイルのパスです。Path 属性を指定しない場合、デフォルト値は URL 内のパスです。
関連するコンテンツ
- 質問済み 1年前lg...
- 質問済み 1年前lg...
- AWS公式更新しました 6ヶ月前
- AWS公式更新しました 2年前
- AWS公式更新しました 6ヶ月前
- AWS公式更新しました 3年前