Pemecahan masalah error runtime kebijakan AccessControl

Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat Dokumentasi Apigee Edge.

ini.

IPDeniedAccess

Kode error

accesscontrol.IPDeniedAccess

Isi respons error

{
    "fault": {
        "faultstring": "Access Denied for client ip : client_IP",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

Contoh pesan error

{
    "fault": {
        "faultstring": "Access Denied for client ip : 104.132.196.83",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

Penyebab

Error ini terjadi jika alamat IP klien, atau alamat IP yang diteruskan sebagai bagian dari permintaan API, cocok dengan alamat IP apa pun yang ditetapkan di elemen <SourceAddress> dalam elemen <MatchRule> Kebijakan Kontrol Akses, dan atribut action dari elemen <MatchRule> disetel ke DENY.

Misalnya, <SourceAddress> ditentukan seperti yang ditunjukkan di bawah ini:

<SourceAddress mask="32">104.132.196.83</SourceAddress>

Jika alamat IP di atas cocok dengan alamat IP sistem klien (ditunjukkan dengan variabel proxy.client.ip), atau alamat IP mana pun yang diteruskan sebagai bagian dari permintaan API, error akan terjadi.

Diagnosis

  1. Identifikasi alamat IP yang ditolak aksesnya untuk permintaan API tertentu. Anda dapat menemukan informasi ini di elemen faultstring respons error.

    Misalnya, di faultstring berikut, alamat IP-nya adalah 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Periksa semua kebijakan Kontrol Akses di Proxy API yang gagal dan tentukan kebijakan tertentu dengan alamat IP yang ditentukan dalam elemen <SourceAddress> cocok dengan alamat IP yang diidentifikasi dalam faultstring (Langkah 1 di atas).

    Misalnya, kebijakan berikut menentukan IP <SourceAddress> sebagai 104.132.196.83, yang cocok dengan yang ada di faultstring:

    <?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>
    
  3. Tentukan alamat IP tempat permintaan API dibuat. Hal ini dapat dilakukan dengan beberapa cara:

    1. Menggunakan Rekaman Aktivitas UI

      1. Ambil rekaman aktivitas permintaan API yang gagal.
      2. Pilih Kebijakan Kontrol Akses tertentu yang gagal dari panel sebelah kanan.
      3. Di panel Phase Details, periksa nilai variabel proxy.client.ip seperti yang ditunjukkan di screenshot contoh trace berikut.

        Panel Phase Details yang menampilkan alamat IP tempat permintaan API dibuat.

      4. Jika proxy.client.ip tidak tercantum, periksa nilai Header pesan X-Forwarded-For atau True-Client-IP.

    2. Menggunakan Laporan Kustom

      Anda dapat membuat Laporan Kustom untuk menentukan apakah kode status 403 ditampilkan selama pelaksanaan kebijakan Kontrol Akses dalam proxy API, dan juga menentukan alamat IP klien. Hal ini sangat berguna jika masalah pernah terjadi sebelumnya atau jika masalah tersebut hanya sesekali dan Anda tidak dapat merekam aktivitasnya di UI.

      Lihat Membuat dan mengelola laporan kustom untuk memahami cara membuat laporan kustom. Dalam laporan kustom, pilih:

      1. Jumlah Traffic sebagai Metrik, dan

      2. Proxy, Response Status Code, Proxy Client IP, dan X-Forwarded-For-IP sebagai Dimensi.

      Hal ini akan membantu Anda menentukan IP klien atau alamat IP yang diteruskan yang menyebabkan error.

  4. Jika alamat IP klien (ditunjukkan oleh variabel proxy.client.ip), atau alamat IP yang diteruskan sebagai bagian dari permintaan API, cocok dengan alamat IP yang ditetapkan di elemen <SourceAddress> dalam elemen <MatchRule> Kebijakan Kontrol Akses, dengan atribut action ditetapkan ke DENY, maka itulah yang menjadi penyebab error.

    Pada contoh yang ditampilkan di atas, nilai yang ditetapkan dalam variabel referensi proxy.client.ip (seperti yang terlihat pada screenshot rekaman aktivitas di atas) cocok dengan alamat IP yang ditentukan dalam elemen <SourceAddress> kebijakan Kontrol Akses, sehingga memicu respons error:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    

Resolusi

Jika kebijakan Kontrol Akses ditujukan untuk menolak akses ke permintaan API yang berasal dari alamat IP tertentu yang tercantum di faultstring, pesan error akan muncul. Dalam hal ini, Anda tidak perlu melakukan tindakan tambahan.

Namun, jika Anda menentukan bahwa alamat IP tertentu dapat diberi akses ke permintaan API untuk Proxy API tertentu, ubah Kebijakan Kontrol Akses untuk mengizinkan akses ke alamat IP tersebut. Atau, Anda dapat menghapus Kebijakan Kontrol Akses dari Proxy API jika Anda tidak ingin menolak akses ke alamat IP mana pun.

Berikut adalah contoh yang menunjukkan cara mengizinkan akses ke Alamat IP tertentu saja 104.132.196.83 dan menolak akses ke Alamat IP tertentu:

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "DENY">
    <MatchRule action = "ALLOW">
      <SourceAddress mask="32">104.132.196.83</SourceAddress>
    </MatchRule>
  </IPRules>
</AccessControl>