
ในสถาปัตยกรรมความปลอดภัยของ ACI ค่าเริ่มต้นในการสื่อสารกันระหว่าง EPG ต่างกลุ่ม EPG ทุกตัวจะคุยกันไม่ได้จนกว่าจะมี Contract มาอนุญาตว่า EPG ไหนสามารถคุยกับ EPG ไหนได้โดย Contract เปรียบเสมือน “กฎ” หรือ “Policy” ที่กำหนดว่า Endpoint Group (EPG) ไหน สามารถสื่อสารกับ EPG ไหนได้บ้าง ด้วยโปรโตคอลและพอร์ตอะไร เปรียบเสมือน Firewall Rule ที่ระบุ Source, Destination, และ Service
บทความนี้จะอธิบายถึง ขั้นตอนการตั้งค่า Contract บน Cisco ACI โดยครอบคลุมรายละเอียดการในการตั้งค่า Filter รายละเอียดการตั้งค่าต่างๆ พร้อมทั้งวิธีการนำ Contract ไปใช้งานสามารถดูขั้นตอนต่างๆจากบทความด้านล่างได้เลยครับ
องค์ประกอบสำคัญของ Contract
- Endpoint Group (EPG): คือกลุ่มของเซิร์ฟเวอร์, VM, หรือ Container ที่มีฟังก์ชันหรือต้องการ Policy ความปลอดภัยแบบเดียวกัน เช่น EPG-Web, EPG-App, EPG-Database
- Contract: คือตัวกำหนด “กฎ” การสื่อสาร
- Provider/Consumer Relationship (ความสัมพันธ์แบบผู้ให้บริการ/ผู้ใช้บริการ):
- Provider (ผู้ให้บริการ): EPG ที่ “ให้” บริการ เช่น EPG-Database ให้บริการ Port 1433 (SQL)
- Consumer (ผู้ใช้บริการ): EPG ที่ “เรียกใช้” บริการนั้นๆ เช่น EPG-App เรียกใช้บริการจาก EPG-Database
- ความสำคัญ: Contract จะถูก “Provide” โดยฝั่งหนึ่ง และ “Consume” โดยอีกฝั่งหนึ่ง การสื่อสารจึงจะเกิดขึ้นได้
- Filter: คือส่วนที่ระบุรายละเอียดของการสื่อสารที่อนุญาต เช่น
tcp-port-80
,udp-port-53
- Subject: เป็นเหมือน “โฟลเดอร์” ที่ใช้จัดกลุ่ม Filter หลายๆ อันเข้าไว้ด้วยกันใน Contract เดียว
ขั้นตอนการสร้าง Contract และใช้งาน Contract
ในที่นี้จะยกตัวอย่างสร้าง Contract เพื่อให้เครื่อง Window ใน EPG-717 สามารถ RDP ไปยังเครื่อง Window ใน EPG-718 ได้และจะยกตัวอย่างการตั้งค่าบน NDO
1.สร้าง Filter โดยบน NDO จะไปที่ Tenant Templates ->Application-> Create object -> Filter ส่วน บน APIC ไปยัง Tenant ที่ต้องการสร้าง -> Contract -> Filter ให้ทำการตั้งชื่อ Filter แล้วทำการกด Add Entry
โดยในแต่ละส่วนของ Entry ใส่ข้อมูลตามนี้
- Name
ชื่อของ filter entry (ควรตั้งให้สื่อ เช่นTCP-443-HTTPS
,ICMP-ALL
)แต่ในที่นี่ตั้งเป็น IP - Ether Type
ประเภทเฟรมที่ต้องการจับเช่น IP,ARP,FCOE และอื่นๆที่มีให้เลือกครับแต่ในส่วนนี้ถ้าเรากำหนดเป็น Unspecified จะหมายถึง ไม่ระบุเจาะจง Filter จะไม่สนใจว่าทราฟฟิกนั้นเป็น Ether Type ประเภทไหนจะเป็น ANY Filter ไปเลย โดยในที่นี่จะตั้งค่าเป็น IP - IP Protocol (แสดงเมื่อ Ether Type = IP)
โปรโตคอล L4 ที่ต้องการ เช่น TCP, UDP, ICMP, IGMP, หรือ unspecified (ทุกโปรโตคอล IP) - Destination Port Range From / To (เฉพาะ TCP/UDP)
ระบุพอร์ตปลายทางที่อนุญาต- ใส่ From = 3389, To = Unspecified หรือ 3389 หมายถึงพอร์ต 3389 เดี่ยว ๆ
- ใส่ช่วง เช่น From 1024, To 65535 = ช่วงพอร์ตปลายทางกว้าง
- ถ้า Unspecified ทั้งคู่ = ไม่จำกัดพอร์ตปลายทาง
- Source fields (อยู่ช่วงล่างของเมนู)
- Source Port Range From / To (เฉพาะ TCP/UDP)
ระบุพอร์ตต้นทางส่วนมากปล่อย Unspecified ใช้เมื่อทราบชัดว่าต้นทางใช้พอร์ตคงที่ - TCP Session Rules (เฉพาะ TCP)
เลือกเงื่อนไขตาม TCP flags โดยปล่อยเป็น unspecified = ไม่จำกัด (จับทุกแพ็กเก็ต TCP ตามพอร์ต)
- Source Port Range From / To (เฉพาะ TCP/UDP)
2.สร้าง Contract โดยบน NDO จะไปที่ Tenant Templates ->Application-> Create object -> Contract ส่วน บน APIC ไปยัง Tenant ที่ต้องการสร้าง -> Contract ->Standard ให้ทำการกรอกข้อมูลในส่วนต่างๆ
Display Name
-
เป็นการตั้งชื่อ Contract
Scope (สำคัญมาก) บอกขอบเขตที่ contract ใช้ได้โดยมีรายละเอีอดคือ
-
VRF – ค่าแนะนำ: ใช้ได้เฉพาะภายใน VRF เดียวกัน
-
Tenant – ใช้ได้ข้าม VRF ภายใน tenant เดียวกัน
-
Global – อนุญาตให้ ข้าม tenants
Apply both directions
-
On (แนะนำ): ให้ filter ชุดเดียว ใช้ได้สองทิศ (ไป–กลับ) สะดวกกับ client↔server ทั่วไป (HTTP/HTTPS/DB)
-
Off: ใช้แบบ ทางเดียว — ต้องสร้าง filter สำหรับ traffic ฝั่งกลับเอง (เช่นใส่ TCP flag established เพื่อให้เฉพาะแพ็กเก็ตตอบกลับผ่านได้)
Filter Chain
- เลือก Filter ที่เราต้องการจะใช้งานบน Contract นี้โดย 1 Contract มีได้หลาย Filter
3.Apply Contract ไปยัง EPG โดยบน NDO ไปยัง Application Profile -> EPG ที่ต้องการ -> Add Contract ส่วนบน APIC ก็ไปยัง Application Profile -> EPG ที่ต้องการ -> Contract -> Add Contract โดยในตัวอย่างเป็นการ Permit ให้ Window ใน EPG-717 สามารถ RDP ไปยังเครื่อง Window ใน EPG-718 ได้ จึงเลือกฝั่ง EPG-717 เป็น Consumer และ EPG-718 เป็น Provider
หลังจากนั้นสามารถทดสอบผลลัพธ์ได้เลยครับโดยผลลัพธ์ที่ควรได้จากในตัวอย่างนี้คือ Window EPG-717 สามารถ RDP ไปยังเครื่อง Window ใน EPG-718 ได้แต่ EPG-718 ไม่สามารถ RDP ไปยัง EPG-717 ได้
EPG-717 to EPG-718
EPG-718 to EPG-717
อ้างอิง: Cisco Application Centric Infrastructure – Cisco ACI Contract Guide White Paper – Cisco