AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
CloudFront の署名付き URL または署名付き cookie に関連する “403 Access Denied” エラーのトラブルシューティング方法を教えてください。
Amazon CloudFront と署名付き URL または署名付き cookie を使用してプライベートコンテンツを保護したところ、“403 Access Denied” というエラーが表示されます。
解決策
CloudFront で署名付き URL または署名付き cookie に関する問題が発生した場合、"403 Access Denied" エラーが表示される可能性があります。
署名付き URL または署名付き cookie に正しい署名者が含まれていない
CloudFront ディストリビューションの動作について [Restrict Viewer Access] (ビューワーのアクセスを制限する) をオンにした場合は、署名者を決定する必要があります。署名者は、CloudFront で作成した信頼されたキーグループ、または CloudFront キーペアを含む AWS アカウントのいずれかです。
次の 403 エラーメッセージは、署名者情報がないか、正しくないことを示しています。
エラーに "Missing Key-Pair-Id query parameter or cookie value" というメッセージが含まれている
このメッセージは、署名付き URL に Key-Pair-Id クエリパラメータがないか空であることを示しています。または、署名付き cookie に CloudFront-Key-Pair-ID クエリ文字列パラメータがないことを示します。
エラーに "Unknown Key" というメッセージが含まれている
このメッセージは、CloudFront が Key-Pair-ID (署名付き URL の場合) または CloudFront-Key-Pair-ID (署名付き cookie の場合) を使用して署名者情報を検証できないことを示しています。
この問題を解決するには、正しい Key-Pair-ID 値 (署名付き URL の場合) または CloudFront-Key-Pair-ID (署名付き cookie の場合) が使用されていることを確認します。
署名付き URL を使用する場合は、Key-Pair-ID の値を見つけて書き留めておいてください。
または
署名付き cookie を使用する場合は、CloudFront-Key-Pair-ID の値を見つけて書き留めておいてください。
次に、キー ID を見つけて、それが Key-Pair-ID または CloudFront-Key-Pair-ID と一致することを確認します。
- CloudFront コンソールを開きます。ナビゲーションペインで [Distributions] (ディストリビューション) を選択します
- ディストリビューションを選択し、[Behaviors] (動作) タブをクリックします。
- 動作名を選択し、[Edit] (編集) をクリックします。
- [Restrict viewer access] (ビューワーのアクセスを制限する) 設定を見つけます。
注: [Yes] (はい) に設定されている場合、このキャッシュ動作のパスパターンに一致するファイルへのリクエストには、署名付き URL または署名付き cookie を使用する必要があります。 - [Trusted authorization type] (信頼された認可タイプ) フィールドを確認してください。
- [Trusted authorization type] (信頼された認可タイプ) の値設定が [Trusted key groups] (信頼されたキーグループ) である場合は、信頼キーグループの名前を書き留めます。信頼キーグループのパブリックキー ID を検索してください。
CloudFront コンソールを開きます。
[Key Groups] (キーグループ) を選択し、メモした信頼されたキーグループの名前を選択します。
Key-Pair-Id または CloudFront-Key-Pair-Id の値が、信頼されたキーグループのパブリックキー ID のいずれかと一致することを確認します。 - [Trusted authorization] (信頼された認可) タイプが [Trusted Signer] (信頼された署名者) である場合は、CloudFront は AWS が生成する認証情報を使用します。この場合、Key-Pair-Id または CloudFront-Key-Pair-ID の値は、CloudFront 認証情報のアクセスキー ID と一致する必要があります。
注: CloudFront 認証情報のアクセスキー ID を確認するには、「署名者のキーペアを作成する」を参照してください。
署名付き URL または署名付き cookie の送信時間が無効
署名付き URL または署名付き cookie を作成するとき、JSON 形式のポリシーステートメントは署名付き URL の制限を指定します。このステートメントは、URL の有効期間を決定します。CloudFront は、以下のいずれかのシナリオで "403 Access Denied" エラーを返します。
- 既定ポリシーを使用する署名付き 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 の値を確認するには、base64 デコードコマンドを使用してください。
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 Access Denied" エラーを返します。
この問題をトラブルシューティングするには、前のセクションの Linux コマンドを実行してカスタムポリシーステートメントを確認してください。コードの詳細を確認してから、既定ポリシーまたはカスタムポリシーに含まれるステートメントが 1 つのみであることを確認します。
署名付き URL または署名付き cookie のポリシー内のベース URL が正しくない
ポリシー内のベース URL が正しくない場合、CloudFront は "403 Access Denied" エラーを返します。
- リソースキーで省略されている (www.example.com)。完全な URL (http://www.example.com) を使用してください。
- UTF-8 文字エンコーディングがない。
- すべての句読点とパラメータ名が含まれているわけではない。
- HTTP または HTTPS プロトコルが、署名付き URL または署名付き cookie を送信するリクエストで使用されるプロトコルと一致しない。
- ドメイン名が、ユーザーエージェントが署名付き URL または署名付き cookie を送信するために使用するホストヘッダーと一致しない。
- クエリ文字列に無効な文字が含まれている。
署名付き URL または署名付き cookie のポリシーの署名が間違っている
CloudFront は、以下のいずれかのシナリオで "403 Access Denied" エラーを返します。
- ポリシーのステートメント、タブ、または改行文字に空白が含まれている。
- ポリシーがハッシュされるまで文字列としてフォーマットされない。これは、AWS SDK を使用せずに署名付き URL または署名付き ocokie を作成した場合に発生します。
- ポリシーが署名を生成する前にハッシュされていない。これは、AWS SDK を使用せずに署名付き URL または署名付き cookie を作成した場合に発生します。
署名付き URL または署名付き cookie を使用する場合の署名のベストプラクティスについては、「署名付き URL の署名を作成するためのコード例」を参照してください。
署名付き URL または署名付き cookie が、サポートされていない IP アドレスまたは IP 範囲から送信された
署名付き URL または署名付き cookie が IPv6 アドレスから送信されると、CloudFront は "403 Access Denied" エラーを返します。または、カスタムポリシーで許可されていない IPv4 アドレスまたは IPv4 範囲から送信されます。
**IpAddress ** キーは、署名付き URL または署名付き cookie に含まれるカスタムポリシーでのみ使用できます。IPv6 形式の IP アドレスはサポートされていません。IpAddress を含むカスタムポリシーを使用する場合は、ディストリビューションの IPv6 を有効にしないでください。
署名付き cookie には、Set-cookie レスポンスヘッダーにドメイン属性と Path 属性が含まれていない
CloudFront から返された cookie が、同じドメインへの今後のリクエストに含まれていない場合、CloudFront は "403 Access Denied" エラーを返します。この場合、Set-Cookie レスポンスヘッダーの Domain および Path cookie 属性を確認してください。
Domain 値は、リクエストされたファイルのドメイン名です。Domain 属性を指定しない場合、デフォルト値は URL のドメイン名です。これは指定されたドメイン名にのみ適用され、サブドメインには適用されません。Domian 属性を指定すると、サブドメインにも適用されます。
Domain 属性を指定する場合、URL のドメイン名と Domain 属性の値が一致する必要があります。CloudFront がディストリビューションに割り当てるドメイン名を指定できます (例えば、d111111abcdef8.cloudfront.net)。ただし、ドメイン名に *.cloudfront.net を指定することはできません。example.com などの代替ドメイン名を使用するには、URL のディストリビューションに代替ドメイン名を追加します。
Path 属性は、リクエストされたファイルのパスです。Path 属性を指定しない場合、デフォルト値は URL 内のパスです。
関連情報
- 言語
- 日本語

This article was reviewed and updated on 2026-03-17.
関連するコンテンツ
質問済み 7年前