Khắc phục sự cố lỗi thời gian chạy của chính sách AccessControl

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

IPDeniedAccess

Mã lỗi

accesscontrol.IPDeniedAccess

Nội dung phản hồi lỗi

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

Thông báo lỗi mẫu

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

Nguyên nhân

Lỗi này xảy ra nếu địa chỉ IP của ứng dụng(hoặc bất kỳ địa chỉ IP nào được truyền trong yêu cầu API) khớp với bất kỳ địa chỉ IP nào được chỉ định cho phần tử <SourceAddress> ở phần tử <MatchRule> của Chính sách kiểm soát quyền truy cập, và thuộc tính action của phần tử <MatchRule> được đặt thành DENY.

Ví dụ: giả sử <SourceAddress> được xác định như dưới đây:

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

Nếu địa chỉ IP trên khớp với địa chỉ IP của hệ thống ứng dụng (được biểu thị bằng biến proxy.client.ip) hoặc bất kỳ địa chỉ IP nào được chuyển trong yêu cầu API, thì lỗi này sẽ xảy ra.

Chẩn đoán

  1. Xác định(các) địa chỉ IP bị từ chối quyền truy cập đối với một yêu cầu API cụ thể. Bạn có thể tìm thấy thông tin này trong phần tử faultstring của phản hồi lỗi.

    Ví dụ: trong faultstring sau đây, địa chỉ IP là 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Kiểm tra tất cả các chính sách Kiểm soát quyền truy cập trong Proxy API không thành công và xác định chính sách cụ thể trong đó(các) địa chỉ IP được chỉ định trong phần tử <SourceAddress> khớp với(các) địa chỉ IP đã xác định trong faultstring (Bước 1 ở trên).

    Ví dụ: Chính sách sau đây xác định IP <SourceAddress>104.132.196.83, khớp với thông tin trong 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. Xác định(các) địa chỉ IP dùng để thực hiện yêu cầu API. Họ có thể thực hiện việc này theo nhiều cách:

    1. Sử dụng tính năng Theo dõi giao diện người dùng

      1. Ghi lại dấu vết của yêu cầu API không thành công.
      2. Chọn Chính sách kiểm soát truy cập cụ thể đã bị lỗi từ bảng điều khiển bên phải.
      3. Kiểm tra giá trị của biến proxy.client.ip như trong ảnh chụp màn hình dấu vết mẫu sau đây.

      4. Nếu proxy.client.ip không có trong danh sách, hãy kiểm tra giá trị của tiêu đề thông báo X-Forwarded-For hoặc True-Client-IP.

    2. Sử dụng báo cáo tùy chỉnh

      Bạn có thể tạo Báo cáo tuỳ chỉnh để xác định xem mã trạng thái 403 có được gửi trong quá trình thực thi chính sách Kiểm soát quyền truy cập trong proxy API hay không, đồng thời xác định địa chỉ IP của ứng dụng khách. Điều này đặc biệt hữu ích nếu sự cố này đã xảy ra trong quá khứ hoặc nếu sự cố không liên tục và bạn không thể ghi lại dấu vết trong giao diện người dùng.

      Hãy tham khảo bài viết Tạo và quản lý báo cáo tuỳ chỉnh để tìm hiểu cách tạo báo cáo tuỳ chỉnh. Trong báo cáo tuỳ chỉnh, hãy chọn:

      1. Tổng lưu lượng truy cập dưới dạng Chỉ số và

      2. Proxy, Mã trạng thái phản hồi, IP ứng dụng proxyX-Forwarded-For dưới dạng Thứ nguyên.

      Việc này sẽ giúp bạn xác định địa chỉ IP hoặc địa chỉ IP của ứng dụng được truyền dẫn đến lỗi.

  4. Nếu địa chỉ IP của ứng dụng khách (thể hiện bằng biến proxy.client.ip) hoặc bất kỳ địa chỉ IP nào được truyền trong yêu cầu API, khớp với(các) địa chỉ IP được chỉ định ở phần tử <SourceAddress> trong phần tử <MatchRule> của Chính sách kiểm soát quyền truy cập, trong đó thuộc tính action được đặt thành DENY, thì đó chính là nguyên nhân gây ra lỗi.

    Trong ví dụ trên, giá trị được đặt trong biến tham chiếu proxy.client.ip (như trong ảnh chụp màn hình theo dõi ở trên) khớp với địa chỉ IP được xác định trong phần tử <SourceAddress> của chính sách Kiểm soát quyền truy cập, do đó kích hoạt phản hồi lỗi:

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

Độ phân giải

Nếu chính sách Kiểm soát quyền truy cập nhằm từ chối quyền truy cập vào các yêu cầu API đến từ(các) địa chỉ IP cụ thể được liệt kê trong faultstring, thì sẽ xuất hiện thông báo lỗi. Trong trường hợp này, bạn không cần làm gì thêm.

Tuy nhiên, nếu bạn xác định rằng(các) địa chỉ IP cụ thể có thể được cấp quyền truy cập vào các yêu cầu API cho Proxy API cụ thể, hãy sửa đổi Chính sách kiểm soát quyền truy cập để cho phép truy cập vào(các) địa chỉ IP đó. Ngoài ra, bạn có thể xoá Chính sách kiểm soát quyền truy cập khỏi Proxy API nếu không muốn từ chối quyền truy cập vào bất kỳ địa chỉ IP nào.

Dưới đây là ví dụ cho thấy cách chỉ cho phép truy cập vào một Địa chỉ IP cụ thể 104.132.196.83 và từ chối truy cập đối với các địa chỉ IP còn lại:

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