คุณกำลังดูเอกสารประกอบของ 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 ในข้อความที่คุณกำลังกำหนดค่ากฎที่จะต้องจัดการ
- กำหนดค่ามาสก์สำหรับที่อยู่ IP แต่ละรายการ คุณอนุญาตหรือปฏิเสธการเข้าถึงตามค่ามาสก์บนที่อยู่ IP โปรดดูเกี่ยวกับการมาสก์ IP ด้วยรูปแบบ CIDR
- ระบุลำดับการทดสอบกฎ
- กฎการจับคู่ทั้งหมดจะทำงานตามลำดับที่กำหนด เมื่อมีกฎตรงกัน ระบบจะดำเนินการตามกฎและข้ามกฎการจับคู่ต่อไปนี้
- หากมีการกำหนดค่ากฎเดียวกันทั้งการดำเนินการ "อนุญาต" และ "ปฏิเสธ" ระบบจะเรียกใช้กฎที่กำหนดก่อนในคำสั่งซื้อและข้ามกฎถัดไป (พร้อมกับการดำเนินการอื่น)
วิธีที่นโยบายเลือกที่อยู่ 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 |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มีข้อมูล | จำเป็น |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
false | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
false | เลิกใช้ |
องค์ประกอบ <DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มีข้อมูล หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
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 | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|---|
มาสก์ |
แอตทริบิวต์
เทียบเท่ากับรูปแบบ CIDR ต่อไปนี้ 198.51.100.1/24 ค่าที่ถูกต้อง: IPv4: 1-32 IPv6: 1-128 ค่าศูนย์ (0) จะใช้ได้กับ IP 0.0.0.0 เท่านั้น ดังนั้นจึงใช้ไม่ได้ในทางปฏิบัติ กำหนดมาสก์ด้วยตัวแปร แอตทริบิวต์
|
จำนวนเต็ม | ไม่มีข้อมูล | จำเป็น |
อีลิเมนต์ <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 |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
ค่าที่ถูกต้อง |
|
สคีมา
นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd) โปรดดู สคีมานโยบายสำหรับการอ้างอิงใน GitHub
การอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กําหนดเมื่อนโยบายนี้ทําให้เกิดข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
---|---|---|---|
accesscontrol.IPDeniedAccess |
403 | ที่อยู่ IP ของไคลเอ็นต์หรือที่อยู่ IP ที่ส่งผ่านในคำขอ API ตรงกับที่อยู่ IP ที่ระบุในองค์ประกอบ <SourceAddress> ภายในองค์ประกอบ <MatchRule> ของนโยบายการควบคุมการเข้าถึง และแอตทริบิวต์ action ขององค์ประกอบ <MatchRule> มีการตั้งค่าเป็น DENY |
build |
ตัวแปรของข้อผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อเกิดข้อผิดพลาดรันไทม์ ดูข้อมูลเพิ่มเติมได้ที่ตัวแปรที่ใช้กับข้อผิดพลาดของนโยบายโดยเฉพาะ
ตัวแปร | สถานที่ | ตัวอย่าง |
---|---|---|
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>