Mengekspos aplikasi dengan TLS ujung ke ujung dalam jaringan virtual

Catatan

Azure Spring Apps adalah nama baru untuk layanan Azure Spring Cloud. Meskipun layanan memiliki nama baru, Anda akan melihat nama lama di beberapa tempat untuk sementara saat kami berupaya memperbarui aset seperti cuplikan layar, video, dan diagram.

Artikel ini berlaku untuk: ✔️ Basic/Standard ✔️ Enterprise

Artikel ini akan menjelaskan cara mengekspos aplikasi ke internet menggunakan Application Gateway. Saat instans layanan Azure Spring Apps disebarkan di jaringan virtual Anda, aplikasi pada instans layanan hanya dapat diakses di jaringan privat. Untuk membuat aplikasi dapat diakses di Internet, Anda perlu berintegrasi dengan Azure Application Gateway.

Prasyarat

Mengonfigurasikan Application Gateway untuk Azure Spring Apps

Kami menyarankan agar nama domain, seperti yang terlihat oleh browser, sama dengan nama host yang digunakan Application Gateway untuk mengarahkan lalu lintas ke bagian belakang Azure Spring Apps. Rekomendasi ini memberikan pengalaman terbaik saat menggunakan Application Gateway untuk mengekspos aplikasi yang dihosting di Azure Spring Apps dan berada di jaringan virtual. Jika domain yang diekspos oleh Application Gateway berbeda dari domain yang diterima oleh Azure Spring Apps, cookie dan URL pengalihan yang dihasilkan (misalnya) dapat rusak. Untuk informasi selengkapnya, lihat Pelestarian nama host.

Untuk mengonfigurasikan Application Gateway di depan Azure Spring Apps, gunakan langkah-langkah berikut.

  1. Ikuti instruksi di Menyebarkan Azure Spring Apps di jaringan virtual.
  2. Ikuti instruksi di Mengakses aplikasi Anda di jaringan privat.
  3. Dapatkan sertifikat untuk domain pilihan Anda dan simpan di Key Vault. Untuk informasi selengkapnya, lihat Tutorial: Mengimpor sertifikat di Azure Key Vault.
  4. Konfigurasikan domain kustom dan sertifikat yang sesuai dari Key Vault pada aplikasi yang diterapkan ke Azure Spring Apps. Untuk informasi selengkapnya, lihat Tutorial: Memetakan domain kustom yang sudah ada ke Azure Spring Apps.
  5. Sebarkan Application Gateway dalam jaringan virtual yang dikonfigurasi sesuai dengan daftar berikut:
    • Gunakan Azure Spring Apps di kumpulan backend, direferensikan oleh domain yang diakhiri dengan private.azuremicroservices.io.
    • Sertakan pendengar HTTPS menggunakan sertifikat yang sama dari Key Vault.
    • Konfigurasikan jaringan virtual dengan pengaturan HTTP yang menggunakan nama domain kustom yang dikonfigurasikan di Azure Spring Apps sebagai ganti dari domain yang diakhiri dengan private.azuremicroservices.io.
  6. Konfigurasikan DNS publik Anda untuk menunjuk ke Application Gateway.

Tentukan variabel

Berikutnya, gunakan perintah berikut untuk menentukan variabel untuk grup sumber daya dan jaringan virtual yang Anda buat sebagaimana diarahkan dalam Menyebarkan Azure Spring Apps di jaringan virtual. Sesuaikan nilai berdasarkan lingkungan Anda yang sebenarnya. Saat Anda menentukan SPRING_APP_PRIVATE_FQDN, hapus https:// dari 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'

Masuk ke Azure

Gunakan perintah berikut untuk masuk ke Azure CLI dan pilih langganan aktif Anda.

az login
az account set --subscription $SUBSCRIPTION

Memperoleh sertifikat

Untuk penyebaran produksi, kemungkinan besar Anda akan menggunakan sertifikat yang ditandatangani publik. Dalam kasus ini, impor sertifikat di Azure Key Vault. Untuk informasi selengkapnya, lihat Tutorial: Mengimpor sertifikat di Azure Key Vault. Pastikan sertifikat mencakup seluruh rantai sertifikat.

Konfigurasikan nama domain publik di Azure Spring Apps

Lalu lintas akan memasuki aplikasi yang disebarkan di Azure Spring Apps menggunakan nama domain publik. Untuk mengonfigurasikan aplikasi Anda untuk mendengarkan nama host ini dan melakukannya melalui HTTPS, gunakan perintah berikut untuk menambahkan domain kustom ke aplikasi Anda:

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

Membuat sumber daya jaringan

Azure Application Gateway yang akan dibuat akan bergabung dengan jaringan virtual yang sama seperti--atau jaringan virtual yang di-peering ke--contoh layanan Azure Spring Apps. Pertama-tama, buat subnet baru untuk Application Gateway di jaringan virtual menggunakan az network vnet subnet create, dan juga buat alamat IP Publik sebagai Frontend Application Gateway menggunakan 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

Membuat identitas terkelola untuk Application Gateway

Application Gateway akan harus dapat mengakses Key Vault untuk membaca sertifikat. Untuk melakukannya, ia akan menggunakan identitas terkelola yang ditetapkan pengguna. Buat identitas terkelola dengan menggunakan perintah berikut:

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

Kemudian ambil objectId untuk identitas terkelola karena akan digunakan nanti untuk memberikan hak untuk mengakses sertifikat di 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)

Mengatur kebijakan pada Key Vault

Konfigurasikan Key Vault menggunakan perintah berikut sehingga identitas terkelola untuk Application Gateway diizinkan untuk mengakses sertifikat yang disimpan di 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

Membuat Application Gateway

Buat gateway aplikasi menggunakan az network application-gateway create dan tentukan nama domain yang sepenuhnya memenuhi syarat (FQDN) pribadi aplikasi sebagai server di kumpulan backend. Pastikan untuk menggunakan identitas terkelola yang ditetapkan pengguna dan untuk mengarahkan ke sertifikat di Key Vault menggunakan ID Rahasia sertifikat. Kemudian, perbarui pengaturan HTTP menggunakan az network application-gateway http-settings update untuk menggunakan nama host publik.

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

Diperlukan waktu hingga 30 menit bagi Azure untuk membuat gateway aplikasi.

Memperbarui Pengaturan HTTP untuk menggunakan nama domain ke backend

Perbarui pengaturan HTTP untuk menggunakan nama domain publik sebagai nama host alih-alih domain yang diakhiri dengan ".private.azuremicroservices.io" untuk mengirim lalu lintas ke Azure Spring Apps dengan.

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

Periksa penyebaran Application Gateway

Setelah dibuat, periksa kesehatan backend dengan menggunakan perintah berikut. Output dari perintah ini memungkinkan Anda menentukan apakah application gateway mencapai aplikasi Anda melalui FQDN privatnya.

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

Output menunjukkan status sehat kumpulan backend, seperti yang ditunjukkan pada contoh berikut:

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

Mengonfigurasikan DNS dan mengakses aplikasi

Sekarang konfigurasikan DNS publik untuk menunjuk ke Application Gateway menggunakan CNAME atau A-record. Anda dapat menemukan alamat publik untuk Application Gateway dengan menggunakan perintah berikut:

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

Anda sekarang dapat mengakses aplikasi menggunakan nama domain publik.

Langkah berikutnya