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

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่ เอกสารประกอบเกี่ยวกับ Apigee X.
ข้อมูล

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 แสดงว่าเกิดข้อผิดพลาด

    ในตัวอย่างที่แสดงด้านบน ค่าที่ตั้งไว้ในตัวแปรอ้างอิง 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>