現在、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-dot-devsite-v2-prod.appspot.com/static/apigee/docs/api-platform/images/access-control-runtime-error.png?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>