現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントを表示する。
IPDeniedAccess
エラーコード
accesscontrol.IPDeniedAccess
エラー レスポンスの本文
{
"fault": {
"faultstring": "Access Denied for client ip : client_IP",
"detail": {
"errorcode": "accesscontrol.IPDeniedAccess"
}
}
}エラー メッセージの例
{
"fault": {
"faultstring": "Access Denied for client ip : 104.132.196.83",
"detail": {
"errorcode": "accesscontrol.IPDeniedAccess"
}
}
}
原因
このエラーは、クライアント IP アドレス、または API リクエストの一部として渡された IP アドレスが、アクセス制御ポリシーの <MatchRule> 要素内の <SourceAddress> 要素で指定された IP アドレスと一致し、<MatchRule> 要素の action 属性が DENY に設定されている場合に発生します。
たとえば、次のように <SourceAddress> が定義されているとします。
<SourceAddress mask="32">104.132.196.83</SourceAddress>
上記の IP アドレスがクライアント システムの IP アドレス(変数 proxy.client.ip で示される)または API リクエストの一部として渡された IP アドレスと一致する場合、このエラーが発生します。
診断
特定の API リクエストに対するアクセスが拒否された IP アドレスを特定します。この情報はエラー レスポンスの
faultstring要素で調べることができます。たとえば、次の
faultstringでは、IP アドレスは104.132.196.83:です。"faultstring": "Access Denied for client ip : 104.132.196.83"失敗した API プロキシのすべてのアクセス制御ポリシーを調べ、
<SourceAddress>要素で指定された IP アドレスがfaultstringで識別された IP アドレスと一致する特定のポリシーを特定します(上記の手順 1)。たとえば、次のポリシーでは
<SourceAddress>IP をfaultstringの内容と一致する104.132.196.83,として定義します。<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control"> <DisplayName>Access-Control</DisplayName> <Properties/> <IPRules noRuleMatchAction="ALLOW"> <MatchRule action="DENY"> <SourceAddress mask="32">104.132.196.83</SourceAddress> </MatchRule> </IPRules> </AccessControl>API リクエストが行われた IP アドレスを特定します。これにはいくつかの方法があります。
UI トレースの使用
- 失敗した API リクエストのトレースをキャプチャします。
- 失敗した特定のアクセス制御ポリシーを右側のパネルから選択します。
次のトレース例のスクリーンショットのように、[Phase Details] ペインで、変数
proxy.client.ipの値を確認します。![API リクエストが行われた IP アドレスを示す [Phase Details] ペイン。](https://cloud.google.com/static/apigee/docs/api-platform/images/access-control-runtime-error.png?authuser=2&hl=ja)
proxy.client.ipがリストにない場合は、X-Forwarded-For または True-Client-IP メッセージ ヘッダーの値を確認してください。
カスタム レポートの使用
カスタム レポートを作成して、API プロキシ内のアクセス制御ポリシーの実行中に 403 ステータス コードがスローされたかどうかを判別し、クライアント IP アドレスを特定できます。これは、過去に発生した問題の場合、または問題が断続的に発生し、UI でトレースをキャプチャできない場合に便利です。
カスタム レポートの作成方法については、カスタム レポートの作成と管理をご覧ください。カスタム レポートで次のいずれかを選択します。
指標としてのトラフィックの合計
ディメンションとしてプロキシ、レスポンス ステータス コード、プロキシ クライアント IP、X-Forwarded-For-IP。
これにより、エラーにつながったクライアント IP または IP アドレスを特定できます。
クライアント IP アドレス(変数
proxy.client.ipで示される)、または API リクエストの一部として渡される IP アドレスが、アクセス制御ポリシーの<MatchRule>要素内の<SourceAddress>要素で指定された IP アドレスと一致し、action属性がDENYに設定されている場合、これがエラーの原因です。上記の例では、参照変数
proxy.client.ipに設定された値(上記のトレースのスクリーンショットを参照)はアクセス制御ポリシーの<SourceAddress>要素で定義された IP アドレスと一致しているため、次のエラー レスポンスがトリガーされます。"faultstring": "Access Denied for client ip : 104.132.196.83"
解決策
アクセス制御ポリシーで、faultstring にリストされている特定の IP アドレスからの API アクセスを拒否するように設計されている場合、エラー メッセージが表示されるのは想定内の動作です。この場合、追加のアクションは必要ありません。
ただし、特定の IP アドレスに対して特定の API プロキシの API リクエストへのアクセスを許可する場合は、アクセス制御ポリシーを変更して、その IP アドレスへのアクセスを許可します。また、IP アドレスへのアクセスを拒否しない場合は、API プロキシからアクセス制御ポリシーを削除します。
次の例では、特定の IP アドレス 104.132.196.83 へのアクセスのみを許可し、残りのアドレスへのアクセスを拒否する方法を示します。
<AccessControl name="ACL">
<IPRules noRuleMatchAction = "DENY">
<MatchRule action = "ALLOW">
<SourceAddress mask="32">104.132.196.83</SourceAddress>
</MatchRule>
</IPRules>
</AccessControl>