การแก้ปัญหาข้อผิดพลาดเกี่ยวกับรันไทม์ของนโยบาย 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>