この記事では、プライベート エンドポイントを使用して、パブリック インターネットに公開せずに Azure Container Apps に安全にアクセスする方法について説明します。
プライベート エンドポイントでは、仮想ネットワーク (VNet) のプライベート IP アドレスが使用されます。 このエンドポイントは、Azure Private Link を使用するサービスにプライベートかつ安全に接続します。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。
- 持っていない場合は、無料で作成できます。
コンテナー アプリを作成する
最初に Azure portal にサインインします。
上部の検索バーで「コンテナー アプリ」を検索します。
検索結果でコンテナー アプリを選択します。
[作成] ボタンを選択します。
[ コンテナー アプリの作成 ] ページの [ 基本 ] タブで、次の値を入力します。
設定 アクション サブスクリプション Azure サブスクリプションを選択します。 リソースグループ [ 新しいリソース グループの作成 ] リンクを選択し、 my-container-apps を入力します。 コンテナー アプリ名 「my-container-app」と入力します。 デプロイ ソース [コンテナー イメージ] を選択します。 リージョン [米国中部] を選択します。 [ コンテナー アプリ環境の作成 ] フィールドで、[ 新しい環境の作成 ] リンクを選択します。
[ コンテナー アプリ環境の作成 ] ページの [ 基本 ] タブで、次の値を入力します。
設定 値 環境名 「my-environment」と入力します。 ゾーン冗長性 [無効] を選択します [ネットワーク] タブを選択します。
[パブリック ネットワーク アクセス] を [無効] に設定します。パブリック インターネットからの着信トラフィックをすべてブロックします。既定では、パブリック ネットワーク アクセスが有効になっています。つまり、プライベート エンドポイントは無効になります。
[Use your own virtual network] (自分の仮想ネットワークを使用する) を [いいえ] に設定します。 既存の VNet を使用できますが、プライベート エンドポイントはワークロード プロファイル環境でのみサポートされており、最小 CIDR 範囲が
/27
以上のサブネットが必要です。 サブネットのサイズ設定の詳細については、「ネットワーク アーキテクチャの概要」を参照してください。[プライベート エンドポイントを有効にする] を [いいえ] に設定します。
[プライベート エンドポイント名] を my-private-endpoint に設定します。
[プライベート エンドポイント仮想ネットワーク] フィールドで、[新規作成] リンクを選択します。
[仮想ネットワークの作成] ページで、[仮想ネットワーク] を my-private-endpoint-vnet に設定します。 [OK] を選択します。
[プライベート エンドポイント仮想ネットワーク サブネット] フィールドで、[新規作成] リンクを選択します。
[サブネットの作成] ページで、[サブネット名] を my-private-endpoint-vnet-subnet に設定します。 [OK] を選択します。
[DNS] を [Azure プライベート DNS ゾーン] に設定します。
[作成] を選択します
[ コンテナー アプリの作成 ] ページで、[ コンテナー ] タブを選択します。
[クイックスタート イメージを使用する] を選択します。
コンテナー アプリをデプロイする
ページの下部にある [レビューと作成] を選択します。
エラーが見つからなかった場合は、 [作成] ボタンが有効になります。
エラーが発生した場合は、エラーが含まれているタブに赤い点が表示されます。 適切なタブに移動します。エラーを含むフィールドは赤で強調表示されます。 すべてのエラーを修正したら、 [確認と作成] をもう一度選択します。
[作成] を選択します
"デプロイが進行中です" というメッセージを含むページが表示されます。 デプロイが正常に完了すると、"デプロイが完了しました" というメッセージが表示されます。
デプロイを検証する
[リソースに移動] を選択して、新しいコンテナー アプリを表示します。
アプリケーションを表示するには、 [アプリケーションの URL] の横にあるリンクを選択します。
コンテナー アプリ エンドポイントを参照すると、次のメッセージが表示されます。
The public network access on this managed environment is disabled. To connect to this managed environment, please use the Private Endpoint from inside your virtual network. To learn more https://aka.ms/PrivateEndpointTroubleshooting.
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。
- 持っていない場合は、無料で作成できます。
最新バージョンの Azure CLI。 最新バージョンを実行していることを確認するには、次のコマンドを実行します。
az upgrade
Azure CLI 用の Azure Container Apps 拡張機能の最新バージョン。 最新バージョンを実行していることを確認するには、次のコマンドを実行します。
az extension add --name containerapp --upgrade --allow-preview true
注
2024 年 5 月以降、Azure CLI 拡張機能では、既定でプレビュー機能が有効になりません。 Container Apps のプレビュー機能にアクセスするには、
--allow-preview true
を使用して Container Apps 拡張機能をインストールします。
前提条件とセットアップの詳細については、「クイック スタート: containerapp up を使用して最初のコンテナー アプリをデプロイする」を参照してください。
環境変数の設定
以下の環境変数を設定します。
RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
ENVIRONMENT_NAME="my-environment"
CONTAINERAPP_NAME="my-container-app"
VNET_NAME="my-vnet"
SUBNET_NAME="my-subnet"
PRIVATE_ENDPOINT="my-private-endpoint"
PRIVATE_ENDPOINT_CONNECTION="my-private-endpoint-connection"
PRIVATE_DNS_ZONE="privatelink.${LOCATION}.azurecontainerapps.io"
DNS_LINK="my-dns-link"
Azure リソース グループの作成
コンテナー アプリのデプロイに関連するサービスを整理するためのリソース グループを作成します。
az group create \
--name $RESOURCE_GROUP \
--___location $LOCATION
仮想ネットワークの作成
Azure 仮想ネットワーク (VNet) を作成します。 既存の VNet を使用できますが、プライベート エンドポイントはワークロード プロファイル環境でのみサポートされており、最小 CIDR 範囲が
/27
以上のサブネットが必要です。 サブネットのサイズ設定の詳細については、「ネットワーク アーキテクチャの概要」を参照してください。az network vnet create \ --resource-group $RESOURCE_GROUP \ --name $VNET_NAME \ --___location $LOCATION \ --address-prefix 10.0.0.0/16
VNet に関連付け、プライベート エンドポイントを含むサブネットを作成します。
az network vnet subnet create \ --resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --address-prefixes 10.0.0.0/21
サブネット ID を取得します。 この ID を使用して、プライベート エンドポイントを作成します。
SUBNET_ID=$(az network vnet subnet show \ --resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --query "id" \ --output tsv)
環境の作成
Container Apps 環境を作成します。 プライベート エンドポイントは、ワークロード プロファイル環境でのみサポートされます。これは、新しい環境の既定の種類です。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --___location $LOCATION
環境 ID を取得します。 この ID を使用して環境を構成します。
ENVIRONMENT_ID=$(az containerapp env show \ --resource-group $RESOURCE_GROUP \ --name $ENVIRONMENT_NAME \ --query "id" \ --output tsv)
環境のパブリック ネットワーク アクセスを無効にします。 プライベート エンドポイントを有効にするには、この設定が必要です。
az containerapp env update \ --id $ENVIRONMENT_ID \ --public-network-access Disabled
プライベート エンドポイントの作成
以前に作成した環境とサブネットにプライベート エンドポイントを作成します。
az network private-endpoint create \
--resource-group $RESOURCE_GROUP \
--___location $LOCATION \
--name $PRIVATE_ENDPOINT \
--subnet $SUBNET_ID \
--private-connection-resource-id $ENVIRONMENT_ID \
--connection-name $PRIVATE_ENDPOINT_CONNECTION \
--group-id managedEnvironments
プライベート DNS ゾーンを構成する
プライベート エンドポイントの IP アドレスを取得します。 このアドレスを使用して、プライベート DNS ゾーンに DNS レコードを追加します。
PRIVATE_ENDPOINT_IP_ADDRESS=$(az network private-endpoint show \ --name $PRIVATE_ENDPOINT \ --resource-group $RESOURCE_GROUP \ --query 'customDnsConfigs[0].ipAddresses[0]' \ --output tsv)
環境の既定のドメインを取得します。 このドメインを使用して、プライベート DNS ゾーンに DNS レコードを追加します。
DNS_RECORD_NAME=$(az containerapp env show \ --id $ENVIRONMENT_ID \ --query 'properties.defaultDomain' \ --output tsv | sed 's/\..*//')
プライベート DNS ゾーンを作成します。
az network private-dns zone create \ --resource-group $RESOURCE_GROUP \ --name $PRIVATE_DNS_ZONE
VNet とプライベート DNS ゾーンの間のリンクを作成します。
az network private-dns link vnet create \ --resource-group $RESOURCE_GROUP \ --zone-name $PRIVATE_DNS_ZONE \ --name $DNS_LINK \ --virtual-network $VNET_NAME \ --registration-enabled false
プライベート DNS ゾーンにプライベート エンドポイントのレコードを追加します。
az network private-dns record-set a add-record \ --resource-group $RESOURCE_GROUP \ --zone-name $PRIVATE_DNS_ZONE \ --record-set-name $DNS_RECORD_NAME \ --ipv4-address $PRIVATE_ENDPOINT_IP_ADDRESS
コンテナー アプリをデプロイする
お使いの環境にコンテナー アプリをデプロイします。 このコンテナー アプリは単にクイックスタート イメージを使用します。
コンテナー アプリ エンドポイントを参照すると、コンテナー アプリ環境でパブリック アクセスが無効になっているため、ERR_CONNECTION_CLOSED
が表示されます。 代わりに、プライベート エンドポイントを使用してコンテナー アプリにアクセスします。
az containerapp up \
--name $CONTAINERAPP_NAME \
--resource-group $RESOURCE_GROUP \
--___location $LOCATION \
--environment $ENVIRONMENT_NAME \
--image mcr.microsoft.com/k8se/quickstart:latest \
--target-port 80 \
--ingress external \
--query properties.configuration.ingress.fqdn
プライベート エンドポイント接続を検証する
このセクションでは、プライベート エンドポイントを使用して定義したコンテナー アプリにアクセスできるように、VNet に関連付けられた仮想マシンを作成します。
仮想マシン (VM) の作成
最初に Azure portal にサインインします。
上部の検索バーで「仮想マシン」を検索します。
検索結果から [仮想マシン] を選択します。
[作成] を選択します
[仮想マシンの作成] ページの [基本] タブで、次の値を入力します。
設定 アクション サブスクリプション Azure サブスクリプションを選択します。 リソースグループ [my-container-apps] を選択します。 仮想マシン名 「azurevm」と入力します。 リージョン [米国中部] を選択します。 可用性のオプション [インフラストラクチャ冗長は必要ありません] を選択します。 セキュリティの種類 [Standard] を選択します。 画像 [Windows Server 2022 Datacenter: Azure Edition - x64 Gen2] を選びます。 ユーザー名 「azureuser」と入力します。 パスワード パスワードを入力します。 パスワードの確認 パスワードをもう一度入力します。 パブリック受信ポート [なし] を選択します。 [ネットワーク] タブで、次の値を入力します。
設定 アクション 仮想ネットワーク my-private-endpoint-vnet を選択します。 サブネット my-private-endpoint-vnet-subnet (10.0.0.0/23) を選択します。 パブリック IP [なし] を選択します。 NIC ネットワーク セキュリティ グループ [Advanced] \(詳細設定) を選択します。 [確認および作成] を選択します。
[作成] を選択します
環境変数の設定
以下の環境変数を設定します。
VM_NAME="azurevm"
VM_ADMIN_USERNAME="azureuser"
仮想マシン (VM) の作成
次のコマンドを実行します。
az vm create \
--resource-group $RESOURCE_GROUP \
--name $VM_NAME \
--image Win2022Datacenter \
--public-ip-address "" \
--vnet-name $VNET_NAME \
--subnet $SUBNET_NAME \
--admin-username $VM_ADMIN_USERNAME
このコマンドを実行すると、VM の管理者パスワードの入力を求められます。
管理者のユーザー名は 1 から 20 文字にする必要があります。
管理者パスワードには次のような要件があります。
- 12 から 123 文字の長さにする必要があります
- 小文字 1 文字、大文字 1 文字、数字 1 文字、特殊文字 1 文字の 3 文字を使用する必要があります。
接続をテストする
最初に Azure portal にサインインします。
上部の検索バーで作成した VM を検索し、検索結果から選択します。
VM の [概要] ページで [接続] を選択した後、[Bastion で接続] を選択します。
[Bastion] ページで、[Bastion のデプロイ] を選択します。
VM を作成したときに使用したユーザー名とパスワードにユーザー名と VM パスワードを設定します。
[接続] を選択します。
接続後、VM で PowerShell を実行します。
PowerShell で次のコマンドを実行します。 <プレースホルダー> は実際の値に置き換えてください。
nslookup <CONTAINER_APP_ENDPOINT>
出力は次の例のようになり、<PLACEHOLDERS> は使用する値に置き換えられます。
Server: UnKnown Address: 168.63.129.16 Non-authoritative answer: Name: <ENVIRONMENT_DEFAULT_DOMAIN>.privatelink.<LOCATION>.azurecontainerapps.io Address: 10.0.0.4 Aliases: <CONTAINER_APP_ENDPOINT>
VM でブラウザーを開きます。
コンテナー アプリ エンドポイントにブラウザーでアクセスします。 クイックスタート コンテナー アプリ イメージの出力が表示されます。
リソースをクリーンアップする
このアプリケーションを引き続き使用しない場合は、my-container-apps リソース グループ を削除できます。 このアクションにより、Azure Container Apps インスタンスと、関連付けられているすべてのサービスが削除されます。
注意事項
次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 このガイドの範囲外のリソースが指定されたリソース グループに存在する場合は、それらのリソースも削除されます。
az group delete --name $RESOURCE_GROUP