ข้ามไปยังเนื้อหา

บทบาท Certificate Admin - API

คู่มือนี้จะแนะนำขั้นตอนการสร้างบทบาท RBAC แบบกำหนดเองใน F5 Distributed Cloud ที่ให้สิทธิ์ในการจัดการใบรับรอง SSL/TLS และ certificate chain ที่ใช้โดย HTTP Load Balancer สำหรับวิธีการผ่าน UI โปรดดู คู่มือคอนโซลแบบย่อ

F5 XC ใช้โมเดลสิทธิ์แบบสามระดับ:

api_group_element (อ่านอย่างเดียว, กำหนดโดยระบบ)
api_group (อ่านอย่างเดียว, กำหนดโดยระบบ)
role (CRUD เต็มรูปแบบ — นี่คือสิ่งที่คุณสร้าง)
  1. api_group_element — กำหนดพาธ regex และเมธอด HTTP (เช่น POST /api/config/.*/certificates) จัดการโดยระบบ; คุณไม่สามารถ สร้าง แก้ไข หรือลบสิ่งเหล่านี้ได้

  2. api_group — คอลเลกชันที่มีชื่อของการอ้างอิง api_group_element จัดระเบียบตามพื้นที่ฟังก์ชัน จัดการโดยระบบ; คุณไม่สามารถสร้าง แก้ไข หรือ ลบสิ่งเหล่านี้ได้ กลุ่มใช้หลักการตั้งชื่อเช่น ves-io-proxy-read หรือ f5xc-waap-standard-admin

  3. role — อ้างอิงชื่อ api_group ในอาร์เรย์ นี่เป็นระดับเดียว ที่คุณสร้างได้ ใช้ endpoint ของบทบาทแบบกำหนดเองเพื่อแนบ api_groups เฉพาะเจาะจงเข้ากับบทบาท

การดำเนินการใบรับรองสำหรับ HTTP Load Balancer ถูกรวมอยู่ใน api_groups ves-io-proxy-* ร่วมกับทรัพยากรที่เกี่ยวข้องกับ proxy อื่นๆ (HTTP Load Balancer, route, origin เป็นต้น) ไม่มี api_groups เฉพาะสำหรับใบรับรองเพียงอย่างเดียว — แพลตฟอร์มจัดระเบียบสิทธิ์ตามพื้นที่ฟังก์ชัน ไม่ใช่ตามประเภททรัพยากรแต่ละรายการ

api_groups ves-io-proxy-read และ ves-io-proxy-write ให้สิทธิ์เข้าถึง ทรัพยากรที่เกี่ยวข้องกับ proxy ทั้งหมด ไม่ใช่เฉพาะใบรับรองเท่านั้น ผู้ใช้ที่ได้รับมอบหมายบทบาทนี้ ยังสามารถจัดการ HTTP Load Balancer, origin, route และอ็อบเจกต์ ระดับ proxy อื่นๆ ได้ด้วย

RBAC เฉพาะใบรับรองเท่านั้นไม่สามารถทำได้บน F5 XC ทั้ง api_group และ api_group_element เป็นอ็อบเจกต์ที่กำหนดโดยระบบและอ่านอย่างเดียว — API เปิดเผยเฉพาะ endpoint GET สำหรับสิ่งเหล่านี้เท่านั้น บทบาทสามารถอ้างอิงชื่อ api_group ที่มีอยู่ได้เท่านั้น และไม่มี api_group ที่จำกัดขอบเขตเฉพาะใบรับรอง

การบรรเทา — การแยก namespace: สร้าง namespace เฉพาะสำหรับ ทรัพยากรใบรับรองและมอบหมายบทบาท example-cert-admin ที่จำกัดขอบเขตเฉพาะ namespace นั้นเท่านั้น ผู้ใช้ยังคงมีสิทธิ์ระดับ proxy แต่ไม่สามารถเข้าถึง ทรัพยากรใน namespace อื่นๆ ซึ่งจำกัดผลกระทบจากขอบเขต api_group ที่กว้างกว่า

  • โทเค็น API ของ F5 XC ที่มีสิทธิ์ admin
  • ติดตั้ง curl และ jq แล้ว

ตั้งค่าตัวแปรสภาพแวดล้อมของคุณ:

Terminal window
export F5XC_TENANT="your-tenant"
export F5XC_API_URL="https://${F5XC_TENANT}.console.ves.volterra.io"
export F5XC_API_TOKEN="your-api-token"

แสดงรายการอ็อบเจกต์ api_group ที่กำหนดโดยระบบทั้งหมดและกรองเฉพาะ รายการที่เกี่ยวข้องกับ proxy (ซึ่งรวมถึงสิทธิ์ใบรับรอง):

Terminal window
curl -s \
-H "Authorization: APIToken ${F5XC_API_TOKEN}" \
"${F5XC_API_URL}/api/web/namespaces/shared/api_groups" \
| jq '[.items[] | select(.name | test("ves-io-proxy")) | .name] | sort'

ผลลัพธ์ที่คาดหวัง:

[
"ves-io-proxy-app-firewall-read",
"ves-io-proxy-app-firewall-write",
"ves-io-proxy-monitor-read",
"ves-io-proxy-monitor-write",
"ves-io-proxy-read",
"ves-io-proxy-security-read",
"ves-io-proxy-security-write",
"ves-io-proxy-waf-read",
"ves-io-proxy-waf-write",
"ves-io-proxy-write"
]

สำหรับการจัดการใบรับรอง กลุ่มที่เกี่ยวข้องคือ:

API Groupสิทธิ์ที่ให้
ves-io-proxy-readสิทธิ์อ่านทรัพยากร proxy รวมถึงใบรับรอง
ves-io-proxy-writeสิทธิ์เขียนทรัพยากร proxy รวมถึงใบรับรอง

ใช้ endpoint สร้างบทบาทแบบกำหนดเอง อาร์เรย์ api_groups อ้างอิงชื่อ api_group ที่กำหนดโดยระบบซึ่งค้นพบในขั้นตอนที่ 1

สร้างบทบาทแบบกำหนดเองที่มีสิทธิ์อ่านและเขียนทรัพยากร proxy (รวมถึง ใบรับรองและ certificate chain):

Terminal window
curl -s -X POST \
-H "Authorization: APIToken ${F5XC_API_TOKEN}" \
-H "Content-Type: application/json" \
"${F5XC_API_URL}/api/web/custom/namespaces/system/roles" \
-d '{
"metadata": {
"name": "example-cert-admin",
"namespace": "system"
},
"spec": {},
"api_groups": [
"ves-io-proxy-read",
"ves-io-proxy-write"
]
}'

ดึงข้อมูลบทบาทโดยใช้ endpoint GET แบบกำหนดเองเพื่อยืนยันว่า api_groups ถูกแนบแล้ว:

Terminal window
curl -s \
-H "Authorization: APIToken ${F5XC_API_TOKEN}" \
"${F5XC_API_URL}/api/web/custom/namespaces/system/roles/example-cert-admin" \
| jq '{name: .object.metadata.name, api_groups: .api_groups}'

ผลลัพธ์ที่คาดหวัง:

{
"name": "example-cert-admin",
"api_groups": [
"ves-io-proxy-read",
"ves-io-proxy-write"
]
}

หากต้องการเพิ่มหรือลบ api_groups จากบทบาทที่มีอยู่ ให้ใช้ endpoint PUT แบบกำหนดเอง:

Terminal window
curl -s -X PUT \
-H "Authorization: APIToken ${F5XC_API_TOKEN}" \
-H "Content-Type: application/json" \
"${F5XC_API_URL}/api/web/custom/namespaces/system/roles/example-cert-admin" \
-d '{
"name": "example-cert-admin",
"namespace": "system",
"spec": {},
"api_groups": [
"ves-io-proxy-read"
]
}'

ตัวอย่างนี้ลดระดับบทบาทให้เป็นสิทธิ์อ่านอย่างเดียวโดยการลบ ves-io-proxy-write

การลบใช้ endpoint บทบาทมาตรฐาน:

Terminal window
curl -s -X DELETE \
-H "Authorization: APIToken ${F5XC_API_TOKEN}" \
"${F5XC_API_URL}/api/web/namespaces/system/roles/example-cert-admin"

บทบาททั้งหมดอยู่ใน namespace system

เมธอดพาธคำอธิบาย
POST/api/web/custom/namespaces/system/rolesสร้างบทบาทแบบกำหนดเอง
GET/api/web/custom/namespaces/system/rolesแสดงรายการบทบาทแบบกำหนดเอง
GET/api/web/custom/namespaces/system/roles/{name}ดูบทบาทแบบกำหนดเอง
PUT/api/web/custom/namespaces/system/roles/{name}แทนที่บทบาทแบบกำหนดเอง
เมธอดพาธคำอธิบาย
DELETE/api/web/namespaces/system/roles/{name}ลบบทบาท
GET/api/web/namespaces/system/roles/{name}ดูบทบาท
GET/api/web/namespaces/system/rolesแสดงรายการบทบาท

การค้นหาใช้ namespace shared

เมธอดพาธคำอธิบาย
GET/api/web/namespaces/shared/api_groupsแสดงรายการ api_groups ทั้งหมด
GET/api/web/namespaces/shared/api_group_elementsแสดงรายการ api_group_elements ทั้งหมด

Endpoint ของใบรับรอง (สิ่งที่บทบาทให้สิทธิ์เข้าถึง)

หัวข้อที่มีชื่อว่า “Endpoint ของใบรับรอง (สิ่งที่บทบาทให้สิทธิ์เข้าถึง)”

แทนที่ {namespace} ด้วย namespace ที่ใบรับรองของคุณถูกจัดการ

เมธอดพาธคำอธิบาย
POST/api/config/namespaces/{namespace}/certificatesสร้างใบรับรอง
GET/api/config/namespaces/{namespace}/certificatesแสดงรายการใบรับรอง
GET/api/config/namespaces/{namespace}/certificates/{name}ดูใบรับรอง
PUT/api/config/namespaces/{namespace}/certificates/{name}แทนที่ใบรับรอง
DELETE/api/config/namespaces/{namespace}/certificates/{name}ลบใบรับรอง
POST/api/config/namespaces/{namespace}/certificate_chainsสร้าง certificate chain
GET/api/config/namespaces/{namespace}/certificate_chainsแสดงรายการ certificate chain
GET/api/config/namespaces/{namespace}/certificate_chains/{name}ดู certificate chain
PUT/api/config/namespaces/{namespace}/certificate_chains/{name}แทนที่ certificate chain
DELETE/api/config/namespaces/{namespace}/certificate_chains/{name}ลบ certificate chain

ทำไม api_group และ api_group_element จึงเป็นแบบอ่านอย่างเดียว

หัวข้อที่มีชื่อว่า “ทำไม api_group และ api_group_element จึงเป็นแบบอ่านอย่างเดียว”

อ็อบเจกต์เหล่านี้กำหนดโดยระบบของ F5 XC แพลตฟอร์มสร้าง รายการ api_group_element ล่วงหน้าสำหรับทุกพาธ API และจัดกลุ่มเป็น อ็อบเจกต์ api_group ที่จัดระเบียบตามพื้นที่ฟังก์ชัน

คุณไม่จำเป็นต้องสร้างสิ่งเหล่านี้ — มันมีอยู่แล้วสำหรับทุกทรัพยากรใน ระบบ งานของคุณคือค้นหาชื่อกลุ่มที่เกี่ยวข้อง (ขั้นตอนที่ 1) และ อ้างอิงในบทบาทแบบกำหนดเองของคุณ (ขั้นตอนที่ 2)

หากต้องการดูว่า api_group ครอบคลุมพาธ API แต่ละรายการใดบ้าง ให้แสดงรายการ endpoint api_group_elements และค้นหา element ที่เกี่ยวข้องกับทรัพยากรของคุณ:

Terminal window
curl -s \
-H "Authorization: APIToken ${F5XC_API_TOKEN}" \
"${F5XC_API_URL}/api/web/namespaces/shared/api_group_elements" \
| jq '[.items[] | select(.name | test("ves-io-schema-certificate")) | .name]'