現在、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
の値を確認します。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>