التشغيل السريع: تحميل أسرار التطبيق باستخدام Key Vault

إشعار

يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.

تنطبق هذه المقالة على:❌ Basic/Standard ✔️ Enterprise

يوضح لك هذا التشغيل السريع كيفية تحميل الأسرار بأمان باستخدام Azure Key Vault للتطبيقات التي تشغل خطة Azure Spring Apps Enterprise.

يحتوي كل تطبيق على خصائص تربطه بالبيئة والخدمات الداعمة. تتضمن هذه الخدمات موارد مثل قواعد البيانات وأدوات التسجيل والمراقبة ومنصات المراسلة وما إلى ذلك. يتطلب كل مورد طريقة لتحديد موقعه والوصول إليه، غالبا في شكل عناوين URL وبيانات الاعتماد. غالبا ما تكون هذه المعلومات محمية بموجب القانون، ويجب أن تبقى سرية من أجل حماية بيانات العملاء. في Azure Spring Apps، يمكنك تكوين التطبيقات لتحميل هذه الأسرار مباشرة في الذاكرة من Key Vault باستخدام الهويات المدارة والتحكم في الوصول المستند إلى الدور في Azure.

المتطلبات الأساسية

توفير Key Vault وتخزين الأسرار

تصف الإرشادات التالية كيفية إنشاء Key Vault وحفظ أسرار التطبيق بأمان.

  1. إنشاء متغيرات للاحتفاظ بأسماء الموارد باستخدام الأوامر التالية. تأكد من استبدل العناصر النائبة بقيمتك الخاصة.

    export RESOURCE_GROUP=<resource-group-name>
    export KEY_VAULT_NAME=<key-vault-name>
    export POSTGRES_SERVER_NAME=<postgres-server-name>
    export POSTGRES_USERNAME=<postgres-username>
    export POSTGRES_PASSWORD=<postgres-password>
    export REDIS_CACHE_NAME=<redis-cache-name>
    export AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME=<Azure-Spring-Apps-service-instance-name>
    
  2. استخدم الأمر التالي لإنشاء Key Vault لتخزين أسرار التطبيق:

    az keyvault create \
        --resource-group ${RESOURCE_GROUP} \
        --name ${KEY_VAULT_NAME}
    
  3. استخدم الأمر التالي لتخزين اسم خادم قاعدة البيانات الكامل في Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-SERVER-NAME" \
        --value "${POSTGRES_SERVER_NAME}.postgres.database.azure.com"
    
  4. استخدم الأمر التالي لتخزين اسم قاعدة البيانات في Key Vault لتطبيق خدمة الكتالوج:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "CATALOG-DATABASE-NAME" \
        --value "acmefit_catalog"
    
  5. استخدم الأوامر التالية لتخزين بيانات اعتماد تسجيل الدخول إلى قاعدة البيانات في Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-LOGIN-NAME" \
        --value "${POSTGRES_USERNAME}"
    
    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-LOGIN-PASSWORD" \
        --value "${POSTGRES_PASSWORD}"
    
  6. استخدم الأمر التالي لتخزين سلسلة الاتصال قاعدة البيانات في Key Vault لتطبيق خدمة الطلب:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "ConnectionStrings--OrderContext" \
        --value "Server=${POSTGRES_SERVER_NAME};Database=acmefit_order;Port=5432;Ssl Mode=Require;User Id=${POSTGRES_USERNAME};Password=${POSTGRES_PASSWORD};"
    
  7. استخدم الأوامر التالية لاسترداد خصائص اتصال Redis وتخزينها في Key Vault:

    export REDIS_HOST=$(az redis show \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.hostName')
    
    export REDIS_PORT=$(az redis show \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.sslPort')
    
    export REDIS_PRIMARY_KEY=$(az redis list-keys \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.primaryKey')
    
    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "CART-REDIS-CONNECTION-STRING" \
        --value "rediss://:${REDIS_PRIMARY_KEY}@${REDIS_HOST}:${REDIS_PORT}/0"
    
  8. إذا قمت بتكوين تسجيل الدخول الأحادي، فاستخدم الأمر التالي لتخزين JSON Web Key (JWK) URI في Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "SSO-PROVIDER-JWK-URI" \
        --value <jwk-uri>
    

منح التطبيقات حق الوصول إلى الأسرار في Key Vault

توضح الإرشادات التالية كيفية منح حق الوصول إلى أسرار Key Vault للتطبيقات المنشورة في خطة Azure Spring Apps Enterprise.

  1. استخدم الأمر التالي لتمكين الهوية المعينة من قبل النظام لتطبيق خدمة السلة:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  2. استخدم الأوامر التالية لتعيين نهج وصول على get list Key Vault لتطبيق خدمة Cart:

    export CART_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${CART_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  3. استخدم الأمر التالي لتمكين الهوية المعينة للنظام لتطبيق خدمة الطلبات:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  4. استخدم الأوامر التالية لتعيين نهج وصول على get list Key Vault لتطبيق خدمة الطلبات:

    export ORDER_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${ORDER_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  5. استخدم الأمر التالي لتمكين الهوية المعينة من قبل النظام لتطبيق خدمة الكتالوج:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  6. استخدم الأوامر التالية لتعيين نهج وصول على get list Key Vault لتطبيق خدمة الكتالوج:

    export CATALOG_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${CATALOG_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  7. إذا قمت بتكوين تسجيل الدخول الأحادي، فاستخدم الأمر التالي لتمكين الهوية المعينة من قبل النظام لتطبيق خدمة الهوية:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  8. إذا قمت بتكوين تسجيل الدخول الأحادي، فاستخدم الأوامر التالية لتعيين نهج وصول على get list Key Vault لتطبيق خدمة الهوية:

    export IDENTITY_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${IDENTITY_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    

تحديث التطبيقات لتحميل أسرار Key Vault

بعد منح حق الوصول إلى قراءة البيانات السرية من Key Vault، استخدم الخطوات التالية لتحديث التطبيقات لاستخدام القيم السرية الجديدة في تكويناتها.

  1. استخدم الأمر التالي لاسترداد URI ل Key Vault لاستخدامه في تحديث التطبيقات:

    export KEYVAULT_URI=$(az keyvault show --name ${KEY_VAULT_NAME} --resource-group ${RESOURCE_GROUP} | jq -r '.properties.vaultUri')
    
  2. استخدم الأمر التالي لاسترداد عنوان URL ل Spring Cloud Gateway لاستخدامه في تحديث التطبيقات:

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
    
  3. استخدم الأمر التالي لإزالة الخدمة الاتصال أو ربط تطبيق خدمة الطلب وقاعدة بيانات Azure لخادم PostgreSQL المرن:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app order-service \
        --connection order_service_db \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  4. استخدم الأمر التالي لتحديث بيئة خدمة الطلبات باستخدام URI للوصول إلى Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --env "ConnectionStrings__KeyVaultUri=${KEYVAULT_URI}" "AcmeServiceSettings__AuthUrl=https://${GATEWAY_URL}" "DatabaseProvider=Postgres"
    
  5. استخدم الأمر التالي لإزالة الخدمة الاتصال أو ربط تطبيق خدمة الكتالوج وقاعدة بيانات Azure لخادم PostgreSQL المرن:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app catalog-service \
        --connection catalog_service_db \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  6. استخدم الأمر التالي لتحديث بيئة خدمة الكتالوج ونمط التكوين للوصول إلى Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --config-file-pattern catalog/default,catalog/key-vault \
        --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
    
  7. استخدم الأمر التالي لإزالة الخدمة الاتصال أو ربط تطبيق خدمة السلة وذاكرة التخزين المؤقت Azure ل Redis:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app cart-service \
        --connection cart_service_cache \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  8. استخدم الأمر التالي لتحديث بيئة خدمة Cart للوصول إلى Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --env "CART_PORT=8080" "KEYVAULT_URI=${KEYVAULT_URI}" "AUTH_URL=https://${GATEWAY_URL}"
    
  9. إذا قمت بتكوين تسجيل الدخول الأحادي، فاستخدم الأمر التالي لتحديث بيئة خدمة الهوية ونمط التكوين للوصول إلى Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --config-file-pattern identity/default,identity/key-vault \
        --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
    
  10. استخدم الأوامر التالية لاسترداد عنوان محدد مواقع الويب لبوابة Spring Cloud:

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
    
    echo "https://${GATEWAY_URL}"
    

    يمكنك فتح عنوان URL للإخراج في مستعرض لاستكشاف التطبيق المحدث.

تنظيف الموارد

إذا كنت تخطط لمواصلة العمل بالبدايات السريعة والبرامج التعليمية اللاحقة، فقد ترغب في ترك هذه الموارد في مكانها. يمكنك حذف مجموعة الموارد عند انتهاء حاجتك إليها، وهذا يؤدي إلى حذف الموارد الموجودة في مجموعة الموارد. لحذف مجموعة الموارد باستخدام Azure CLI، استخدم الأوامر التالية:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

الخطوات التالية

تابع إلى أي من قوالب التشغيل السريع الاختيارية التالية: