البرنامج التعليمي: إنشاء تطبيق وظائف يتصل بخدمات Azure باستخدام الهويات بدلاً من البيانات السرية
يوضح لك هذا البرنامج التعليمي كيفية تكوين تطبيق دالة باستخدام هويات Microsoft Entra بدلا من الأسرار أو سلسلة الاتصال، حيثما أمكن ذلك. يساعدك استخدام الهويات في تجنب تسريب الأسرار الحساسة عن طريق الخطأ ويمكن أن يوفر رؤية أفضل لكيفية الوصول إلى البيانات. لمعرفة المزيد حول الاتصالات المستندة إلى الهوية، راجع تكوين اتصال مستند إلى الهوية.
بينما تعمل الإجراءات الموضحة بشكل عام مع جميع اللغات، يدعم هذا البرنامج التعليمي حاليًا وظائف مكتبة فئة C# على نظام التشغيل Windows تحديدًا.
في هذا البرنامج التعليمي، تتعلم كيفية:
- أنشئ تطبيق وظائف في Azure باستخدام قالب ARM
- تمكين الهويات المُدارة المعينة بواسطة النظام والمعينة بواسطة المستخدم في تطبيق الوظائف
- إنشاء تعيينات الدور التي تمنح أذونات للموارد الأخرى
- نقل البيانات السرية التي لا يمكن استبدالها بالهويات إلى Azure Key Vault
- تكوين تطبيق للاتصال بالتخزين الافتراضي للمضيف باستخدام الهوية المُدارة
بعد إكمال هذا البرنامج التعليمي، يجب عليك إكمال البرنامج التعليمي للمتابعة الذي يوضح كيفية [استخدام الاتصالات المستندة إلى الهوية بدلا من البيانات السرية مع المشغلات والروابط].
المتطلبات الأساسية
حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
الإصدار 4.x من أدوات Azure Functions الأساسية.
لماذا نستخدم الهوية؟
تعد إدارة البيانات السرية وبيانات الاعتماد تحديًا مشتركًا للفرق من جميع الأحجام. يجب تأمين الأسرار ضد السرقة أو الكشف العرضي، وقد تحتاج إلى تدويرها بشكل دوري. تسمح لك العديد من خدمات Azure باستخدام هوية في معرف Microsoft Entra بدلا من ذلك لمصادقة العملاء والتحقق من الأذونات، والتي يمكن تعديلها وإبطالها بسرعة. يسمح القيام بذلك بمزيد من التحكم في أمان التطبيق مع نفقات تشغيلية أقل. قد تكون الهوية مستخدمًا بشريًا، مثل مطور تطبيق، أو تطبيق قيد التشغيل في Azure بهوية مُدارة.
نظرا لأن بعض الخدمات لا تدعم مصادقة Microsoft Entra، فقد لا تزال تطبيقاتك تتطلب أسرارا في حالات معينة. ومع ذلك، يمكن تخزين هذه الأسرار في Azure Key Vault، مما يساعد على تبسيط دورة حياة الإدارة للأسرار الخاصة بك. كما يتم التحكم في الوصول إلى المخزن الرئيسي مع الهويات.
من خلال فهم كيفية استخدام الهويات بدلا من الأسرار عندما يمكنك ذلك، واستخدام Key Vault عندما لا يمكنك ذلك، يمكنك تقليل المخاطر وتقليل الحمل التشغيلي وتحسين وضع الأمان لتطبيقاتك بشكل عام.
إنشاء تطبيق وظائف يستخدم Key Vault للبيانات السرية الضرورية
Azure Files هو مثال على خدمة لا تدعم بعد مصادقة Microsoft Entra لمشاركات ملفات Server Message Block (SMB). Azure Files هو نظام الملفات الافتراضي لعمليات نشر Windows في الخطط المتميزة وخطط الاستهلاك. بينما يمكننا إزالة ملفات Azure بالكامل، فإن القيام بذلك يقدم قيودا قد لا تريدها. بدلا من ذلك، يمكنك نقل ملفات Azure سلسلة الاتصال إلى Azure Key Vault. وبهذه الطريقة تتم إدارته مركزيا، مع التحكم في الوصول بواسطة الهوية.
إنشاء Azure Key Vault
أولا تحتاج إلى مخزن رئيسي لتخزين الأسرار فيه. يمكنك تكوينه لاستخدام التحكم في الوصول المستند إلى دور Azure (RBAC) لتحديد من يمكنه قراءة الأسرار من المخزن.
حدد Create a resource (+) في مدخل Azure.
في صفحة إنشاء مورد، حدد Security>Key Vault.
في صفحة الأساسيات، استخدام الجدول التالي لتكوين إعدادات المخزن الرئيسي.
خيار القيمة المقترحة الوصف الاشتراك اشتراكك الاشتراك الذي يتم بموجبه إنشاء هذا تطبيق الوظائف الجديد. مجموعة الموارد myResourceGroup اسم مجموعة الموارد الجديدة حيث تقوم بإنشاء تطبيق الوظائف الخاص بك. اسم خزنة المفاتيح اسم فريد عالميًا الاسم الذي يحدد المخزن الرئيسي الجديد. يجب أن يحتوي اسم المخزن على أحرف أبجدية رقمية والشرطات فقط ولا يمكن أن يبدأ برقم. مستوى التسعير قياسي خيارات الفوترة. المعيار كافٍ لهذا البرنامج التعليمي. المنطقة المنطقة المفضلة اختر region قريبة منك، أو بالقرب من الخدمات التي تصل إليها الوظائف. استخدم التحديدات الافتراضية لأقسام «خيارات الاسترداد».
دون الاسم الذي استخدمته، لاستخدامه لاحقا.
حدد التالي: نهج الوصول للانتقال إلى علامة التبويب نهج الوصول.
ضمن Permission model، اختر التحكم في الوصول المستند إلى دور Azure
حدد "Review + create". راجع التكوين، ثم حدد إنشاء.
إعداد هوية وأذونات للتطبيق
لاستخدام Azure Key Vault، يحتاج تطبيقك إلى هوية يمكن منحها الإذن لقراءة البيانات السرية. يستخدم هذا التطبيق هوية معينة من قبل المستخدم بحيث يمكن إعداد الأذونات قبل إنشاء التطبيق. لمزيد من المعلومات حول الهويات المدارة ل Azure Functions، راجع كيفية استخدام الهويات المدارة في Azure Functions.
حدد Create a resource (+) في مدخل Azure.
في الصفحة إنشاء مورد، حدد Identity>User Assigned Managed Identity.
في صفحة الأساسيات، استخدام الجدول التالي لتكوين إعدادات الهوية.
خيار القيمة المقترحة الوصف الاشتراك اشتراكك الاشتراك الذي يتم بموجبه إنشاء هذا تطبيق الوظائف الجديد. مجموعة الموارد myResourceGroup اسم مجموعة الموارد الجديدة حيث تقوم بإنشاء تطبيق الوظائف الخاص بك. المنطقة المنطقة المفضلة اختر region قريبة منك، أو بالقرب من الخدمات التي تصل إليها الوظائف. الاسم اسم فريد عالميًا الاسم الذي يحدد الهوية الجديدة المعينة بواسطة المستخدم. حدد "Review + create". راجع التكوين، ثم حدد إنشاء.
عند إنشاء الهوية، انتقل إليها في المدخل. حدد Properties، وقم بتدوين معرف المورد لاستخدامه لاحقا.
حدد Azure Role Assignments، وحدد Add role assignment (Preview).
في صفحة إضافة تعيين دور (معاينة)، استخدم الخيارات كما هو موضح في الجدول التالي.
خيار القيمة المقترحة الوصف النطاق Key Vault النطاق هو مجموعة من الموارد التي ينطبق عليها تعيين الدور. النطاق له مستويات موروثة في مستويات أدنى. على سبيل المثال، إذا حددت نطاق اشتراك، فسيتم تطبيق تعيين الدور على كل مجموعات الموارد والموارد في الاشتراك. الاشتراك اشتراكك الاشتراك الذي يتم بموجبه إنشاء هذا تطبيق الوظائف الجديد. المورد المخزن الرئيسي المخزن الرئيسي الذي أنشأته سابقًا. الدور مستخدم بيانات Key Vault السرية الدور هو مجموعة من الأذونات التي يتم منحها. يمنح مستخدم البيانات السرية في Key Vault Secrets الإذن للهوية بالاطلاع على القيم السرية من المخزن. حدد حفظ. قد يستغرق الأمر دقيقة أو دقيقتين ليظهر الدور عند تحديث قائمة تعيينات الدور للهوية.
الهوية الآن قادرة على قراءة الأسرار المخزنة في مخزن المفاتيح. في وقت لاحق في البرنامج التعليمي، يمكنك إضافة تعيينات دور إضافية لأغراض مختلفة.
إنتاج قالب لإنشاء تطبيق وظائف
نظرا لأن تجربة المدخل لإنشاء تطبيق وظائف لا تتفاعل مع Azure Key Vault، فأنت بحاجة إلى إنشاء قالب Azure Resource Manager وتحريره. يمكنك بعد ذلك استخدام هذا القالب لإنشاء تطبيق وظائف يشير إلى سلسلة اتصال Azure Files من المخزن الرئيسي.
هام
لا تُنشئ تطبيق الوظائف إلا بعد تحرير قالب ARM. يجب إعداد تكوين ملفات Azure في وقت إنشاء التطبيق.
حدد Create a resource (+) في مدخل Azure.
في صفحة إنشاء مورد، حدد Compute>Function App.
في صفحة الأساسيات، استخدام الجدول التالي لتكوين إعدادات تطبيق الوظائف.
خيار القيمة المقترحة الوصف الاشتراك اشتراكك الاشتراك الذي يتم بموجبه إنشاء هذا تطبيق الوظائف الجديد. مجموعة الموارد myResourceGroup اسم مجموعة الموارد الجديدة حيث تقوم بإنشاء تطبيق الوظائف الخاص بك. اسم تطبيق الوظائف اسم فريد عالميًا الاسم الذي يحدد تطبيق الوظائف الجديد. الأحرف الصالحة هي a-z
(غير حساسة لحالة الأحرف)، و0-9
، و-
.نشر رمز اختر نشر ملفات التعليمات البرمجية أو حاويات Docker. مكدس وقت التشغيل .NET يستخدم هذا البرنامج التعليمي .NET. المنطقة المنطقة المفضلة اختر region قريبة منك، أو بالقرب من الخدمات التي تصل إليها الوظائف. حدد "Review + create". يستخدم تطبيقك القيم الافتراضية في صفحة الاستضافةوالمراقبة. راجع الخيارات الافتراضية، المضمنة في قالب ARM الذي تقوم بإنشاءه.
بدلا من إنشاء تطبيق الوظائف هنا، اختر Download a template for automation، الموجود على يمين الزر Next.
في صفحة القالب، حدد Deploy، ثم في صفحة النشر المخصص، حدد Edit template.
تحرير القالب
يمكنك الآن تحرير القالب لتخزين سلسلة الاتصال ملفات Azure في Key Vault والسماح لتطبيق الوظائف بالإشارة إليه. تأكد من أن لديك القيم التالية من الأقسام السابقة قبل المتابعة:
- معرّف المورد للهوية المعينة بواسطة المستخدم
- اسم المخزن الرئيسي
إشعار
إذا كنت تريد إنشاء قالب كامل للأتمتة، قد تحتاج إلى تضمين تعريفات موارد تعيين الدور والهوية مع عبارات dependsOn
المناسبة. وهذا من شأنه أن يحل محل الخطوات السابقة التي استخدمت المدخل. راجع دليل Azure Resource Manager والوثائق لكل خدمة.
في المحرر، ابحث عن المكان الذي يبدأ عنده الصفيف
resources
. قبل تعريف تطبيق الدالة، أضف القسم التالي، الذي يضع ملفات Azure سلسلة الاتصال في Key Vault. استبدل "VAULT_NAME" باسم المخزن الرئيسي التابع لك.{ "type": "Microsoft.KeyVault/vaults/secrets", "apiVersion": "2016-10-01", "name": "VAULT_NAME/azurefilesconnectionstring", "properties": { "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]" }, "dependsOn": [ "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]" ] },
في تعريف مورد تطبيق الوظائف (الذي عيّن
type
إلىMicrosoft.Web/sites
)، أضفMicrosoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring
إلى الصفيفdependsOn
. مرة أخرى، استبدل "VAULT_NAME" باسم مخزن المفاتيح الخاص بك. يؤدي القيام بذلك إلى منع إنشاء تطبيقك قبل تعريف السر.dependsOn
يجب أن يبدو الصفيف مثل المثال التالي:{ "type": "Microsoft.Web/sites", "apiVersion": "2018-11-01", "name": "[parameters('name')]", "location": "[parameters('location')]", "tags": null, "dependsOn": [ "microsoft.insights/components/idcxntut", "Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring", "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]", "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]" ], // ... }
أضف الكتلة
identity
من المثال التالي إلى تعريف مورد تطبيق الوظائف. استبدال "IDENTITY_RESOURCE_ID" بمعرّف المورد للهوية المعينة بواسطة المستخدم.{ "apiVersion": "2018-11-01", "name": "[parameters('name')]", "type": "Microsoft.Web/sites", "kind": "functionapp", "location": "[parameters('location')]", "identity": { "type": "SystemAssigned,UserAssigned", "userAssignedIdentities": { "IDENTITY_RESOURCE_ID": {} } }, "tags": null, // ... }
تقوم هذه
identity
الكتلة أيضا بإعداد هوية معينة من قبل النظام، والتي تستخدمها لاحقا في هذا البرنامج التعليمي.أضف الخاصية
keyVaultReferenceIdentity
properties
إلى الكائن لتطبيق الوظائف، كما في المثال التالي. استبدال "IDENTITY_RESOURCE_ID" بمعرّف المورد للهوية المعينة بواسطة المستخدم.{ // ... "properties": { "name": "[parameters('name')]", "keyVaultReferenceIdentity": "IDENTITY_RESOURCE_ID", // ... } }
تحتاج إلى هذا التكوين لأنه قد يكون لدى التطبيق هويات متعددة معينة بواسطة المستخدم تم تكوينها. كلما أردت استخدام هوية معينة من قبل المستخدم، يجب تحديدها بمعرف. لا تحتاج الهويات المعينة من قبل النظام إلى تحديدها بهذه الطريقة، لأن التطبيق يمكن أن يكون له واحد فقط. تفترض العديد من الميزات التي تستخدم هوية مُدارة أنه يجب استخدام الهوية المعينة بواسطة النظام بشكل افتراضي.
ابحث عن كائنات JSON التي تحدد
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
إعداد التطبيق، والتي يجب أن تبدو مثل المثال التالي:{ "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]" },
استبدل الحقل
value
بمرجع إلى البيانات السرية كما هو موضح في المثال التالي. استبدل "VAULT_NAME" باسم المخزن الرئيسي التابع لك.{ "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', 'VAULT_NAME', 'azurefilesconnectionstring')).secretUri, ')')]" },
حدد Save لحفظ قالب ARM المحدّث.
نشر القالب المعدّل
تأكد من أن خيارات الإنشاء، بما في ذلك Resource Group،لا تزال صحيحة ثم حدد Review + create.
بعد التحقق من صحة القالب، دوّن ملاحظة باسم حساب التخزين حيث ستستخدم هذا الحساب لاحقًا. وأخيرًا، حدد Create لإنشاء موارد Azure ونشر التعليمات البرمجية إلى تطبيق الوظائف.
بعد اكتمال عملية النشر، حدد Go to resource group ثم حدد تطبيق الوظائف الجديد.
تهانينا! لقد نجحت في إنشاء تطبيق الوظائف للرجوع إلى سلسلة اتصال Azure Files من Azure Key Vault.
كلما احتاج التطبيق إلى إضافة مرجع إلى البيانات السرية، ما عليك سوى تحديد إعداد تطبيق جديد يشير إلى القيمة المخزنة في Key Vault. لمزيد من المعلومات، راجع مراجع Key Vault ل Azure Functions.
تلميح
لا تعتبر سلسلة اتصال Application Insights ومفتاح الأجهزة المدرج بها من ضمن البيانات السرية ويمكن استردادها من App Insights باستخدام أذونات القارئ. ليس عليك نقلها إلى Key Vault، على الرغم من أنك تستطيع ذلك بالتأكيد.
استخدام الهوية المدارة ل AzureWebJobsStorage
بعد ذلك، يمكنك استخدام الهوية المعينة من قبل النظام التي قمت بتكوينها في الخطوات AzureWebJobsStorage
السابقة للاتصال. يستخدم AzureWebJobsStorage
من خلال وقت تشغيل Functions وبواسطة عدة مشغلات وروابط للتنسيق بين مثيلات تشغيل متعددة. مطلوب لتشغيل تطبيق الوظائف الخاص بك، ومثل Azure Files، يتم تكوينه باستخدام سلسلة الاتصال بشكل افتراضي عند إنشاء تطبيق دالة جديد.
منح حق الوصول إلى الهوية المعينة بواسطة النظام إلى حساب التخزين
على غرار الخطوات التي اتبعتها سابقا مع الهوية المعينة من قبل المستخدم وخزنة المفاتيح الخاصة بك، يمكنك الآن إنشاء تعيين دور يمنح الوصول إلى الهوية المعينة من قبل النظام إلى حساب التخزين الخاص بك.
في مدخل Azure، انتقل إلى حساب التخزين الذي تم إنشاؤه باستخدام تطبيق الوظائف في وقت سابق.
حدد التحكم بالوصول (IAM). هذه الصفحة هي المكان الذي يمكنك فيه عرض وتكوين من لديه حق الوصول إلى المورد.
حدد إضافة وحدد إضافة تعيين دور.
ابحث عن Storage Blob Data Owner، وحدده، وحدد Next
في علامة التبويب Members، ضمن Assign access to، اختر Managed Identity
حدد Select members لفتح لوحة Select managed identities .
تأكد من أن الاشتراك هو الاشتراك الذي أنشأت فيه الموارد مسبقًا.
في محدد Managed identity، اختر Function App من فئة System-assigned managed identity. قد يكون لتسمية Function App رقم بين أقواس بجانبه، يشير إلى عدد التطبيقات في الاشتراك مع الهويات المعينة من قبل النظام.
يجب أن يظهر تطبيقك في قائمة أسفل حقول الإدخال. إذا لم يظهر لك، يمكنك استخدام المربع Select لتصفية النتائج باسم التطبيق.
حدد طلبك. يجب الانتقال إلى أسفل إلى قسم Selected members. اختر تحديد.
في شاشة إضافة تعيين دور، حدد مراجعة + تعيين. راجع التكوين، ثم حدد Review + assign.
تلميح
إذا كنت تنوي استخدام تطبيق الوظائف لدالة يتم تشغيلها بواسطة كائن ثنائي كبير الحجم، فستحتاج إلى تكرار هذه الخطوات لأدوار مساهم حساب التخزين ومساهم بيانات قائمة انتظار التخزين على الحساب المُستخدَم من قبل AzureWebJobsStorage. لمعرفة المزيد، راجع اتصالات مشغل الكائن الثنائي كبير الحجم المستندة إلى الهوية.
تحرير تكوين AzureWebJobsStorage
بعد ذلك تقوم بتحديث تطبيق الوظائف الخاص بك لاستخدام هويته المعينة من قبل النظام عندما يستخدم خدمة blob لتخزين المضيف.
هام
يتم استخدام تكوين AzureWebJobsStorage
بواسطة بعض المشغلات والروابط، ويجب أن تكون هذه الملحقات قادرة على استخدام الاتصالات المستندة إلى الهوية أيضًا. قد تحتاج التطبيقات التي تستخدم مشغلات الكائن الثنائي كبير الحجم أو مشغلات مركز الأحداث إلى تحديث هذه الملحقات. وذلك نظرًا لعدم تحديد وظائف لهذا التطبيق، فلا داعي للقلق حتى الآن. لمعرفة المزيد حول هذا المطلب، راجع الاتصال بالتخزين المضيف بهوية.
وبالمثل، يُستخدم AzureWebJobsStorage
لنشر البيانات الاصطناعية عند استخدام بنية من جانب الخادم في الاستهلاك على Linux. عند تمكين الاتصالات المستندة إلى الهوية لـ AzureWebJobsStorage
في الاستهلاك على Linux، ستحتاج إلى النشر عبر حزمة نشر خارجية.
انتقل إلى تطبيق الوظائف الجديد في مدخل Azure.
في تطبيق الوظائف، قم بتوسيع الإعدادات، ثم حدد متغيرات البيئة.
في علامة التبويب إعدادات التطبيق، حدد إعداد تطبيق AzureWebJobsStorage ، وقم بتحريره وفقا للجدول التالي:
خيار القيمة المقترحة الوصف الاسم AzureWebJobsStorage__accountName غير الاسم من AzureWebJobsStorage إلى الاسم AzureWebJobsStorage__accountName
الدقيق . يوجه هذا الإعداد المضيف لاستخدام الهوية بدلا من البحث عن سر مخزن. يستخدم الإعداد الجديد شرطة سفلية مزدوجة (__
)، وهي حرف خاص في إعدادات التطبيق.القيمة اسم حسابك حدّث الاسم من سلسلة الاتصال إلى StorageAccountName. يخبر هذا التكوين النظام باستخدام هوية للاتصال بالمورد.
حدد تطبيق، ثم حدد تطبيق وتأكيد لحفظ التغييرات وإعادة تشغيل وظيفة التطبيق.
لقد قمت الآن بإزالة متطلبات سلسلة الاتصال التخزين ل AzureWebJobsStorage عن طريق تكوين تطبيقك للاتصال بدلا من ذلك بالكائنات الثنائية كبيرة الحجم باستخدام الهويات المدارة.
إشعار
بناء __accountName
الجملة فريد لاتصال AzureWebJobsStorage ولا يمكن استخدامه لاتصالات التخزين الأخرى. لمعرفة كيفية تعريف الاتصالات الأخرى، تحقق من المرجع لكل مشغل واربط استخدامات تطبيقك.
الخطوات التالية
وضّح هذا البرنامج التعليمي كيفية إنشاء تطبيق وظائف دون تخزين البيانات السرية في تكوينه.
تقدم إلى البرنامج التعليمي التالي لمعرفة كيفية استخدام الهويات في اتصالات المشغل والربط.