การแก้ปัญหาข้อผิดพลาดเกี่ยวกับรันไทม์ของนโยบาย AccessControl

คุณกําลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

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 ของลูกค้าหรือที่อยู่ IP ที่ส่งเป็นส่วนหนึ่งของคําขอ API ตรงกับที่อยู่ IP ที่ระบุไว้ในองค์ประกอบ <SourceAddress> ภายในองค์ประกอบ <MatchRule> ของนโยบายการควบคุมการเข้าถึง และแอตทริบิวต์ action ขององค์ประกอบ <MatchRule> ตั้งค่าเป็น DENY

ตัวอย่างเช่น สมมติว่า <SourceAddress> ได้รับการกําหนดดังที่แสดงด้านล่าง

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

หากที่อยู่ IP ข้างต้นตรงกับที่อยู่ IP ของระบบไคลเอ็นต์ (ที่ระบุโดยตัวแปร proxy.client.ip) หรือที่อยู่ IP ที่ส่งเป็นส่วนหนึ่งของคําขอ API ระบบจะแสดงข้อผิดพลาด

การวินิจฉัย

  1. ระบุที่อยู่ IP ที่ถูกปฏิเสธการเข้าถึงสําหรับคําขอ API ที่เฉพาะเจาะจง คุณดูข้อมูลนี้ได้ในองค์ประกอบ faultstring ของการตอบกลับข้อผิดพลาด

    ตัวอย่างเช่น ใน faultstring ต่อไปนี้ ที่อยู่ IP คือ 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. ตรวจสอบนโยบายการควบคุมการเข้าถึงทั้งหมดในพร็อกซี API ที่ดำเนินการไม่สำเร็จ และระบุนโยบายที่เฉพาะเจาะจงซึ่งที่อยู่ IP ที่ระบุไว้ในองค์ประกอบ <SourceAddress> ตรงกับที่อยู่ IP ที่ระบุไว้ใน faultstring (ขั้นตอนที่ 1 ด้านบน)

    ตัวอย่างเช่น นโยบายต่อไปนี้กำหนด IP <SourceAddress> เป็น 104.132.196.83, ซึ่งตรงกับที่อยู่ใน 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. ระบุที่อยู่ IP ที่ส่งคําขอ API ซึ่งทำได้หลายวิธี ดังนี้

    1. การใช้การติดตาม UI

      1. บันทึกการติดตามสําหรับคําขอ API ที่ล้มเหลว
      2. เลือกนโยบายการควบคุมการเข้าถึงที่ดำเนินการไม่สำเร็จจากแผงด้านขวา
      3. ตรวจสอบค่าของตัวแปร proxy.client.ip ดังที่แสดงในภาพหน้าจอต่อไปนี้ของการติดตามตัวอย่าง

      4. หากไม่มี proxy.client.ip อยู่ในรายการ ให้ตรวจสอบค่าของส่วนหัวของข้อความ X-Forwarded-For หรือ True-Client-IP

    2. การใช้รายงานที่กำหนดเอง

      คุณสามารถสร้างรายงานที่กำหนดเองเพื่อดูว่าระบบแสดงรหัสสถานะ 403 ระหว่างการดำเนินการนโยบายการควบคุมการเข้าถึงภายในพร็อกซี API หรือไม่ และระบุที่อยู่ IP ของลูกค้าได้ด้วย ซึ่งจะเป็นประโยชน์อย่างยิ่งหากปัญหาเกิดขึ้นในอดีตหรือหากปัญหาเกิดขึ้นเป็นพักๆ และคุณไม่สามารถบันทึกการติดตามใน UI ได้

      โปรดดูสร้างและจัดการรายงานที่กําหนดเองเพื่อทําความเข้าใจวิธีสร้างรายงานที่กําหนดเอง ในรายงานที่กําหนดเอง ให้เลือกรายการต่อไปนี้

      1. ผลรวมของการเข้าชมเป็นเมตริก และ

      2. พร็อกซี, รหัสสถานะการตอบกลับ, IP ไคลเอ็นต์พร็อกซี และ X-Forwarded-For เป็นมิติข้อมูล

      ซึ่งจะช่วยให้คุณระบุ IP ของลูกค้าหรือที่อยู่ IP ที่ส่งซึ่งทําให้เกิดข้อผิดพลาดได้

  4. หากที่อยู่ IP ของไคลเอ็นต์ (ที่ระบุโดยตัวแปร proxy.client.ip) หรือที่อยู่ IP ที่ส่งเป็นส่วนหนึ่งของคําขอ API ตรงกับที่อยู่ IP ที่ระบุไว้ในองค์ประกอบ <SourceAddress> ภายในองค์ประกอบ <MatchRule> ของนโยบายการควบคุมการเข้าถึง ซึ่งมีการกําหนดแอตทริบิวต์ action เป็น DENY แสดงว่าที่อยู่ IP ดังกล่าวเป็นสาเหตุของข้อผิดพลาด

    ในตัวอย่างที่แสดงด้านบน ค่าที่ตั้งไว้ในตัวแปรอ้างอิง proxy.client.ip (ดังที่เห็นในภาพหน้าจอของการติดตามด้านบน) ตรงกับที่อยู่ IP ที่กําหนดไว้ในองค์ประกอบ <SourceAddress> ของนโยบายการควบคุมการเข้าถึง จึงทริกเกอร์การตอบกลับข้อผิดพลาด

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

ความละเอียด

หากนโยบายการควบคุมการเข้าถึงมีไว้เพื่อปฏิเสธการเข้าถึงคําขอ API ที่มาจากที่อยู่ IP ที่ระบุไว้ใน faultstring คุณก็ควรจะได้รับข้อความแสดงข้อผิดพลาด ในกรณีนี้ คุณไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม

อย่างไรก็ตาม หากคุณพิจารณาว่าที่อยู่ IP ที่เฉพาะเจาะจงสามารถเข้าถึงคำขอ API สำหรับพร็อกซี API ที่เฉพาะเจาะจงได้ ให้แก้ไขนโยบายการควบคุมการเข้าถึงเพื่ออนุญาตให้เข้าถึงที่อยู่ IP เหล่านั้น หรืออีกทางหนึ่ง คุณสามารถลบนโยบายการควบคุมการเข้าถึงจากพร็อกซี API ได้หากไม่ต้องการปฏิเสธการเข้าถึงที่อยู่ IP ใดๆ

นี่คือตัวอย่างที่แสดงวิธีอนุญาตให้เข้าถึงที่อยู่ 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>