توصيل Azure Spring Apps ب Key Vault باستخدام الهويات المدارة
إشعار
سيتم إهمال الخطط الأساسية والقياسية والمؤسسة بدءا من منتصف مارس 2025، مع فترة تقاعد 3 سنوات. نوصي بالانتقال إلى Azure Container Apps. لمزيد من المعلومات، راجع إعلان إيقاف Azure Spring Apps.
سيتم إهمال الاستهلاك القياسي والخطة المخصصة بدءا من 30 سبتمبر 2024، مع إيقاف التشغيل الكامل بعد ستة أشهر. نوصي بالانتقال إلى Azure Container Apps. لمزيد من المعلومات، راجع ترحيل استهلاك Azure Spring Apps القياسي وخطة مخصصة إلى Azure Container Apps.
هذه المقالة تنطبق على: ✔️ Java ❌ C#
توضح هذه المقالة كيفية إنشاء هوية مدارة معينة من قبل النظام أو معينة من قبل المستخدم لتطبيق تم نشره في Azure Spring Apps واستخدامها للوصول إلى Azure Key Vault.
يُمكن استخدام Azure Key Vault للتخزين بأمان والتحكم بدرجة كبيرة في الوصول إلى الرمز المميز السري، وكلمات المرور، والشهادات، ومفاتيح واجهة برمجة التطبيقات، وأسرار أخرى تتعلق بتطبيقك. يمكنك إنشاء هوية مدارة في معرف Microsoft Entra، والمصادقة على أي خدمة تدعم مصادقة Microsoft Entra، بما في ذلك Key Vault، دون الحاجة إلى عرض بيانات الاعتماد في التعليمات البرمجية الخاصة بك.
يصف الفيديو التالي كيفية إدارة الأسرار باستخدام Azure Key Vault.
المتطلبات الأساسية
- اشتراك Azure. في حال لم يكن لديك اشتراك Azure، أنشئ حسابًا مجانيًا قبل البدء.
- إذا كنت تقوم بنشر مثيل خطة Azure Spring Apps Enterprise للمرة الأولى في الاشتراك الهدف، فشاهد قسم المتطلبات في خطة المؤسسة في Azure Marketplace.
- Azure CLI، الإصدار 2.55.0 أو أعلى.
- اشتراك Azure. في حال لم يكن لديك اشتراك Azure، أنشئ حسابًا مجانيًا قبل البدء.
- Azure CLI، الإصدار 2.55.0 أو أعلى.
توفير أسماء لكل مورد
إنشاء متغيرات للاحتفاظ بأسماء الموارد باستخدام الأوامر التالية. تأكد من استبدل العناصر النائبة بقيمتك الخاصة.
export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>
إنشاء مجموعة موارد
وتُعد مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد Azure وإدارتها. إنشاء مجموعة موارد لاحتواء كل من Key Vault وSpring Cloud باستخدام الأمر az group create ، كما هو موضح في المثال التالي:
az group create --name ${RESOURCE_GROUP} --location ${LOCATION}
إعداد Key Vault الخاص بك
لإنشاء Key Vault، استخدم الأمر az keyvault create ، كما هو موضح في المثال التالي:
هام
يجب أن يكون لكل Key Vault اسم مميز.
az keyvault create \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT}
استخدم الأمر التالي لإظهار عنوان URL للتطبيق ثم دون ملاحظة بعنوان URL الذي تم إرجاعه، وهو بالتنسيق https://${KEY_VAULT}.vault.azure.net
. استخدم هذه القيمة في الخطوة التالية.
az keyvault show \
--resource-group ${RESOURCE_GROUP} \
--name ${KEY_VAULT} \
--query properties.vaultUri --output tsv
يمكنك الآن وضع سر في Key Vault الخاص بك باستخدام الأمر az keyvault secret set ، كما هو موضح في المثال التالي:
az keyvault secret set \
--vault-name ${KEY_VAULT} \
--name "connectionString" \
--value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"
إنشاء تطبيق وخدمة Azure Spring Apps
بعد تثبيت جميع الملحقات المقابلة، استخدم الأمر التالي لإنشاء مثيل Azure Spring Apps:
az extension add --upgrade --name spring
az spring create \
--resource-group ${RESOURCE_GROUP} \
--sku Enterprise \
--name ${SPRING_APPS}
ينشئ المثال التالي التطبيق بهوية مدارة معينة من قبل النظام، كما هو مطلوب من قبل المعلمة --system-assigned
:
az spring app create \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--assign-endpoint true \
--system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--query identity.principalId --output tsv)
az extension add --upgrade --name spring
az spring create \
--resource-group ${RESOURCE_GROUP} \
--name ${SPRING_APPS}
ينشئ المثال التالي تطبيقاً يحمل اسم springapp
بواسطة هوية مدارة معينة من قبل النظام، كما طلبت المعلمة--system-assigned
.
az spring app create \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--assign-endpoint true \
--runtime-version Java_17 \
--system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
--resource-group ${RESOURCE_GROUP} \
--service ${SPRING_APPS} \
--name ${APP} \
--query identity.principalId --output tsv)
امنح التطبيق الخاص بك الوصول إلىKey Vault
استخدم الأمر التالي لمنح الوصول المناسب في Key Vault لتطبيقك:
az keyvault set-policy \
--name ${KEY_VAULT} \
--object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
--secret-permissions set get list
إشعار
بالنسبة للهوية المدارة المعينة من قبل النظام، استخدم az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID}
لإزالة الوصول لتطبيقك بعد تعطيل الهوية المدارة المعينة من قبل النظام.
إنشاء نموذج تطبيق Spring Boot باستخدام بداية Spring Boot
هذا التطبيق لديه حق الوصول للحصول على أسرار من Azure Key Vault. استخدم بداية التمهيد Azure Key Vault Secrets Spring. تتم إضافة Azure Key Vault كمثال على الربيع PropertySource. يمكن الوصول إلى الأسرار المخزنة فيAzure Key Vault بسهولة واستخدامها مثل أي خاصية تكوين خارجية، مثل الخصائص في الملفات.
استخدم الأمر التالي لإنشاء نموذج مشروع من
start.spring.io
باستخدام Azure Key Vault Spring Starter.curl https://start.spring.io/starter.tgz -d dependencies=web,azure-keyvault -d baseDir=springapp -d bootVersion=3.2.1 -d javaVersion=17 -d type=maven-project | tar -xzvf -
حدد Key Vault الخاص بك في تطبيقك.
cd springapp vim src/main/resources/application.properties
لاستخدام الهوية المدارة لتطبيق تم نشره في Azure Spring Apps، أضف خصائص بالمحتوى التالي إلى ملف src/main/resources/application.properties .
spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=<your-keyvault-url> spring.cloud.azure.keyvault.secret.property-sources[0].credential.managed-identity-enabled=true
إشعار
يجب إضافة عنوان URL لمخزن المفاتيح في ملف application.properties كما هو موضح سابقا. خلاف ذلك، قد لا يتم التقاط عنوان URL لخزنة المفاتيح أثناء وقت التشغيل.
تحديث src/main/java/com/example/demo/DemoApplication.java باستخدام مثال التعليمات البرمجية التالي. تسترد هذه التعليمة البرمجية سلسلة الاتصال من Key Vault.
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication implements CommandLineRunner { @Value("${connectionString}") private String connectionString; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("get") public String get() { return connectionString; } public void run(String... args) throws Exception { System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString)); } }
إذا فتحت ملف pom.xml ، يمكنك مشاهدة التبعية
spring-cloud-azure-starter-keyvault
، كما هو موضح في المثال التالي:<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
استخدم الأمر التالي لنشر تطبيقك في Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path
استخدم الأمر التالي لنشر تطبيقك في Azure Spring Apps:
az spring app deploy \ --resource-group ${RESOURCE_GROUP} \ --service ${SPRING_APPS} \ --name ${APP} \ --source-path \ --build-env BP_JVM_VERSION=17
لاختبار التطبيق الخاص بك، قم بالوصول إلى نقطة النهاية العامة أو اختبار نقطة النهاية باستخدام الأمر التالي:
curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
يتم إرجاع الرسالة التالية في نص الاستجابة:
jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;
.
تنظيف الموارد
استخدم الأمر التالي لحذف مجموعة الموارد بأكملها، بما في ذلك مثيل الخدمة الذي تم إنشاؤه حديثا:
az group delete --name ${RESOURCE_GROUP} --yes