إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
مفاتيح الوصول إلى الوظائف هي رموز مصادقة تستخدمها وقت تشغيل الدوال لتأمين نقاط النهاية التي تفعل بواسطة HTTP. عندما يستدعي المتصل دالة HTTP، فإنه يتضمن مفتاحا كمعامل ?code= استعلام أو x-functions-key رأس رئيس. يقوم وقت التشغيل بالتحقق من صحة المفتاح ويفوض أو يرفض الطلب.
مفاتيح الوصول ليست مثل الأسرار على مستوى التطبيق. مفاتيح الوصول تحمي من يمكنه استدعاء وظائفك، بينما تحفظ أسرار التطبيق ما تتصل به وظائفك.
متى تستخدم مفاتيح الوصول
| Scenario | لماذا تتناسب مفاتيح الوصول |
|---|---|
| خطافات الويب الخاصة من طرف ثالث | مزودون مثل GitHub وStripe أو Twilio يستدعون وظيفتك عبر رابط URL وسر. مفاتيح الوصول تدخل مباشرة في النمط الذي ?code= يتوقعونه. |
| مكالمات خدمة إلى خدمة | خدمة الخلفية A تستدعي الوظيفة B عبر HTTP. المفتاح المشترك أبسط من إعداد تسجيلات تطبيقات Microsoft Entra للمكالمات الداخلية فقط. |
| اشتراكات شبكة الفعاليات | تقوم شبكة الأحداث بالتحقق من صحة واستدعاء نقطة نهاية الوظيفة الخاصة بك باستخدام مفتاح نظام تديره المنصة تلقائيا. |
| المطور/المصادقة التجريبية | أثناء التطوير تحتاج إلى مصادقة أساسية دون تكوين OAuth/OIDC بالكامل. توفر مفاتيح الوصول بوابة مصادقة منخفضة الاحتكاك بدون إعدادات هوية. |
| توافق الترحيل | تطبيقات دالات Azure الحالية تستخدم بالفعل مفاتيح الوصول. عند الانتقال إلى تطبيقات الحاويات، تحتاج إلى نفس المصادقة المعتمدة على المفاتيح لتجنب تعطيل المتصلين. |
ملحوظة
بالنسبة لواجهات برمجة التطبيقات التي تواجه المستخدم، أو أحمال عمل الثقة الصفرية، أو سيناريوهات التفويض لكل مستخدم، استخدم Microsoft Entra ID / OAuth 2.0 بدلا من مفاتيح الوصول. مفاتيح الوصول هي أسرار مشتركة بدون أثر تدقيق على مستوى الهوية.
Prerequisites
- حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
- Azure CLI الإصدار 2.40.0 أو أعلى.
- تطبيق دالات Azure موجود في تطبيقات الحاويات أو أذونات لإنشاء واحد.
أنواع مفاتيح الوصول
يدير وقت تشغيل الدوال أربعة أنواع من المفاتيح:
| نوع المفتاح | النطاق | الغرض |
|---|---|---|
المفتاح الرئيسي (_master) |
تطبيق الوظيفة بالكامل | الوصول على مستوى الإدارة إلى جميع الوظائف ونقاط /admin/* النهاية الإدارية. لا يمكن إلغاؤه، فقط يمكن التدوير. |
مفاتيح المضيف (default + مخصص) |
تطبيق الوظيفة بالكامل | تفوض المكالمات لأي وظيفة يتم تفعيلها عبر HTTP في التطبيق. |
مفاتيح الوظائف (default + مخصصة) |
وظيفة واحدة | تفويض المكالمات إلى وظيفة محددة واحدة. يوفر تحكما أكثر تفصيلا من مفاتيح المضيف. |
| مفاتيح النظام | نقاط الامتداد | تستخدم من قبل امتدادات المنصات مثل اشتراكات Event Grid webhook وDurable Functions. يتم التحكم تلقائيا. |
اختر خلفية تخزين
قم بتعيين AzureWebJobsSecretStorageType متغير البيئة للتحكم في مكان استمرار وقت التشغيل في مفاتيح الوصول. يدعم Azure Container Apps ثلاث خلفيات إنتاجية من الطراز الأول.
| الخلفية | إعداد القيمة | المفاتيح التي تولد تلقائيا | التبعية الخارجية | الأفضل ل |
|---|---|---|---|---|
| المخزن السري لتطبيقات الحاوية | containerapps |
لا - أنت توفر المفاتيح كأسرار تطبيقات الحاويات | بلا | معظم أعباء العمل (موصى بها) |
| Azure Key Vault | keyvault |
لا - إنشاء الزناد يدويا | نسخة Key Vault | الحوكمة المركزية، تدقيق الامتثال |
| مساحة تخزين Azure Blob | blob |
نعم | حساب التخزين | التطبيقات القديمة أو الحساب الحالي AzureWebJobsStorage |
ضع هذه الاعتبارات الخلفية في اعتبارك:
- وقت التشغيل لا يختار تلقائيا التخزين السري لتطبيقات الحاويات. إذا لم تقم بتعيينها
AzureWebJobsSecretStorageTypeأو ضبطها على قيمة غير معروفة، فإن مضيف الوظائف يستخدم مخزن البيانات الثنائية الكبيرة عندماAzureWebJobsStorageيكون متاحا. - احتفظ
AzureWebJobsStorageبالتكوين لفحص صحة التخزين والميزات المعتمدة على التخزين. - لا تضبط
AzureWebJobsSecretStorageTypeعلىfiles. نظام ملفات تطبيقات الحاويات مؤقت، لذا تفقد المفاتيح المخزنة في هذا القسم الخلفي عندما يتدرج التطبيق إلى الصفر، أو يعيد التشغيل، أو ينشر نسخة جديدة.
أنماط الأسماء السرية
تعتمد قاعدة التسمية للمفاتيح المخزنة على خلفية التخزين.
يستخدم المتجر السري لتطبيقات الحاويات نظاما مختلفا. يقرأ مضيف الدوال المفاتيح من الملفات المركبة على مستوى الصوت عند /run/secrets/functions-keys/. يستخدم كل ملف اسما منقطا (على سبيل المثال، host.master)، لكن الأسماء السرية في تطبيقات الحاويات تسمح فقط بالأحرف الأبجدية الصغيرة والشرطات. عند تركيب وحدة تخزين سرية، يجب عليك تحديد path الحقل بشكل صريح ليكون باسم الملف المنقط الذي يتوقعه مضيف الوظائف (على سبيل المثال، secretRef: host-master → path: host.master). المنصة لا تقوم بأي ترجمة تلقائية للأسماء.
| نوع المفتاح | اسم Container Apps السري (شرطات) | حامل path الصوت (نقاط) |
|---|---|---|
| المفتاح الرئيسي | host-master |
host.master |
| مفتاح المضيف الافتراضي | host-function-default |
host.function.default |
| مفتاح المضيف المخصص | host-function-<name> |
host.function.<name> |
| مفتاح الدالة الافتراضي لدالة معينة | functions-<functionname>-default |
functions.<functionName>.default |
| مفتاح الدوال المخصص لوظيفة معينة | functions-<functionname>-<keyname> |
functions.<functionName>.<keyName> |
| مفتاح النظام | host-systemkey-<extension> |
host.systemKey.<extension> |
Tip
عند استكشاف الأخطاء، ابحث عن هذه الأنماط في متجر الواجهة الخلفية للتحقق من أن المفاتيح مضبوطة بشكل صحيح.
تكوين المخزن السري لتطبيقات الحاويات
المخزن السري لتطبيقات الحاويات هو القسم الخلفي الموصى به. تبقى المفاتيح ضمن منصة تطبيقات الحاويات ولا تتطلب تخزينا خارجيا أو Key Vault. سجلات نشاط Azure Resource Manager تتبع التغييرات في الأسرار ومتغيرات البيئة.
مع هذا الخلفية، يقرأ مضيف الوظائف المفاتيح من الملفات المركبة على حجم التخزين عند /run/secrets/functions-keys/. المضيف لا يولد المفاتيح تلقائيا. يجب عليك إنشاء كل مفتاح كسر لتطبيقات الحاويات، وتقوم المنصة بتثبيته كملفات ليقرأها المضيف.
Important
المتجر السري لتطبيقات الحاويات هو للقراءة فقط من منظور المضيف. المضيف يقرأ ملفات المفاتيح المثبتة لكنه لا يكتب إليها أبدا. إذا كان المفتاح المطلوب مفقودا، لا يقوم المضيف بتوليده تلقائيا.
الخطوة 1: حدد نوع التخزين
- بوابة
- واجهة سطر الأوامر Azure (Azure CLI)
اذهب إلى تطبيق حاوية الوظائف الخاص بك في بوابة Azure.
في الإعدادات، اختر متغيرات البيئة.
اختر الإضافة، وأدخل القيم التالية:
الخاصية القيمة Name AzureWebJobsSecretStorageTypeقيمه containerappsاختر حفظ، ثم اختر تطبيق لتأكيد التغييرات.
الخطوة 2: توليد وتخزين أسرار مفاتيح الوصول
قم بتوليد قيم رئيسية وتخزينها كأسرار لتطبيقات الحاويات. على الأقل، تحتاج إلى المفتاح الرئيسيومفتاح المضيف الافتراضي.
- بوابة
- واجهة سطر الأوامر Azure (Azure CLI)
في تطبيق حاوية الوظائف الخاص بك، تحت الإعدادات، اختر الأسرار.
اختر الإضافة وأدخل القيم التالية:
الخاصية القيمة Name host-masterالنوع سر تطبيقات الحاويات قيمه قيمة مفتاح مولدة عشوائيا. حدد إضافة.
كرر ل
host-function-defaultمع قيمة أخرى مولدة عشوائيا.لإضافة مفتاح لكل دالة، أضف سريا يسمى
functions-<functionname>-default(كلها بحروف صغيرة).
ملحوظة
تسمح أسماء السرية في تطبيقات الحاويات فقط بالأحرف الأبجدية الصغيرة والشرطات. يجب أن تضبط path الحقل في تكوين الحجم بشكل صريح على اسم الملف المنقط الذي يتوقعه مضيف الوظائف (على سبيل المثال، secretRef: host-master → path: host.master). بدون وجود pathصريح ، يحتفظ الملف على القرص بالاسم المتقطع ولن يجد مضيف الوظائف المفتاح.
الخطوة 3: قم بضبط حامل الصوت
قم بجمع الأسرار كملفات عند /run/secrets/functions-keys/.
- بوابة
- واجهة سطر الأوامر Azure (Azure CLI)
في تطبيق حاوية الوظائف الخاص بك، تحت قسم التطبيق، اختر المراجعات والنسخ المقلدة.
حدد إنشاء مراجعة جديدة.
في تبويب المقياس والأحجام ، تحت المقاس، اختر الإضافة.
أدخل القيم التالية:
الخاصية القيمة نوع المجلد سري Name functions-keysلكل سر، قم بتعيين حقل المسار إلى اسم الملف المنقط الذي يتوقعه مضيف الوظائف (على سبيل المثال، تعيين
host-masterإلى مسارhost.master، وhost-function-defaultإلى مسارhost.function.default).حدد إضافة.
في تبويب الحاوية ، اختر الحاوية ثم اختر تعديل.
اختر تبويب تركيب الصوت واختر الإضافة.
أدخل القيم التالية:
الخاصية القيمة اسم وحدة التخزين functions-keysمسار التحميل /run/secrets/functions-keysاختر حفظ، ثم اختر إنشاء لنشر النسخة الجديدة.
الخطوة 4: التحقق
بعد إعادة تشغيل التطبيق، تأكد من أن الأزرار تعمل:
az containerapp function keys list \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--key-type hostKey
يمكنك أيضا التحقق من سجلات التطبيقات للرسالة Resolved secret storage provider ContainerAppsSecretsRepositoryالتي تؤكد أن المضيف يستخدم المخزن السري لتطبيقات الحاويات.
تدوير المفاتيح
لتدوير مفتاح، قم بتحديث سر تطبيقات الحاويات وأعد تشغيل التطبيق:
NEW_KEY=$(openssl rand -hex 32)
az containerapp secret set \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--secrets "host-function-default=$NEW_KEY"
az containerapp revision restart \
--resource-group "<RESOURCE_GROUP>" \
--name "<FUNCTIONS_APP_NAME>" \
--revision "<REVISION_NAME>"
ملحوظة
جميع النسخ تشترك في نفس الأسرار المركبة. بعد إعادة التشغيل، تلتقط كل نسخة النسخة القيم الرئيسية المحدثة.
تكوين Key Vault أو مخزن البيانات الثنائية الكبيرة كمخزن
يخزن الجانب الخلفي من Key Vault مفاتيح الوصول كأسرار Key Vault، مما يوفر تدقيقا وتحكم في الوصول على مستوى المؤسسات.
أنشئ Key Vault (إذا لم يكن لديك واحد):
az keyvault create \ --name "<KEYVAULT_NAME>" \ --resource-group "<RESOURCE_GROUP>" \ --location "<LOCATION>"تفعيل الهوية المدارة في تطبيق الحاوية (إذا لم تكن مفعلة بالفعل):
az containerapp identity assign \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --system-assignedامنح دور ضابط الأسرار Key Vault للهوية المدارة. يحتاج وقت التشغيل إلى وصول للقراءة والكتابة لإنشاء وإدارة المفاتيح:
PRINCIPAL_ID=$(az containerapp show \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --query identity.principalId \ --output tsv) KEYVAULT_ID=$(az keyvault show \ --name "<KEYVAULT_NAME>" \ --query id \ --output tsv) az role assignment create \ --role "Key Vault Secrets Officer" \ --assignee "$PRINCIPAL_ID" \ --scope "$KEYVAULT_ID"حدد نوع التخزين ورابط رابط Key Vault:
للهوية المعينة من قبل النظام:
az containerapp update \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --set-env-vars \ "AzureWebJobsSecretStorageType=keyvault" \ "AzureWebJobsSecretStorageKeyVaultUri=https://<KEYVAULT_NAME>.vault.azure.net"بالنسبة للهوية المعينة من قبل المستخدم، قم أيضا بتعيين معرف العميل:
az containerapp update \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --set-env-vars \ "AzureWebJobsSecretStorageType=keyvault" \ "AzureWebJobsSecretStorageKeyVaultUri=https://<KEYVAULT_NAME>.vault.azure.net" \ "AzureWebJobsSecretStorageKeyVaultClientId=<USER_ASSIGNED_IDENTITY_CLIENT_ID>"قم بتفعيل إنشاء المفاتيح عن طريق سرد المفاتيح:
az containerapp function keys list \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-type hostKey
إدارة مفاتيح الوصول
بغض النظر عن الخلفية، استخدم الأوامر التالية لإدراج وإنشاء وحذف مفاتيح الوصول:
ملحوظة
احتفظ بعمل نسخة واحدة على الأقل لتنفيذ عمليات إدارة المفاتيح هذه.
سرد جميع مفاتيح المضيف:
az containerapp function keys list \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-type hostKeyاذكر المفتاح الرئيسي:
az containerapp function keys list \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-type masterKeyإنشاء أو استبدال مفتاح مضيف مخصص:
az containerapp function keys set \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-name "MyCustomKey" \ --key-value "<YOUR_KEY_VALUE>" \ --key-type hostKeyأظهر مفتاحا محددا:
az containerapp function keys show \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-name "<KEY_NAME>" \ --key-type hostKeyحذف مفتاح المضيف:
az containerapp function keys delete \ --resource-group "<RESOURCE_GROUP>" \ --name "<FUNCTIONS_APP_NAME>" \ --key-name "MyCustomKey" \ --key-type hostKey
استدعاء دالة باستخدام مفتاح وصول
مرر المفتاح كمعلمة استعلام أو رأس طلب.
# Query parameter
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>?code=<HOST_KEY>"
# Header
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>" \
-H "x-functions-key: <HOST_KEY>"