دور مسؤول الشهادات - واجهة برمجة التطبيقات
يرشدك هذا الدليل خلال إنشاء دور RBAC مخصص في F5 Distributed Cloud يمنح صلاحية إدارة شهادات SSL/TLS وسلاسل الشهادات المستخدمة بواسطة موازنات تحميل HTTP. للحصول على نهج قائم على واجهة المستخدم، راجع دليل وحدة التحكم المبسّط.
كيف يعمل نظام RBAC في F5 XC
Section titled “كيف يعمل نظام RBAC في F5 XC”يستخدم F5 XC نموذج صلاحيات من ثلاث طبقات:
api_group_element (للقراءة فقط، محدد من النظام) │ ▼ api_group (للقراءة فقط، محدد من النظام) │ ▼ role (CRUD كامل — هذا ما تقوم بإنشائه)-
api_group_element— يحدد مسار تعبير نمطي وطرق HTTP (مثلPOST /api/config/.*/certificates). مُدار من النظام؛ لا يمكنك إنشاؤه أو تعديله أو حذفه. -
api_group— مجموعة مسماة من مراجعapi_group_element، منظمة حسب المجال الوظيفي. مُدار من النظام؛ لا يمكنك إنشاؤه أو تعديله أو حذفه. تستخدم المجموعات اصطلاحات تسمية مثلves-io-proxy-readأوf5xc-waap-standard-admin. -
role— يشير إلى أسماءapi_groupفي مصفوفة. هذه هي الطبقة الوحيدة التي تقوم بإنشائها. استخدم نقاط نهاية الأدوار المخصصة لربطapi_groupsمحددة بدور.
تُجمَّع عمليات الشهادات لموازنات تحميل HTTP في مجموعات
ves-io-proxy-* api_groups إلى جانب موارد البروكسي الأخرى (موازنات تحميل HTTP،
المسارات، الأصول، إلخ). لا توجد مجموعات api_groups مخصصة للشهادات فقط — تنظم
المنصة الصلاحيات حسب المجال الوظيفي، وليس حسب نوع المورد الفردي.
النطاق والقيود
Section titled “النطاق والقيود”تمنح مجموعات 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 الأوسع.
المتطلبات الأساسية
Section titled “المتطلبات الأساسية”- رمز API لـ F5 XC بصلاحيات المسؤول
- تثبيت
curlوjq
عيّن متغيرات البيئة الخاصة بك:
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 المحددة من النظام وقم بتصفية
المدخلات المتعلقة بالبروكسي (التي تتضمن صلاحيات الشهادات):
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.
أنشئ الدور المخصص بصلاحيات القراءة والكتابة لموارد البروكسي (بما في ذلك الشهادات وسلاسل الشهادات):
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:
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
المخصصة:
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: حذف الدور (اختياري)”يستخدم الحذف نقطة نهاية الدور القياسية:
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 وابحث عن العناصر المتعلقة بموردك:
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]'