Share via


Application Gateway で TLS 終端を使用してインターネットにアプリケーションを公開する

Note

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事では、App Gateway を使用してアプリケーションをインターネットに公開する方法について説明します。

Azure Spring Apps サービス インスタンスが仮想ネットワーク (VNET) にデプロイされている場合、このサービス インスタンス上のアプリケーションには、プライベート ネットワークでのみアクセスできます。 インターネットでアプリケーションにアクセスできるようにするには、Azure Application Gateway と統合する必要があります。 暗号化された受信トラフィックは、アプリケーション ゲートウェイで暗号化解除できます。また暗号化された Azure Spring Apps に渡すことによってエンドツーエンドの TLS/SSL を実現できます。 このガイドで説明されているように、開発とテストを目的として、アプリケーション ゲートウェイで SSL ターミネーションを開始することができます。 運用環境では、「仮想ネットワークでエンドツーエンド TLS を使用してアプリケーションを公開する」で説明されているように、プライベート証明書でエンドツーエンドの TLS/SSL を使用することをお勧めします。

前提条件

Azure Spring Apps 用に Application Gateway を構成する

ブラウザーに表示されるドメイン名は、Application Gateway でトラフィックを Azure Spring Apps バックエンドに転送するために使用されるホスト名と同じにすることをお勧めします。 この推奨事項に従うと、仮想ネットワークにあり、Azure Spring Apps でホストされるアプリケーションを、Application Gateway を使用して公開するときに最高のエクスペリエンスが提供されます。 Application Gateway によって公開されるドメインが、Azure Spring Apps で受け入れられるドメインと異なる場合、Cookie と生成されるリダイレクト URL などが破損する可能性があります。 詳細については、「ホスト名の保存」を参照してください。

プライベート VNET で Azure Spring Apps の前面に Application Gateway を構成するには、次の手順に従います。

  1. 仮想ネットワークに Azure Spring Apps をデプロイする」の手順に従います。
  2. プライベート ネットワーク内のアプリケーションにアクセスする」の手順に従います。
  3. 選択したドメインの証明書を取得し、Key Vault に格納します。 詳細については、「チュートリアル: Azure Key Vault に証明書をインポートする」を参照してください。
  4. Azure Spring Apps にデプロイされたアプリで、カスタム ドメインとそれに対応する Key Vault 内の証明書を構成します。 詳細については、チュートリアル: Azure Spring Apps への既存のカスタム ドメインのマップに関するページを参照してください。
  5. 次の一覧に従って構成された仮想ネットワークに Application Gateway をデプロイします。
    • 末尾に private.azuremicroservices.io が付いたドメインによって参照されるバックエンド プールで Azure Spring Apps を使用します。
    • Key Vault 内の証明書と同じ証明書を使用して HTTPS リスナーを含めます。
    • 末尾に private.azuremicroservices.io が付いたドメインではなく、Azure Spring Apps で構成されたカスタム ドメイン名を使用する HTTP 設定を使用して仮想ネットワークを構成します。
  6. アプリケーション ゲートウェイをポイントするようにパブリック DNS を構成します。

変数の定義

次に、以下のコマンドを使用して、「仮想ネットワークに Azure Spring Apps をデプロイする」の指示に従って作成したリソース グループと仮想ネットワークに対して変数を定義します。 実際の環境に基づいて、 <...> プレースホルダーを実際の値に置き換えます。 SPRING_APP_PRIVATE_FQDN を定義する際には、URI から https:// を削除します。

export SUBSCRIPTION='<subscription-id>'
export RESOURCE_GROUP='<resource-group-name>'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='<name-of-Azure-Spring-Apps-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 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_KV='<name-of-certificate-with-intermediaries-in-key-vault>'
export DOMAIN_NAME=myapp.mydomain.com

az spring app custom-domain bind \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --domain-name $DOMAIN_NAME \
    --app $APPNAME

ネットワーク リソースを作成する

作成するアプリケーション ゲートウェイは、Azure Spring Apps サービス インスタンスと同じ仮想ネットワークに参加します。 次の例に示すように、最初に、仮想ネットワーク内にアプリケーション ゲートウェイ用の新しいサブネットを作成し、さらにアプリケーション ゲートウェイのフロントエンドとしてパブリック IP アドレスを作成します。

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

アプリケーション ゲートウェイのマネージド ID を作成する

アプリケーション ゲートウェイは、証明書を読み取るために Key Vault にアクセスできる必要があります。 これを行うために、アプリケーション ゲートウェイはユーザー割り当てのマネージド ID を使用します。 詳細については、「Azure リソースのマネージド ID とは」を参照してください... プレースホルダーを置き換えて、次のコマンドを<使用してマネージド ID を作成します。>

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

次に、次のコマンドを使用して、マネージド ID の 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 を構成し、アプリケーション ゲートウェイのマネージド ID で、Key Vault に格納されている証明書にアクセスできるようにします。

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

アプリケーション ゲートウェイの作成

az network application-gateway create を使用してアプリケーション ゲートウェイを作成し、バックエンド プール内のサーバーとしてアプリケーションのプライベート完全修飾ドメイン名 (FQDN) を指定します。 必ず、ユーザー割り当てマネージド ID を使用し、証明書のシークレット ID を使用して Key Vault 内の証明書をポイントするようにします。

export APPGW_NAME='<name-for-application-gateway>'
export CERT_NAME_IN_KV='<name-of-certificate-in-key-vault>'
export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
    --name $CERT_NAME_IN_KV \
    --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 80 \
    --http-settings-protocol Http \
    --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 設定を更新する

末尾に .private.azuremicroservices.io が付いたドメインの代わりにパブリック ドメイン名をホスト名として使用するように HTTP 設定を更新して、トラフィックを 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

アプリケーション ゲートウェイのデプロイを確認する

作成後、次のコマンドを使用してバックエンドの正常性を確認します。 このコマンドの出力を使用すると、アプリケーション ゲートウェイがプライベート完全修飾ドメイン名 (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 を構成してアプリケーションにアクセスする

CNAME または A レコードを使用して、アプリケーション ゲートウェイをポイントするようにパブリック DNS を構成します。 次のコマンドを使用して、アプリケーション ゲートウェイのパブリック アドレスを見つけることができます。

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

これで、パブリック ドメイン名を使用してアプリケーションにアクセスできるようになりました。

リソースをクリーンアップする

後続の記事を引き続き実行する場合は、これらのリソースをそのまま残しておくことができます。 不要になったら、リソース グループを削除します。これにより、リソース グループ内のリソースが削除されます。 Azure CLI を使用してリソース グループを削除するには、次のコマンドを使用します。

az group delete --name $RESOURCE_GROUP

次のステップ