นโยบาย AccessControl

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

อะไร

นโยบายควบคุมการเข้าถึงให้คุณอนุญาตหรือปฏิเสธการเข้าถึง API ด้วยที่อยู่ IP ที่เจาะจง

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

แม้ว่าคุณจะแนบนโยบายนี้ได้ทุกที่ในขั้นตอนพร็อกซี API แต่ก็น่าจะต้องตรวจสอบที่อยู่ IP ในตอนต้นของโฟลว์ ( Request / ProxyEndpoint / PreFlow) แม้จะทำก่อนการตรวจสอบสิทธิ์หรือการตรวจสอบโควต้าก็ตาม

ลองฟัง

ค่ามาสก์ในตัวอย่าง IPv4 ต่อไปนี้จะระบุอ็อกเท็ต 4 อ็อกเท็ต (8, 16, 24, 32 บิต) ที่กฎการจับคู่จะพิจารณาเมื่ออนุญาตหรือปฏิเสธการเข้าถึง ค่าเริ่มต้นคือ 32 ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์ mask ในการอ้างอิงองค์ประกอบ

ปฏิเสธ 198.51.100.1

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

ปฏิเสธคำขอทั้งหมดจากที่อยู่ไคลเอ็นต์: 198.51.100.1

อนุญาตคำขอจากที่อยู่ไคลเอ็นต์อื่นๆ

ปฏิเสธการใช้ตัวแปร

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "ALLOW">
    <MatchRule action = "DENY">
      <SourceAddress mask="{kvm.mask.value}">{kvm.ip.value}</SourceAddress>
    </MatchRule>
    </IPRules>
</AccessControl>

สมมติว่าคุณใช้คีย์-ค่าแมป (KVM) เพื่อเก็บค่าสำหรับการมาสก์และ IP วิธีนี้เป็นวิธีที่สะดวกในการเปลี่ยน IP และการมาสก์ระหว่างรันไทม์โดยไม่ต้องอัปเดตและทำให้พร็อกซี API ใช้งานได้อีกครั้ง คุณใช้นโยบาย KeyValueMapEnforcements เพื่อเรียกข้อมูลตัวแปรที่มีค่าสำหรับ kvm.mask.value และ kvm.ip.value ได้ (สมมติว่าเป็นสิ่งที่ตั้งชื่อตัวแปรในนโยบาย KVM ที่มีค่าของมาสก์และค่า IP จาก KVM) หากค่าที่คุณเรียกคือ 24 สำหรับมาสก์และ 198.51.100.1 สำหรับที่อยู่ IP นโยบาย AccessControl จะปฏิเสธคำขอทั้งหมดจาก 198.51.100*

โดยจะอนุญาตที่อยู่อื่นๆ ทั้งหมดของไคลเอ็นต์

ปฏิเสธ 198.51.100*

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

ปฏิเสธคำขอทั้งหมดจากที่อยู่ไคลเอ็นต์: 198.51.100*

อนุญาตคำขอจากที่อยู่ไคลเอ็นต์อื่นๆ

198.51.*.*

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

ปฏิเสธคำขอทั้งหมดจากที่อยู่ไคลเอ็นต์: 198.51*.*

อนุญาตคำขอจากที่อยู่ไคลเอ็นต์อื่นๆ

ปฏิเสธ 198.51.100.*, อนุญาต 192.0.2.1

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

ปฏิเสธคำขอทั้งหมดจากที่อยู่ไคลเอ็นต์: 198.51.100.* แต่อนุญาต 192.0.2.1

อนุญาตคำขอจากที่อยู่ไคลเอ็นต์อื่นๆ

อนุญาต 198.51.*.*

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

อนุญาตคำขอทั้งหมดจากที่อยู่: 198.51*.*

ปฏิเสธคำขอจากที่อยู่ไคลเอ็นต์อื่นๆ

อนุญาตหลาย IP

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "DENY">
    <MatchRule action = "ALLOW">
      <SourceAddress mask="24">198.51.100.1</SourceAddress>
      <SourceAddress mask="24">192.0.2.1</SourceAddress>
      <SourceAddress mask="24">203.0.113.1</SourceAddress>
     </MatchRule>
  </IPRules>
</AccessControl>

อนุญาตคำขอจากที่อยู่ไคลเอ็นต์: 198.51.100* 192.0.2.* 203.0.113.*

ปฏิเสธที่อยู่อื่นทั้งหมด

ปฏิเสธหลาย IP

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "ALLOW">
    <MatchRule action = "DENY">
      <SourceAddress mask="24">198.51.100.1</SourceAddress>
      <SourceAddress mask="24">192.0.2.1</SourceAddress>
      <SourceAddress mask="24">203.0.113.1</SourceAddress>
    </MatchRule>
  </IPRules>
</AccessControl>

ปฏิเสธคำขอจากที่อยู่ไคลเอ็นต์: 198.51.100* 192.0.2.* 203.0.113.*

อนุญาตที่อยู่อื่นๆ ทั้งหมด

อนุญาต IP หลายรายการ ปฏิเสธ IP หลายรายการ

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "DENY">
    <MatchRule action = "DENY">
      <SourceAddress mask="24">198.51.100.1</SourceAddress>
      <SourceAddress mask="24">192.0.2.1</SourceAddress>
      <SourceAddress mask="24">203.0.113.1</SourceAddress>
    </MatchRule>
    <MatchRule action = "ALLOW">
      <SourceAddress mask="16">198.51.100.1</SourceAddress>
      <SourceAddress mask="16">192.0.2.1</SourceAddress>
      <SourceAddress mask="16">203.0.113.1</SourceAddress>
    </MatchRule>
  </IPRules>
</AccessControl>

อนุญาต: 198.51.*.* 192.0.*.* 203.0*.*

ปฏิเสธรายการที่อนุญาตบางส่วน: 198.51.100* 192.0.2.* 203.0.113.*


หมายเหตุการใช้งาน

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

การกำหนดค่าและการดำเนินการของนโยบายควบคุมการเข้าถึงเกี่ยวข้องกับสิ่งต่อไปนี้

  • กำหนดชุดกฎการจับคู่ที่มีการดำเนินการ 1 ใน 2 รายการ (อนุญาตหรือปฏิเสธ) ที่เชื่อมโยงกับแต่ละรายการ
  • ระบุที่อยู่ IP (องค์ประกอบ SourceAddress) สำหรับกฎการจับคู่แต่ละกฎ
  • ระบุลำดับการทดสอบกฎ
  • กฎการจับคู่ทั้งหมดจะทำงานตามลำดับที่กำหนด เมื่อมีกฎตรงกัน ระบบจะดำเนินการตามกฎและข้ามกฎการจับคู่ต่อไปนี้
    • หากมีการกำหนดค่ากฎเดียวกันทั้งการดำเนินการ "อนุญาต" และ "ปฏิเสธ" ระบบจะเรียกใช้กฎที่กำหนดก่อนในคำสั่งซื้อและข้ามกฎถัดไป (พร้อมกับการดำเนินการอื่น)

วิธีที่นโยบายเลือกที่อยู่ IP ที่จะประเมิน

ที่อยู่ IP อาจมาจากแหล่งที่มาหลายแห่งในคำขอ เช่น ส่วนหัวของข้อความ True-Client-IP อาจมีที่อยู่ IP และส่วนหัว X-Forwarded-For อาจมีที่อยู่ IP อย่างน้อย 1 รายการ หัวข้อนี้จะอธิบายวิธีกำหนดค่านโยบาย AccessControl เพื่อประเมินที่อยู่ IP ที่ถูกต้องที่คุณต้องการให้ประเมิน

ต่อไปนี้เป็นตรรกะที่นโยบาย AccessControl ใช้ในการตัดสินใจว่าจะประเมินที่อยู่ IP ใด

1. ส่วนหัว True-Client-IP

นโยบายจะตรวจสอบที่อยู่ IP ในส่วนหัว True-Client-IP ก่อน หากส่วนหัวมีที่อยู่ IP ที่ถูกต้อง นโยบายจะประเมินที่อยู่นั้น

2. ส่วนหัว X-Forwarded-For

หากไม่มีส่วนหัว True-Client-IP หรือคุณตั้งค่าองค์ประกอบ <IgnoreTrueClientIPHeader> เป็น"จริง" นโยบายจะประเมินที่อยู่ IP ในส่วนหัว X-Forwarded-For

Edge จะใส่ที่อยู่ IP ที่ได้รับจากแฮนด์เชค TCP ภายนอกครั้งล่าสุดในส่วนหัว X-Forwarded-For โดยอัตโนมัติ (เช่น IP ของไคลเอ็นต์หรือเราเตอร์) หากมีที่อยู่ IP หลายรายการในส่วนหัว ที่อยู่เหล่านั้นน่าจะเป็นเชนเซิร์ฟเวอร์ที่ดำเนินการตามคำขอ แต่รายการที่อยู่อาจมีที่อยู่ IP ที่ถูกปลอมแปลง แล้วนโยบายจะรู้ได้อย่างไรว่าจะต้องประเมินที่อยู่ใด

การกำหนดค่าองค์กรและการกำหนดค่านโยบายจะกำหนดที่อยู่ X-Forwarded-For ที่นโยบายจะประเมิน

ก่อนอื่นให้ตรวจสอบว่ามีการตั้งค่าพร็อพเพอร์ตี้ feature.enableMultipleXForwardCheckForACL ในองค์กรหรือไม่ โดยคุณสามารถใช้ API รับข้อมูลองค์กรเพื่อตรวจสอบ จากนั้นให้ทำดังนี้

  • หากคุณไม่เห็น feature.enableMultipleXForwardCheckForACL ในรายการพร็อพเพอร์ตี้ขององค์กร แสดงว่ามีการตั้งค่าพร็อพเพอร์ตี้เป็น false (ค่าเริ่มต้น) เมื่อกำหนดค่าพร็อพเพอร์ตี้นี้เป็น "เท็จ" นโยบายจะประเมินที่อยู่สุดท้ายในส่วนหัว (แสดงในเครื่องมือติดตาม) ซึ่งก็คือ Edge ที่อยู่ IP ที่ได้รับจากแฮนด์เชค TCP ภายนอกครั้งล่าสุด
  • หาก feature.enableMultipleXForwardCheckForACL ในองค์กรตั้งค่าเป็น "จริง" ให้กำหนดค่าองค์ประกอบ <ValidateBasedOn> เพื่อระบุที่อยู่ IP ที่นโยบายจะประเมิน

การเปลี่ยนพร็อพเพอร์ตี้ feature.enableMultipleXForwardCheckForACL

ผู้ดูแลระบบองค์กร Edge สามารถใช้ API อัปเดตพร็อพเพอร์ตี้ขององค์กรเพื่อตั้งค่าพร็อพเพอร์ตี้ feature.enableMultipleXForwardCheckForACL

ตัวอย่าง API ต่อไปนี้ตั้งค่าพร็อพเพอร์ตี้ใน Edge สำหรับ Private Cloud หากมีพร็อพเพอร์ตี้อื่นๆ ที่ตั้งค่าไว้ในองค์กร อย่าลืมเพิ่มพร็อพเพอร์ตี้เหล่านั้นด้วย มิฉะนั้นระบบจะนำออก

curl -u email:password -X POST -H "Content-type:application/xml" http://host:8080/v1/o/myorg -d \
"<Organization type="trial" name="MyOrganization">
    <DisplayName>MyOrganization</DisplayName>
    <Properties>
        <Property name="feature.enableMultipleXForwardCheckForACL">true</Property>
        <!-- Include other existing properties as well. -->
    </Properties>
</Organization>"

ใน Edge for Private Cloud หลังจากเปลี่ยนค่าของพร็อพเพอร์ตี้ feature.enableMultipleXForwardCheckForACL คุณต้องรีสตาร์ทตัวประมวลผลข้อความตามที่อธิบายไว้ใน เริ่มต้น/หยุด/รีสตาร์ทคอมโพเนนต์แต่ละรายการ

X-Forwarded-For มิติข้อมูลในการวิเคราะห์ Apigee

Edge Analytics จะเขียนค่าของส่วนหัว X-Forwarded-For ไปยังมิติข้อมูล x_forwarded_for_ip หากต้องการกำหนด IP ไคลเอ็นต์ที่ส่งคำขอไปยัง Edge ให้ใช้ค่าในคอลัมน์ ax_true_client_ip หรือ ax_resolved_client_ip ดูข้อมูลเพิ่มเติมได้ในเมตริก มิติข้อมูล และข้อมูลอ้างอิงตัวกรองของ Analytics

เกี่ยวกับการมาสก์ IP ด้วยรูปแบบ CIDR

รูปแบบ CIDR (การกำหนดเส้นทางระหว่างโดเมนแบบ Classless ) เป็นวิธีระบุช่วงที่อยู่ IP ผ่านการมาสก์ การตั้งค่านี้มีผลกับทั้ง IPv4 และ IPv6 มาดูวิธีใช้งานกัน เราจะใช้ IPv4 ในตัวอย่างเพื่อให้ดูง่ายขึ้น

ที่อยู่ IP คือกลุ่มตัวเลขที่คั่นด้วยจุด ในไบนารี แต่ละกลุ่มคือจำนวนบิตที่เฉพาะเจาะจง (8 สำหรับ IPv4 และ 16 สำหรับ IPv6) ที่อยู่ IPv4 198.51.100.1 จะมีลักษณะดังนี้ในไบนารี

11000110.00110011.01100100.00000001

นั่นคือ 4 กลุ่มจาก 8 บิต หรือทั้งหมด 32 บิต เมื่อใช้ CIDR คุณจะระบุช่วงได้โดยการเพิ่ม /number (1-32) ลงในที่อยู่ IP ดังนี้

198.51.100.1/24

ในกรณีนี้ 24 คือตัวเลขที่คุณจะใช้สำหรับค่าแอตทริบิวต์ mask ในนโยบายนี้

หมายเหตุนี้หมายความว่า "เก็บ 24 บิตแรกไว้ตามเดิม บิตที่เหลือจะเป็นค่าใดก็ได้ตั้งแต่ 0 ถึง 255" เช่น

คงสถานะเหล่านี้ไว้ตามเดิม ค่าที่เป็นไปได้สำหรับกลุ่มสุดท้าย
198.51.100. 0 - 255

สังเกตว่ามาสก์จะอยู่ที่ตอนท้ายของกลุ่มที่ 3 ซึ่งจะทำให้ทุกอย่างดูเรียบร้อยและเป็นระเบียบ โดยหลักๆ แล้วจะสร้างมาสก์แบบนี้ 198.51.100.* ในกรณีส่วนใหญ่ การใช้ค่าพหุคูณของ 8 (IPv4) และ 16 (IPv6) จะให้ระดับการมาสก์ที่คุณต้องการดังต่อไปนี้

IPv4: 8, 16, 24, 32

IPv6: 16, 32, 48, 64, 80, 96, 112, 128

แต่คุณจะใช้หมายเลขอื่นๆ เพื่อการควบคุมที่ละเอียดยิ่งขึ้นได้ ซึ่งจะต้องมีการคำนวณเลขฐานสองเล็กน้อย ต่อไปนี้คือตัวอย่างการใช้มาสก์ 30 เช่น 198.51.100.1/30 โดยที่ 1 สุดท้ายคือ 00000001 ในไบนารี

คงสถานะเหล่านี้ไว้ตามเดิม ค่าที่เป็นไปได้
11000110.00110011.01100100.000000 (30 บิตแรก) 00000000, 00000001, 00000010 หรือ 00000011
198.51.100. 0, 1, 2 หรือ 3

ในตัวอย่างนี้ เมื่อกำหนดค่าเป็น <SourceAddress mask="30">198.51.100.1</SourceAddress> ระบบจะอนุญาต (หรือปฏิเสธ IP ต่อไปนี้ ทั้งนี้ขึ้นอยู่กับกฎของคุณ)

  • 198.51.100.0
  • 198.51.100.1
  • 198.51.100.2
  • 198.51.100.3

การอ้างอิงองค์ประกอบ

การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบายควบคุมการเข้าถึง

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control-1">
    <DisplayName>Access Control 1</DisplayName>
    <IPRules noRuleMatchAction = "ALLOW">
        <MatchRule action = "ALLOW">
            <SourceAddress mask="32">198.51.100.1</SourceAddress>
        </MatchRule>
        <MatchRule action = "DENY">
            <SourceAddress mask="24">198.51.100.1</SourceAddress>
        </MatchRule>
    </IPRules>
    <ValidateBasedOn>X_FORWARDED_FOR_ALL_IP</ValidateBasedOn>
</AccessControl>

แอตทริบิวต์ <AccessControl>

<AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control-1"> 

ตารางต่อไปนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name มีตัวอักษร ตัวเลข ช่องว่าง ขีดกลาง ขีดล่าง และจุด ค่านี้ต้องมีอักขระไม่เกิน 255 ตัว

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป

ไม่มีข้อมูล จำเป็น
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งถือเป็นเรื่องปกติสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้การดำเนินการโฟลว์ดำเนินต่อไปได้แม้ว่านโยบายจะล้มเหลวก็ตาม

false ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังแนบอยู่กับขั้นตอนก็ตาม

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

false เลิกใช้

องค์ประกอบ <DisplayName>

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มีข้อมูล

หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ name ของนโยบาย

การมีบุคคลอยู่ ไม่บังคับ
Type สตริง

องค์ประกอบ < ignoreTrueClientIPHeader>

เมื่อตั้งค่านโยบายนี้เป็น "จริง" นโยบายจะไม่สนใจส่วนหัว True-Client-IP และประเมินที่อยู่ IP ในส่วนหัว X-Forwarded-For ตามลักษณะการทํางานของการประเมิน X-Forwarded-For ที่คุณกำหนดค่าไว้


<AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control-1">
    <DisplayName>Access Control-1</DisplayName>
    <IgnoreTrueClientIPHeader>true</IgnoreTrueClientIPHeader>
    ...
</AccessControl>

ค่าเริ่มต้น false
การมีบุคคลอยู่ ไม่บังคับ
Type บูลีน

องค์ประกอบ <IP Rules>

องค์ประกอบระดับบนที่มีกฎที่อนุญาตหรือปฏิเสธที่อยู่ IP แอตทริบิวต์ noRuleMatchAction ให้คุณกำหนดวิธีจัดการที่อยู่ IP ที่กฎการจับคู่ไม่ได้ครอบคลุม

<IPRules noRuleMatchAction = "ALLOW">
ค่าเริ่มต้น ไม่มีข้อมูล
การมีบุคคลอยู่ ไม่บังคับ
Type ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย Type ค่าเริ่มต้น การมีบุคคลอยู่
noRuleMatchAction
การดำเนินการที่ต้องทำ (อนุญาตหรือปฏิเสธการเข้าถึง) หากกฎการจับคู่ที่ระบุไม่ได้รับการแก้ไข (ไม่ตรงกัน)
ค่าที่ใช้ได้: ALLOW หรือ DENY
สตริง อนุญาต จำเป็น

องค์ประกอบ <IPRule>/<MatchRule>

การดำเนินการที่ต้องทำ (อนุญาตหรือปฏิเสธการเข้าถึง) หากที่อยู่ IP ตรงกับ SourceAddress ที่คุณกำหนด

<IPRules noRuleMatchAction = "ALLOW">
    <MatchRule action = "ALLOW">
        <SourceAddress mask="32">198.51.100.1</SourceAddress>
    </MatchRule>
    <MatchRule action = "DENY">
        <SourceAddress mask="24">198.51.100.1</SourceAddress>
    </MatchRule>
</IPRules>
ค่าเริ่มต้น ไม่มีข้อมูล
การมีบุคคลอยู่ ไม่บังคับ
Type ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย Type ค่าเริ่มต้น การมีบุคคลอยู่
การดำเนินการ

การดำเนินการที่ต้องทำ (อนุญาตหรือปฏิเสธการเข้าถึง) หากกฎการจับคู่ที่ระบุไม่ได้รับการแก้ไข (ไม่ตรงกัน)

ค่าที่ใช้ได้: ALLOW หรือ DENY

สตริง อนุญาต จำเป็น

องค์ประกอบ <IPRule>/<MatchRule>/<SourceAddress>

ช่วงที่อยู่ IP ของไคลเอ็นต์

ค่าที่ถูกต้อง: ที่อยู่ IP ที่ถูกต้อง (สัญลักษณ์ที่มีจุดทศนิยม) สำหรับลักษณะการทำงานของไวลด์การ์ด ให้ใช้แอตทริบิวต์ mask

<IPRules noRuleMatchAction = "ALLOW">
    <MatchRule action = "ALLOW">
        <SourceAddress mask="{variable}">198.51.100.1</SourceAddress>
    </MatchRule>
    <MatchRule action = "DENY">
        <SourceAddress mask="24">{variable}</SourceAddress>
    </MatchRule>
</IPRules>

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

ตัวอย่างเช่น คุณจัดเก็บที่อยู่ IP ในแมปค่าคีย์ (KVM) และใช้นโยบาย KeyValueMapEnforcements เพื่อดึงข้อมูลที่อยู่ IP และกำหนดที่อยู่ดังกล่าวให้กับตัวแปร (เช่น kvm.ip.value) จากนั้นคุณจะใช้ตัวแปรดังกล่าวสำหรับที่อยู่ IP ได้ ดังนี้

<SourceAddress mask="24">{kvm.ip.value}</SourceAddress>

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

ค่าเริ่มต้น ไม่มีข้อมูล
การมีบุคคลอยู่ ไม่บังคับ
Type สตริง (ที่อยู่ IP เดียวเท่านั้น)

Attributes

แอตทริบิวต์ คำอธิบาย Type ค่าเริ่มต้น การมีบุคคลอยู่
มาสก์

แอตทริบิวต์ mask เป็นวิธีระบุช่วงที่อยู่ IP ที่จะอนุญาตหรือปฏิเสธ มาสก์เทียบเท่ากับการใช้รูปแบบ CIDR (การกำหนดเส้นทางโดเมนระหว่าง Classless) เช่น

<SourceAddress mask="24">198.51.100.1</SourceAddress>

เทียบเท่ากับรูปแบบ CIDR ต่อไปนี้

198.51.100.1/24

ค่าที่ถูกต้อง:

IPv4: 1-32

IPv6: 1-128

ค่าศูนย์ (0) จะใช้ได้กับ IP 0.0.0.0 เท่านั้น ดังนั้นจึงใช้ไม่ได้ในทางปฏิบัติ

กำหนดมาสก์ด้วยตัวแปร

แอตทริบิวต์ mask ยังรองรับเทมเพลตข้อความ ซึ่งหมายความว่าคุณจะตั้งค่าด้วยตัวแปรที่มีอยู่ในขั้นตอนพร็อกซี API ได้ เช่น คุณจัดเก็บค่ามาสก์ใน KVM และใช้นโยบาย KeyValueMapOperatings เพื่อเรียกข้อมูลมาสก์และกำหนดให้กับตัวแปรได้ หากต้องการตั้งค่า IP มาสก์ด้วยตัวแปร ให้ใช้รูปแบบต่อไปนี้ โดยสมมติว่าตัวแปรชื่อ kvm.mask.value

mask="{kvm.mask.value}"

จำนวนเต็ม ไม่มีข้อมูล จำเป็น

อีลิเมนต์ <VerifyBasedOn>

เมื่อส่วนหัว HTTP ของ X-Forwarded-For มีที่อยู่ IP หลายรายการ ให้ใช้องค์ประกอบ ValidateBasedOn นี้เพื่อควบคุมที่อยู่ IP ที่จะประเมิน

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

ที่อยู่ IP ด้านซ้ายสุดในส่วนหัวเป็นของไคลเอ็นต์ และด้านขวาสุดคือเซิร์ฟเวอร์ที่ส่งต่อคำขอไปยังบริการปัจจุบัน ที่อยู่ IP ด้านขวาสุดหรือที่อยู่ IP สุดท้ายคือที่อยู่ Edge ที่ได้รับจากแฮนด์เชค TCP ภายนอกครั้งล่าสุด

ค่าที่คุณป้อนในองค์ประกอบนี้ช่วยให้คุณระบุได้ว่าจะตรวจสอบที่อยู่ IP ทั้งหมดในส่วนหัว (ค่าเริ่มต้น) เฉพาะที่อยู่ IP แรก หรือเฉพาะที่อยู่ IP สุดท้าย

<AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control-1">
    <DisplayName>Access Control 1</DisplayName>
    <IPRules noRuleMatchAction = "ALLOW">
        <MatchRule action = "DENY">
            <SourceAddress mask="32">198.51.100.1</SourceAddress>
        </MatchRule>
    </IPRules>
    <ValidateBasedOn>X_FORWARDED_FOR_ALL_IP</ValidateBasedOn>
</AccessControl>
ค่าเริ่มต้น X_FORWARDED_FOR_ALL_IP
การมีบุคคลอยู่ ไม่บังคับ
ค่าที่ถูกต้อง

X_FORWARDED_FOR_ALL_IP (ค่าเริ่มต้น)

X_FORWARDED_FOR_FIRST_IP

X_FORWARDED_FOR_LAST_IP

สคีมา

นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd) โปรดดู สคีมานโยบายสำหรับการอ้างอิงใน GitHub

การอ้างอิงข้อผิดพลาด

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

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ แก้ไข
accesscontrol.IPDeniedAccess 403 ที่อยู่ IP ของไคลเอ็นต์หรือที่อยู่ IP ที่ส่งผ่านในคำขอ API ตรงกับที่อยู่ IP ที่ระบุในองค์ประกอบ <SourceAddress> ภายในองค์ประกอบ <MatchRule> ของนโยบายการควบคุมการเข้าถึง และแอตทริบิวต์ action ขององค์ประกอบ <MatchRule> มีการตั้งค่าเป็น DENY

ตัวแปรของข้อผิดพลาด

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

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่แสดงในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของโค้ดข้อผิดพลาด fault.name Matches "IPDeniedAccess"
acl.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด acl.AC-AllowAccess.failed = true

ตัวอย่างการตอบกลับสำหรับข้อผิดพลาด

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

ตัวอย่างกฎข้อผิดพลาด

<FaultRule name="IPDeniedAccess">
    <Step>
        <Name>AM-IPDeniedAccess</Name>
        <Condition>(fault.name Matches "IPDeniedAccess") </Condition>
    </Step>
    <Condition>(acl.failed = true) </Condition>
</FaultRule>