البرنامج التعليمي: استخدام هوية مدارة لاستدعاء وظائف Azure من تطبيق Azure Spring Apps
إشعار
يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.
تنطبق هذه المقالة على: ✔️ Basic/Standard ✔️ Enterprise
توضح لك هذه المقالة كيفية إنشاء هوية مدارة لتطبيق مستضاف في Azure Spring Apps واستخدامه لاستدعاء الوظائف التي تم تشغيلها بواسطة HTTP.
تم إنشاء كل من Azure Functions وApp Services في دعم لمصادقة Microsoft Entra. باستخدام إمكانية المصادقة المضمنة هذه جنبا إلى جنب مع الهويات المدارة لتطبيقات Azure Spring، يمكنك استدعاء خدمات RESTful باستخدام دلالات OAuth الحديثة. لا يتطلب هذا الأسلوب تخزين الأسرار في التعليمات البرمجية ويوفر عناصر تحكم أكثر دقة للتحكم في الوصول إلى الموارد الخارجية.
المتطلبات الأساسية
- اشتراك Azure. في حال لم يكن لديك اشتراك Azure، أنشئ حسابًا مجانيًا قبل البدء.
- إصدار Azure CLI 2.45.0 أو أعلى.
- Git.
- Apache Maven الإصدار 3.0 أو أعلى.
- تثبيت Azure Functions Core Tools الإصدار 4.x.
إنشاء مجموعة موارد
وتُعد مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد Azure وإدارتها. استخدم الأمر التالي لإنشاء مجموعة موارد لاحتواء تطبيق Function:
az group create --name <resource-group-name> --location <location>
لمزيد من المعلومات، راجع الأمر az group create .
إنشاء تطبيق دالة
لإنشاء تطبيق دالة، يجب أولا إنشاء حساب تخزين احتياطي. يمكنك استخدام الأمر az storage account create .
هام
يجب أن يكون لكل تطبيق وظيفة وحساب تخزين اسم فريد.
استخدم الأمر التالي لإنشاء حساب التخزين. استبدل <function-app-name> باسم تطبيق الوظائف واسم <حساب> التخزين باسم حساب التخزين الخاص بك.
az storage account create \
--resource-group <resource-group-name> \
--name <storage-account-name> \
--location <location> \
--sku Standard_LRS
بعد إنشاء حساب التخزين، استخدم الأمر التالي لإنشاء تطبيق الوظائف:
az functionapp create \
--resource-group <resource-group-name> \
--name <function-app-name> \
--consumption-plan-location <location> \
--os-type windows \
--runtime node \
--storage-account <storage-account-name> \
--functions-version 4
دون القيمة التي تم إرجاعها hostNames
، والتي تكون بالتنسيق https://<your-functionapp-name>.azurewebsites.net
. استخدم هذه القيمة في عنوان URL الجذر لتطبيق الوظائف لاختبار تطبيق الوظائف.
تمكين مصادقة Microsoft Entra
استخدم الخطوات التالية لتمكين مصادقة Microsoft Entra للوصول إلى تطبيق الوظائف.
- في مدخل Microsoft Azure، انتقل إلى مجموعة الموارد الخاصة بك ثم افتح تطبيق الوظائف الذي أنشأته.
- في جزء التنقل، حدد Authentication ثم حدد Add identity provider في الجزء الرئيسي.
- في صفحة إضافة موفر هوية، حدد Microsoft من القائمة المنسدلة موفر الهوية.
- حدد إضافة.
- بالنسبة لإعدادات الأساسيات في صفحة إضافة موفر هوية، قم بتعيين أنواع الحسابات المدعومة إلى أي دليل Microsoft Entra - متعدد المستأجرين.
- تعيين الطلبات غير المصادق عليها إلى HTTP 401 غير مصرح به: مستحسن لواجهات برمجة التطبيقات. يضمن هذا الإعداد رفض جميع الطلبات غير المصادق عليها (استجابة 401).
- حدد إضافة.
بعد إضافة الإعدادات، تتم إعادة تشغيل تطبيق Function وتتم مطالبة جميع الطلبات اللاحقة بتسجيل الدخول من خلال معرف Microsoft Entra. يمكنك اختبار رفض الطلبات غير المصادق عليها حاليا باستخدام عنوان URL الجذر لتطبيق Function (يتم إرجاعه في hostNames
إخراج az functionapp create
الأمر). يجب إعادة توجيهك بعد ذلك إلى شاشة تسجيل الدخول إلى Microsoft Entra الخاصة بمؤسستك.
تحتاج إلى معرف التطبيق ومعرف التطبيق URI للاستخدام لاحقا. في مدخل Microsoft Azure، انتقل إلى تطبيق الوظائف الذي أنشأته.
للحصول على معرف التطبيق، حدد المصادقة في جزء التنقل، ثم انسخ قيمة معرف التطبيق (العميل) لموفر الهوية الذي يتضمن اسم تطبيق الوظائف.
للحصول على معرف التطبيق URI، حدد كشف واجهة برمجة التطبيقات في جزء التنقل، ثم انسخ قيمة معرف التطبيق URI .
إنشاء دالة مشغلة HTTP
في دليل محلي فارغ، استخدم الأوامر التالية لإنشاء تطبيق دالة جديد وإضافة دالة مشغلة HTTP:
func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger
بشكل افتراضي، تستخدم الوظائف المصادقة المستندة إلى المفتاح لتأمين نقاط نهاية HTTP. لتمكين مصادقة Microsoft Entra لتأمين الوصول إلى الوظائف، قم بتعيين authLevel
المفتاح إلى anonymous
في ملف function.json ، كما هو موضح في المثال التالي:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
...
}
]
}
لمزيد من المعلومات، راجع قسم نقاط نهاية HTTP الآمنة في تأمين وظائف Azure.
استخدم الأمر التالي لنشر التطبيق إلى المثيل الذي تم إنشاؤه في الخطوة السابقة:
func azure functionapp publish <function-app-name>
يجب أن يسرد الإخراج من أمر النشر عنوان URL إلى الدالة التي تم إنشاؤها حديثا، كما هو موضح في الإخراج التالي:
Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
HttpTrigger - [httpTrigger]
Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger
إنشاء مثيل وتطبيق خدمة Azure Spring Apps
استخدم الأوامر التالية لإضافة ملحق spring وإنشاء مثيل جديد من Azure Spring Apps:
az extension add --upgrade --name spring
az spring create \
--resource-group <resource-group-name> \
--name <Azure-Spring-Apps-instance-name> \
--location <location>
استخدم الأمر التالي لإنشاء تطبيق يسمى msiapp
بهوية مدارة معينة من قبل النظام، كما هو مطلوب من قبل المعلمة --assign-identity
:
az spring app create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name "msiapp" \
--assign-endpoint true \
--assign-identity
إنشاء نموذج تطبيق Spring Boot لاستدعاء الدالة
يستدعي هذا النموذج الدالة التي تم تشغيلها بواسطة HTTP عن طريق طلب رمز مميز للوصول أولا من نقطة نهاية MSI واستخدام هذا الرمز المميز لمصادقة طلب HTTP للوظيفة. لمزيد من المعلومات، راجع قسم الحصول على رمز مميز باستخدام HTTP في كيفية استخدام الهويات المدارة لموارد Azure على جهاز Azure الظاهري للحصول على رمز مميز للوصول.
استخدم الأمر التالي لنسخ نموذج المشروع:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
استخدم الأمر التالي لتحديد URI الدالة واسم المشغل في خصائص التطبيق:
cd azure-spring-apps-samples/managed-identity-function vim src/main/resources/application.properties
لاستخدام الهوية المدارة لتطبيقات Azure Spring Apps، أضف الخصائص التالية بهذه القيم إلى src/main/resources/application.properties.
azure.function.uri=https://<function-app-name>.azurewebsites.net azure.function.triggerPath=httptrigger azure.function.application-id.uri=<function-app-application-ID-uri>
استخدم الأمر التالي لحزم نموذج التطبيق:
mvn clean package
استخدم الأمر التالي لنشر التطبيق إلى Azure Spring Apps:
az spring app deploy \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --name "msiapp" \ --artifact-path target/asc-managed-identity-function-sample-0.1.0.jar
استخدم الأمر التالي للوصول إلى نقطة النهاية العامة أو نقطة نهاية الاختبار لاختبار تطبيقك:
curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
يتم إرجاع الرسالة التالية في نص الاستجابة.
Function Response: Hello, springcloud. This HTTP triggered function executed successfully.