عرض التطبيقات مع TLS من طرف إلى طرف في شبكة ظاهرية

إشعار

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

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

تشرح هذه المقالة كيفية عرض التطبيقات على الإنترنت باستخدام Application Gateway. عند توزيع مثيل خدمة Azure Spring Apps في شبكتك الظاهرية (VNET)، لا يمكن الوصول إلى التطبيقات الموجودة على مثيل الخدمة إلا في الشبكة الخاصة. لتسهيل الوصول إلى التطبيقات على الإنترنت، تحتاج إلى التكامل مع Azure Application Gateway.

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

تكوين Application Gateway لتطبيقات Azure Spring Apps

نوصي بأن يكون اسم المجال، كما يراه المتصفح، هو نفس اسم المضيف الذي تستخدمه Application Gateway لتوجيه نسبة استخدام الشبكة إلى الواجهة الخلفية من Azure Spring Apps. توفر هذه التوصية أفضل تجربة عند استخدام Application Gateway لعرض التطبيقات المستضافة في Azure Spring Apps والموجودة في شبكة ظاهرية. إذا كان المجال الذي تعرضه Application Gateway مختلفاً عن المجال المقبول لدى Azure Spring Apps، يمكن تعطيل ملفات تعريف الارتباط وعناوين URL لإعادة التوجيه التي تم إنشاؤها (على سبيل المثال). لمزيد من المعلومات، راجع الاحتفاظ باسم المضيف.

لتكوين Application Gateway أمام Azure Spring Apps، اتبع الخطوات التالية.

  1. اتبع الإرشادات الواردة في نشر تطبيقات Azure Spring في شبكة ظاهرية.
  2. اتبع الإرشادات الواردة في الوصول إلى تطبيقك في شبكة خاصة.
  3. احصل على شهادة للمجال الذي تختاره، وقم بتخزينها في Key Vault. لمزيد من المعلومات، راجع البرنامج التعليمي: استيراد شهادة في Azure Key Vault.
  4. قم بتكوين مجال مخصص وشهادة مقابلة من Key Vault على تطبيق تم توزيعه في Azure Spring Apps. لمزيد من المعلومات، راجع البرنامج التعليمي: تعيين مجال مخصص موجود إلى Azure Spring Apps.
  5. انشر Application Gateway في شبكة ظاهرية تم تكوينها وفقا للقائمة التالية:
    • استخدم Azure Spring Apps في مجموعة الواجهة الخلفية، المشار إليها بواسطة المجال اللاحق بـ private.azuremicroservices.io.
    • قم بتضمين وحدة استماع HTTPS باستخدام نفس الشهادة من Key Vault.
    • قم بتكوين الشبكة الظاهرية باستخدام إعدادات HTTP التي تستخدم اسم المجال المخصص الذي تم تكوينه في Azure Spring Apps بدلاً من المجال الملحوق بـ private.azuremicroservices.io.
  6. قم بتكوين DNS العام للإشارة إلى Application Gateway.

تحديد المتغيرات

بعد ذلك، استخدم الأوامر التالية لتحديد المتغيرات لمجموعة الموارد والشبكة الظاهرية التي أنشأتها وفقاً للتوجيهات الواردة في توزيع Azure Spring Apps في شبكة ظاهرية. خصص القيم استناداً إلى بيئتك الحقيقية. عند تعريف SPRING_APP_PRIVATE_FQDN، قم بإزالة https:// من عنوان URI.

export SUBSCRIPTION='subscription-id'
export RESOURCE_GROUP='my-resource-group'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='name-of-spring-cloud-instance'
export APPNAME='name-of-app-in-azure-spring-apps'
export SPRING_APP_PRIVATE_FQDN='$APPNAME.private.azuremicroservices.io'
export VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
export APPLICATION_GATEWAY_SUBNET_NAME='app-gw-subnet'
export APPLICATION_GATEWAY_SUBNET_CIDR='10.1.2.0/24'

تسجيل الدخول إلى Azure

استخدم الأمر التالي لتسجيل الدخول إلى Azure CLI واختر اشتراكك النشط.

az login
az account set --subscription $SUBSCRIPTION

الحصول على شهادة

بالنسبة إلى عمليات توزيع الإنتاج، ستستخدم على الأرجح شهادة موقعة بشكل عام. في هذه الحالة، قم باستيراد الشهادة في Azure Key Vault. لمزيد من المعلومات، راجع البرنامج التعليمي: استيراد شهادة في Azure Key Vault. تأكد من أن الشهادة تتضمن سلسلة الشهادات بأكملها.

قم بتكوين اسم المجال العام على Azure Spring Apps

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

export KV_NAME='name-of-key-vault'
export KV_RG='resource-group-name-of-key-vault'
export CERT_NAME_IN_AZURE_SPRING_APPS='name-of-certificate-in-Azure-Spring-Apps'
export CERT_NAME_IN_KEY_VAULT='name-of-certificate-with-intermediaries-in-key-vault'
export DOMAIN_NAME=myapp.mydomain.com

# provide permissions to Azure Spring Apps to read the certificate from Key Vault:
export VAULTURI=$(az keyvault show \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --query properties.vaultUri \
    --output tsv)

# get the object id for the Azure Spring Apps Domain-Management Service Principal:
export ASADM_OID=$(az ad sp show \
    --id 03b39d0f-4213-4864-a245-b1476ec03169 \
    --query objectId \
    --output tsv)

# allow this Service Principal to read and list certificates and secrets from Key Vault:
az keyvault set-policy \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --object-id $ASADM_OID \
    --certificate-permissions get list \
    --secret-permissions get list

# add custom domain name and configure TLS using the certificate:
az spring certificate add \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --name $CERT_NAME_IN_AZURE_SPRING_APPS \
    --vault-certificate-name $CERT_NAME_IN_KEY_VAULT \
    --vault-uri $VAULTURI
az spring app custom-domain bind \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --domain-name $DOMAIN_NAME \
    --certificate $CERT_NAME_IN_AZURE_SPRING_APPS \
    --app $APPNAME

إنشاء موارد الشبكة

سينضم Azure Application Gateway الذي سيتم إنشاؤه إلى نفس الشبكة الافتراضية مثل - أو الشبكة الافتراضية النظيرة إلى - مثيل خدمة Azure Spring Apps. قم أولاً بإنشاء شبكة فرعية جديدة لـ Application Gateway في الشبكة الافتراضية باستخدام az network vnet subnet create، وكذلك قم بإنشاء عنوان IP عام كواجهة أمامية لـ Application Gateway باستخدام az network public-ip create.

export APPLICATION_GATEWAY_PUBLIC_IP_NAME='app-gw-public-ip'
az network vnet subnet create \
    --name $APPLICATION_GATEWAY_SUBNET_NAME \
    --resource-group $RESOURCE_GROUP \
    --vnet-name $VIRTUAL_NETWORK_NAME \
    --address-prefix $APPLICATION_GATEWAY_SUBNET_CIDR
az network public-ip create \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --allocation-method Static \
    --sku Standard

إنشاء هوية مدارة لبوابة التطبيق

ستحتاج Application Gateway إلى أن تكون قادرة على الوصول إلى Key Vault لقراءة الشهادة. للقيام بذلك، سيستخدم هوية مدارة معينة من قبل المستخدم. إنشاء الهوية المدارة باستخدام الأمر التالي:

export APPGW_IDENTITY_NAME='name-for-appgw-managed-identity'
az identity create \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME

ثم قم بإحضار objectId للهوية المدارة حيث سيتم استخدامها لاحقا لمنح حقوق الوصول إلى الشهادة في Key Vault:

export APPGW_IDENTITY_CLIENTID=$(az identity show \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME \
    --query clientId \
    --output tsv)
export APPGW_IDENTITY_OID=$(az ad sp show \
    --id $APPGW_IDENTITY_CLIENTID \
    --query objectId \
    --output tsv)

قم بتعيين النهج على Key Vault

تكوين Key Vault باستخدام الأمر التالي بحيث يسمح للهوية المدارة لبوابة التطبيق بالوصول إلى الشهادة المخزنة في Key Vault:

az keyvault set-policy \
    --name $KV_NAME \
    --resource-group $KV_RG \
    --object-id $APPGW_IDENTITY_OID \
    --secret-permissions get list \
    --certificate-permissions get list

إنشاء بوابة التطبيق

قم بإنشاء بوابة تطبيق باستخدام az network application-gateway create، وحدد اسم المجال المؤهل بالكامل الخاص بالتطبيق (FQDN) كخوادم في تجمع الواجهة الخلفية. تأكد من استخدام الهوية المدارة المعينة من قبل المستخدم والإشارة إلى الشهادة في Key Vault باستخدام المعرف السري للشهادة. ثم قم بتحديث إعداد HTTP باستخدام az network application-gateway http-settings update لاستخدام اسم المضيف العام.

export APPGW_NAME='name-for-application-gateway'

export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
    --name $CERT_NAME_IN_KEY_VAULT \
    --vault-name $KV_NAME \
    --query sid \
    --output tsv)

az network application-gateway create \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --capacity 2 \
    --sku Standard_v2 \
    --frontend-port 443 \
    --http-settings-cookie-based-affinity Disabled \
    --http-settings-port 443 \
    --http-settings-protocol Https \
    --public-ip-address $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --vnet-name $VIRTUAL_NETWORK_NAME \
    --subnet $APPLICATION_GATEWAY_SUBNET_NAME \
    --servers $SPRING_APP_PRIVATE_FQDN \
    --key-vault-secret-id $KEYVAULT_SECRET_ID_FOR_CERT \
    --identity $APPGW_IDENTITY_NAME

قد يستغرق Azure ما يصل إلى 30 دقيقة لإنشاء بوابة التطبيق.

تحديث إعدادات HTTP لاستخدام اسم المجال مقابل الوجهة الخلفية

قم بتحديث إعدادات HTTP لاستخدام اسم المجال العام كاسم مضيف بدلاً من المجال اللاحق بـ ".private.azuremicroservices.io" لإرسال نسبة استخدام الشبكة إلى Azure Spring Apps باستخدامه.

az network application-gateway http-settings update \
    --resource-group $RESOURCE_GROUP \
    --gateway-name $APPGW_NAME \
    --host-name-from-backend-pool false \
    --host-name $DOMAIN_NAME \
    --name appGatewayBackendHttpSettings

فحص توزيع Application Gateway

بعد إنشائه، تحقق من سلامة الواجهة الخلفية باستخدام الأمر التالي. يتيح لك إخراج هذا الأمر تحديد ما إذا كانت Application Gateway تصل إلى تطبيقك من خلال FQDN الخاص.

az network application-gateway show-backend-health \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP

يشير الإخراج إلى الحالة الصحية لمجموعة الواجهة الخلفية، كما هو موضح في المثال التالي:

{
  "backendAddressPools": [
    {
      "backendHttpSettingsCollection": [
        {
          "servers": [
            {
              "address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
              "health": "Healthy",
              "healthProbeLog": "Success. Received 200 status code",
              "ipConfiguration": null
            }
          ]
        }
      ]
    }
  ]
}

قم بتكوين DNS والوصول إلى التطبيق

قم بتكوين DNS العام للإشارة إلى Application Gateway باستخدام CNAME أو سجل A. يمكنك العثور على العنوان العام لـ Application Gateway باستخدام الأمر التالي:

az network public-ip show \
    --resource-group $RESOURCE_GROUP \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --query [ipAddress] \
    --output tsv

يمكنك الآن الوصول إلى التطبيق باستخدام اسم المجال العام.

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