تخطَّ إلى المحتوى

دور مسؤول الشهادات - واجهة برمجة التطبيقات

يرشدك هذا الدليل خلال إنشاء دور RBAC مخصص في F5 Distributed Cloud يمنح صلاحية إدارة شهادات SSL/TLS وسلاسل الشهادات المستخدمة بواسطة موازنات تحميل HTTP. للحصول على نهج قائم على واجهة المستخدم، راجع دليل وحدة التحكم المبسّط.

يستخدم F5 XC نموذج صلاحيات من ثلاث طبقات:

api_group_element (للقراءة فقط، محدد من النظام)
api_group (للقراءة فقط، محدد من النظام)
role (CRUD كامل — هذا ما تقوم بإنشائه)
  1. api_group_element — يحدد مسار تعبير نمطي وطرق HTTP (مثل POST /api/config/.*/certificates). مُدار من النظام؛ لا يمكنك إنشاؤه أو تعديله أو حذفه.

  2. api_group — مجموعة مسماة من مراجع api_group_element، منظمة حسب المجال الوظيفي. مُدار من النظام؛ لا يمكنك إنشاؤه أو تعديله أو حذفه. تستخدم المجموعات اصطلاحات تسمية مثل ves-io-proxy-read أو f5xc-waap-standard-admin.

  3. role — يشير إلى أسماء api_group في مصفوفة. هذه هي الطبقة الوحيدة التي تقوم بإنشائها. استخدم نقاط نهاية الأدوار المخصصة لربط api_groups محددة بدور.

تُجمَّع عمليات الشهادات لموازنات تحميل HTTP في مجموعات ves-io-proxy-* api_groups إلى جانب موارد البروكسي الأخرى (موازنات تحميل HTTP، المسارات، الأصول، إلخ). لا توجد مجموعات api_groups مخصصة للشهادات فقط — تنظم المنصة الصلاحيات حسب المجال الوظيفي، وليس حسب نوع المورد الفردي.

تمنح مجموعات ves-io-proxy-read و ves-io-proxy-write api_groups الوصول إلى جميع الموارد المتعلقة بالبروكسي، وليس الشهادات فقط. يمكن للمستخدم المعيّن لهذا الدور أيضًا إدارة موازنات تحميل HTTP والأصول والمسارات وكائنات نطاق البروكسي الأخرى.

لا يمكن تطبيق RBAC خاص بالشهادات فقط على F5 XC. كل من api_group و api_group_element هي كائنات محددة من النظام وللقراءة فقط — تكشف واجهة برمجة التطبيقات عن نقاط نهاية GET فقط لهذه الكائنات. يمكن للأدوار فقط الإشارة إلى أسماء api_group الموجودة، ولا توجد api_group مخصصة حصريًا للشهادات.

التخفيف — عزل مساحة الأسماء: أنشئ مساحة أسماء مخصصة لموارد الشهادات وعيّن دور example-cert-admin بنطاق محدود لتلك المساحة فقط. يحتفظ المستخدم بصلاحيات مستوى البروكسي لكنه لا يستطيع الوصول إلى الموارد في مساحات الأسماء الأخرى، مما يحد من نطاق التأثير لصلاحيات مجموعة api_group الأوسع.

  • رمز API لـ F5 XC بصلاحيات المسؤول
  • تثبيت 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"

الخطوة 1: اكتشاف مجموعات API الخاصة بالبروكسي

Section titled “الخطوة 1: اكتشاف مجموعات API الخاصة بالبروكسي”

اعرض جميع كائنات api_group المحددة من النظام وقم بتصفية المدخلات المتعلقة بالبروكسي (التي تتضمن صلاحيات الشهادات):

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ما تمنحه
ves-io-proxy-readصلاحية القراءة لموارد البروكسي بما في ذلك الشهادات
ves-io-proxy-writeصلاحية الكتابة لموارد البروكسي بما في ذلك الشهادات

الخطوة 2: إنشاء الدور المخصص

Section titled “الخطوة 2: إنشاء الدور المخصص”

استخدم نقطة نهاية إنشاء الدور المخصص. تشير مصفوفة api_groups إلى أسماء api_group المحددة من النظام التي تم اكتشافها في الخطوة 1.

أنشئ الدور المخصص بصلاحيات القراءة والكتابة لموارد البروكسي (بما في ذلك الشهادات وسلاسل الشهادات):

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"
]
}'

الخطوة 3: التحقق من الدور

Section titled “الخطوة 3: التحقق من الدور”

استرجع الدور باستخدام نقطة نهاية 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"
]
}

الخطوة 4: تحديث الدور (اختياري)

Section titled “الخطوة 4: تحديث الدور (اختياري)”

لإضافة أو إزالة api_groups من دور موجود، استخدم نقطة نهاية 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.

الخطوة 5: حذف الدور (اختياري)

Section titled “الخطوة 5: حذف الدور (اختياري)”

يستخدم الحذف نقطة نهاية الدور القياسية:

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

مرجع واجهة برمجة التطبيقات

Section titled “مرجع واجهة برمجة التطبيقات”

نقاط نهاية الأدوار (مخصصة — تتضمن api_groups)

Section titled “نقاط نهاية الأدوار (مخصصة — تتضمن api_groups)”

الأدوار دائمًا في مساحة الأسماء 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}استبدال دور مخصص

نقاط نهاية الأدوار (قياسية)

Section titled “نقاط نهاية الأدوار (قياسية)”
الطريقةالمسارالوصف
DELETE/api/web/namespaces/system/roles/{name}حذف دور
GET/api/web/namespaces/system/roles/{name}الحصول على دور
GET/api/web/namespaces/system/rolesعرض الأدوار

نقاط نهاية الاكتشاف (للقراءة فقط)

Section titled “نقاط نهاية الاكتشاف (للقراءة فقط)”

يستخدم الاكتشاف مساحة الأسماء shared.

الطريقةالمسارالوصف
GET/api/web/namespaces/shared/api_groupsعرض جميع api_groups
GET/api/web/namespaces/shared/api_group_elementsعرض جميع api_group_elements

نقاط نهاية الشهادات (ما يمنح الدور الوصول إليه)

Section titled “نقاط نهاية الشهادات (ما يمنح الدور الوصول إليه)”

استبدل {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إنشاء سلسلة شهادات
GET/api/config/namespaces/{namespace}/certificate_chainsعرض سلاسل الشهادات
GET/api/config/namespaces/{namespace}/certificate_chains/{name}الحصول على سلسلة شهادات
PUT/api/config/namespaces/{namespace}/certificate_chains/{name}استبدال سلسلة شهادات
DELETE/api/config/namespaces/{namespace}/certificate_chains/{name}حذف سلسلة شهادات

لماذا api_group و api_group_element للقراءة فقط

Section titled “لماذا api_group و api_group_element للقراءة فقط”

هذه الكائنات محددة من النظام بواسطة F5 XC. تقوم المنصة بإنشاء مدخلات api_group_element مسبقًا لكل مسار API وتجمعها في كائنات api_group منظمة حسب المجال الوظيفي.

لا تحتاج إلى إنشاء هذه الكائنات — فهي موجودة بالفعل لكل مورد في النظام. مهمتك هي اكتشاف أسماء المجموعات ذات الصلة (الخطوة 1) والإشارة إليها في دورك المخصص (الخطوة 2).

لمعرفة مسارات API الفردية التي تغطيها مجموعة api_group، اعرض نقطة نهاية api_group_elements وابحث عن العناصر المتعلقة بموردك:

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]'