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

Azure Workload Identity Federation

يُكوِّن هذا الدليل Azure Key Vault كمزود أسرار باستخدام Microsoft Entra Workload Identity Federation: تُصدر CrewAI Platform رموز OIDC قصيرة الأمد، وتُبادلها للحصول على رمز وصول Entra عبر منصة هوية Microsoft، وتقرأ أسرارك — دون تخزين أي سر عميل في أي مكان.

  1. يطلب عامل النشر JWT OIDC طازج من CrewAI Platform.
  2. يُقدّم العامل الـ JWT إلى Microsoft Entra على https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token كـ client_assertion (urn:ietf:params:oauth:client-assertion-type:jwt-bearer)، مع الإشارة إلى App Registration الذي يطابق Federated Identity Credential الخاص به مُصدر الـ JWT وموضوعه.
  3. تتحقق Entra من الـ JWT مقابل وثيقة اكتشاف OIDC و JWKS لمنصتك، ثم تُعيد رمز وصول قصير الأمد محصور بـ https://vault.azure.net/.default.
  4. يستدعي العامل Azure Key Vault لقراءة السر.
  5. تُحقن القيمة المجلوبة كقيمة لمتغير البيئة لإطلاق الأتمتة ذاك.

تُخزَّن رموز موضوع OIDC مؤقتاً لنحو ساعة لتفادي إعادة الإصدار في كل إطلاق. تُجلب قيم الأسرار طازجة في كل إطلاق بغض النظر عن حالة ذاكرة OIDC المؤقتة، وهذا ما يجعل هذا المسار مراعياً للتدوير.

الخطوة 1 — العثور على عنوان مُصدر OIDC لـ CrewAI Platform

Section titled “الخطوة 1 — العثور على عنوان مُصدر OIDC لـ CrewAI Platform”

ينشر تنصيب CrewAI Platform وثيقة اكتشاف OpenID Connect على https://<your-platform-host>/.well-known/openid-configuration. الحقل issuer هناك هو الرابط الذي ستُسجِّله Microsoft Entra كمُصدر اتحاد موثوق.

افتح الرابط في المتصفح:

https://<your-platform-host>/.well-known/openid-configuration

ينبغي أن ترى JSON يحتوي على:

{
"issuer": "https://<your-platform-host>",
"jwks_uri": "https://<your-platform-host>/oauth2/jwks",
...
}

سجّل القيمة الدقيقة لـ issuer — ستستخدمها في الخطوة 3.

الخطوة 2 — إنشاء App Registration

Section titled “الخطوة 2 — إنشاء App Registration”

في بوابة Microsoft Entra، انتقل إلى App registrations وانقر على New registration.

  • Name: crewai-secrets-reader
  • Supported account types: Accounts in this organizational directory only (Single tenant).
  • اترك Redirect URI فارغاً.

انقر على Register. سجّل Application (client) ID و Directory (tenant) ID في لوحة نظرة عامة التطبيق — ستستخدمها في الخطوة 6.

الخطوة 3 — إضافة Federated Identity Credential

Section titled “الخطوة 3 — إضافة Federated Identity Credential”

يُخبر Federated Identity Credential Microsoft Entra: ثِق برموز JWT المُصدَرة من هذا المُصدر، بهذا الموضوع، عندما تُقدَّم كتأكيد عميل لهذا App Registration.

في App Registration، انتقل إلى Certificates & secretsFederated credentialsAdd credential.

  • Federated credential scenario: Other issuer.
  • Issuer: رابط مُصدر CrewAI Platform من الخطوة 1، مثلاً https://<your-platform-host>.
  • Subject identifier: organization:<YOUR_CREWAI_ORG_UUID> — قيمة ادّعاء sub في JWT بالضبط. اعثر على UUID مؤسستك في إعدادات مؤسسة CrewAI Platform. يقصر هذا الاتحاد على مؤسسة CrewAI محددة — تُقبل فقط الرموز المُصدَرة لأتمتات تلك المؤسسة.
  • Name: أي تسمية وصفية، مثلاً crewai-org-prod.
  • Audience: api://AzureADTokenExchange. هذا هو الجمهور الثابت الذي تتطلبه Microsoft Entra للبيانات الموحَّدة، وهو ما تُعيّنه CrewAI Platform في ادّعاء aud في JWT.

انقر على Add.

للتفاصيل الكاملة، راجع وثائق Microsoft: Configure a federated identity credential on an app.

الخطوة 4 — منح App Registration وصولاً إلى Key Vault

Section titled “الخطوة 4 — منح App Registration وصولاً إلى Key Vault”

امنح App Registration دور Key Vault Secrets User على الخزنة المستهدفة — نفس الدور الذي تستخدمه لمسار بيانات الاعتماد الثابتة. استخدم إما على مستوى الخزنة (أبسط) أو لكل سر (أقل الامتيازات).

على مستوى الخزنة (أبسط)
Terminal window
az role assignment create \
--assignee <APPLICATION_CLIENT_ID> \
--role "Key Vault Secrets User" \
--scope $(az keyvault show --name <VAULT_NAME> --query id -o tsv)

يمنح النطاق على مستوى الخزنة إذن secrets/list الذي يعتمد عليه الاقتراح التلقائي لاسم السر في نموذج متغير البيئة لـ CrewAI Platform. اختر هذه التبويبة إذا أردت أن يعمل الاقتراح التلقائي.

لكل سر (أقل الامتيازات)
Terminal window
az role assignment create \
--assignee <APPLICATION_CLIENT_ID> \
--role "Key Vault Secrets User" \
--scope $(az keyvault secret show --vault-name <VAULT_NAME> --name <SECRET_NAME> --query id -o tsv)

تُعطّل الارتباطات لكل سر الاقتراح التلقائي لاسم السر في نموذج متغير البيئة لـ CrewAI Platform (يتطلب الاقتراح التلقائي secrets/list، وهو محصور بنطاق الخزنة فقط). اكتب اسم السر الكامل بدلاً من ذلك.

البوابة (UI)

لتعيين على مستوى الخزنة:

  1. افتح Key Vault الخاص بك في بوابة Azure.
  2. انقر على Access control (IAM)AddAdd role assignment.
  3. اختر الدور Key Vault Secrets UserNext.
  4. انقر على Select members، ابحث عن App Registration crewai-secrets-reader، انقر على Select.
  5. انقر على Review + assign.

لتعيين لكل سر، استخدم نفس التدفق لكن ابدأ من ObjectsSecrets ← اختر السر ← لوحة Access control (IAM) الخاصة به. تُعطّل الارتباطات لكل سر الاقتراح التلقائي (راجع تبويبة لكل سر أعلاه).

الخطوة 5 — إنشاء سر واحد على الأقل في Key Vault

Section titled “الخطوة 5 — إنشاء سر واحد على الأقل في Key Vault”

إذا لم يكن لديك سر للاختبار، أنشئ واحداً عبر Azure CLI:

Terminal window
az keyvault secret set \
--vault-name <VAULT_NAME> \
--name openai-api-key \
--value "sk-your-actual-key"

أو عبر بوابة Azure:

  1. افتح Key Vault الخاص بك وانتقل إلى ObjectsSecrets.
  2. انقر على Generate/Import.
  3. Upload options: Manual. Name: اسم السر (مثلاً openai-api-key). Secret value: الصق القيمة.
  4. انقر على Create.

الخطوة 6 — إضافة تكوين Workload Identity في CrewAI Platform

Section titled “الخطوة 6 — إضافة تكوين Workload Identity في CrewAI Platform”

في CrewAI Platform، انتقل إلى SettingsWorkload Identity وانقر على Add Workload Identity Config.

املأ النموذج:

  • Name: اسم وصفي، مثلاً azure-prod.
  • Cloud Provider: Azure.
  • Tenant ID: Directory (tenant) ID الخاص بـ Microsoft Entra من الخطوة 2.
  • Client ID: Application (client) ID الخاص بـ App Registration من الخطوة 2.
  • (اختياري) حدّد Set as default for Azure إذا كنت ترغب في أن يكون هذا هو تكوين WI الافتراضي المُحدَّد عند إنشاء بيانات اعتماد سر مدعومة بـ Azure.

Audience ثابت على api://AzureADTokenExchange — تتطلب Microsoft Entra هذا الجمهور بالضبط للبيانات الموحَّدة، لذا لا يظهر حقل Audience في النموذج.

انقر على Create.

الخطوة 7 — إضافة بيانات اعتماد مزود أسرار مرتبطة بتكوين WI

Section titled “الخطوة 7 — إضافة بيانات اعتماد مزود أسرار مرتبطة بتكوين WI”

انتقل إلى SettingsSecret Provider Credentials وانقر على Add Credential.

املأ النموذج:

  • Name: اسم وصفي، مثلاً azure-prod-wi.
  • Provider: Azure Key Vault.
  • Authentication Method: Workload Identity.
  • Workload Identity Configuration: اختر التكوين الذي أنشأته في الخطوة 6.
  • Key Vault URL: اسم مضيف DNS للخزنة، مثلاً https://my-vault.vault.azure.net.
  • (اختياري) حدّد Set as default credential for this provider.

سيطلب النموذج فقط Key Vault URL ضمن Workload Identity — حقول بيانات الاعتماد الثابتة (Tenant ID و Client ID و Client Secret) مخفية عمداً لأنها لا تنطبق على هذا المسار؛ يأتي المستأجر والعميل من تكوين WI المرتبط.

انقر على Create.

الخطوة 8 — اختبار الاتصال

Section titled “الخطوة 8 — اختبار الاتصال”

بعد حفظ بيانات الاعتماد، انقر على Test Connection. لبيانات اعتماد workload-identity، يتحقق هذا من مصافحة OIDC: تُصدر CrewAI Platform JWT، وتُقدّمه إلى Microsoft Entra كـ client_assertion موحَّد، وتؤكد أن Entra تُعيد رمز وصول محصور بالخزنة. نتيجة خضراء تعني أن ارتباط الاتحاد سليم.

نجاح Test Connection يُثبت أن مُصدر Federated Identity Credential وموضوعه وجمهوره كلها متطابقة، وأن App Registration قابل للوصول. لا يُثبت ذلك أن RBAC لكل سر في Key Vault صحيح — يُمارَس getSecret على سر محدد بشكل منفصل عندما يُحَلّ متغير بيئة عند الإطلاق. راجع استكشاف الأخطاء لأنماط فشل المصافحة.

الخطوة 9 — الإشارة إلى السر في متغير بيئة

Section titled “الخطوة 9 — الإشارة إلى السر في متغير بيئة”

أَشِر إلى السر على أتمتة، تماماً كما تفعل مع أي متغير بيئة مدعوم بمدير أسرار. راجع استخدام مدير الأسرار لحقول النموذج والسلوك.

الخطوة 10 — التحقق من التدوير

Section titled “الخطوة 10 — التحقق من التدوير”

بعد تشغيل عملية النشر، دوّر السر في Key Vault:

Terminal window
az keyvault secret set \
--vault-name <VAULT_NAME> \
--name openai-api-key \
--value "rotated value"

أطلق إطلاق أتمتة جديداً. ستكون بيئة الإطلاق ترى "rotated value" — بدون إعادة نشر ولا إعادة تشغيل عامل ولا انتظار TTL.

للتأكد في سجلات العامل، ابحث عن:

Workload identity config '<id>' (azure): N secret(s) resolved

يظهر هذا السطر لكل إطلاق ويُشير إلى استدعاء getSecret طازج مقابل Azure Key Vault.

للتحقق من البداية إلى النهاية باستخدام البصمة، راجع التحقق من التدوير من البداية إلى النهاية.

العَرَضالسبب المحتمل
يفشل Test Connection بخطأ مصافحةرفضت Microsoft Entra client_assertion الموحَّد. تحقق من أن Issuer في Federated Identity Credential يطابق قيمة issuer للمنصة بالضبط، وأن Subject هو organization:<your-org-uuid> (يطابق ادّعاء sub في JWT)، وأن Audience هو api://AzureADTokenExchange، وأن رابط اكتشاف OIDC للمنصة قابل للوصول من Entra عبر الإنترنت العام.
AADSTS70021: No matching federated identity record found for presented assertionلا يتطابق Issuer + Subject + Audience في Federated Identity Credential مع الـ JWT بالضبط. تحقق من الخطوة 3 من جديد: يجب أن يكون الموضوع organization:<your-org-uuid> (يطابق ادّعاء sub في JWT)، ويجب أن يكون الجمهور api://AzureADTokenExchange.
AADSTS700024: Client assertion is not within its valid time rangeساعة مضيف CrewAI Platform منحرفة بشكل كبير عن الوقت الحقيقي. تحقق من NTP على المضيف.
AADSTS50013: Assertion failed signature validationلم تستطع Microsoft Entra التحقق من توقيع الـ JWT. تأكد من أن https://<your-platform-host>/oauth2/jwks قابل للوصول من الإنترنت العام ويُقدّم JWKS صالحاً.
يُظهر الاقتراح التلقائي لاسم السر Forbidden — does not have permission to perform action 'Microsoft.KeyVault/vaults/secrets/.../list'دور Key Vault Secrets User الخاص بـ App Registration محصور بسر واحد. امنح الدور على نطاق الخزنة ليُسمح بإجراء list في مستوى البيانات. راجع الخطوة 4.
يفشل الإطلاق في حلّ سر رغم نجاح Test Connectionارتباط WI سليم، لكن RBAC لكل سر في Key Vault مفقود على السر الفاشل. راجع Key Vault Secrets User على ذلك السر تحديداً (أو وسّع تعيين الدور إلى نطاق الخزنة).
Forbidden — request was not authorized (الخزنة تستخدم سياسات الوصول القديمة)لم يتم تحويل الخزنة إلى Azure RBAC. ضمن Access configuration للخزنة، عيّن نموذج الإذن إلى Azure role-based access control وأعد منح الدور من الخطوة 4.
azure_vault_url is required for Azure secret resolution (سجلات العامل)تفتقد بيانات اعتماد مزود الأسرار إلى Key Vault URL. تحقق من الخطوة 7 من جديد.
لا تُلتقط القيمة المُدوَّرة في الإطلاق التاليتأكد من أن متغير البيئة على الأتمتة يشير إلى بيانات اعتماد مدعومة بـ Workload Identity (وليس بيانات اعتماد بمفاتيح ثابتة). يدمج المسار الثابت القيم في صورة النشر.

تُربط العناصر النائبة أعلاه بـ:

  • 01-register-app.png — نموذج “Register an application” في بوابة Azure مع crewai-secrets-reader.
  • 02-add-federated-credential.png — App Registration ← Certificates & secrets ← Federated credentials ← Add credential، مع Other issuer، رابط مُصدر المنصة، الموضوع organization:<uuid>، الجمهور api://AzureADTokenExchange.
  • 03-grant-vault-rbac.png — Key Vault ← Access control (IAM) ← Add role assignment، مع Key Vault Secrets User و App Registration المختار.
  • 04-per-secret-rbac.png — نفس النموذج لكن في نطاق IAM سر واحد (مسار أقل الامتيازات البديل).
  • 05-amp-add-wi-config-azure.png — نموذج “Add Workload Identity Config” في CrewAI Platform مع Cloud Provider = Azure و Tenant ID و Client ID مأهولين.
  • 06-amp-wi-list-with-azure.png — صفحة قائمة Workload Identity بعد الإنشاء، تُظهر صفوفاً لـ AWS و GCP وتكوين Azure الجديد.
  • 07-amp-add-credential-azure-wi.png — نموذج “Add Secret Provider Credential” مع Provider = Azure Key Vault، Auth = Workload Identity، تكوين WI المختار، و Key Vault URL مأهول.