Azure Container Apps 環境 (プレビュー) でプライベート エンドポイントを使用する
この記事では、プライベート エンドポイントを使用して、パブリック インターネットに公開せずに Azure Container Apps に安全にアクセスする方法について説明します。
プライベート エンドポイントでは、仮想ネットワーク (VNet) のプライベート IP アドレスが使用されます。 このエンドポイントは、Azure Private Link を使用するサービスにプライベートかつ安全に接続します。
Azure Container Apps のプライベート エンドポイントでは、インバウンドの HTTP トラフィックのみがサポートされています。 TCP トラフィックはサポートされていません。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。
- 持っていない場合は、無料で作成できます。
コンテナー アプリを作成する
最初に Azure portal にサインインします。
上部の検索バーで「コンテナー アプリ」を検索します。
検索結果でコンテナー アプリを選択します。
[作成] ボタンを選択します。
[基本] タブの [コンテナー アプリの作成] ページで、次の値を入力します。
設定 アクション サブスクリプション Azure サブスクリプションを選択します。 Resource group [新規作成] を選択し、「my-container-apps」と入力します。 コンテナー アプリ名 「my-container-app」と入力します。 デプロイ ソース [コンテナー イメージ] を選択します。 リージョン [米国中部] を選択します。 [Container Apps 環境の作成] フィールドで、[新規作成] リンクを選択します。
[基本] タブの [Container Apps 環境の作成] タブで、次の値を入力します。
設定 値 環境名 「my-environment」と入力します。 ゾーン冗長性 [無効] を選択します [ネットワーク] タブを選択して仮想ネットワーク (VNet) を作成します。 既定では、パブリック ネットワーク アクセスが有効になっており、プライベート エンドポイントは無効になっています。
パブリック ネットワーク アクセスを無効にする
[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 ゾーン] に設定します。
[作成] を選択します
[基本] タブの [コンテナー アプリの作成] ページで、[次へ : コンテナー]> を選択します。
[コンテナー] タブの [コンテナー アプリの作成] ページで、[クイックスタート イメージを使用する] を選択します。
ページの下部にある [レビューと作成] を選択します。
エラーが見つからなかった場合は、 [作成] ボタンが有効になります。
エラーが発生した場合は、エラーが含まれているタブに赤い点が表示されます。 適切なタブに移動します。エラーを含むフィールドは赤で強調表示されます。 すべてのエラーを修正したら、 [確認と作成] をもう一度選択します。
[作成] を選択します
"デプロイが進行中です" というメッセージを含むページが表示されます。 デプロイが正常に完了すると、"デプロイが完了しました" というメッセージが表示されます。
コンテナー アプリ エンドポイントを参照すると、コンテナー アプリ環境でパブリック アクセスが無効になっているため、
ERR_CONNECTION_CLOSED
が表示されます。 代わりに、プライベート エンドポイントを使用してコンテナー アプリにアクセスします。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。
- 持っていない場合は、無料で作成できます。
最新バージョンの Azure CLI。 最新バージョンを実行していることを確認するには、次のコマンドを実行します。
az upgrade
Azure CLI 用の Azure Container Apps 拡張機能の最新バージョン。 最新バージョンを実行していることを確認するには、次のコマンドを実行します。
az extension add --name containerapp --upgrade --allow-preview true
Note
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-custom-vnet"
SUBNET_NAME="my-custom-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 Container Apps 環境では、コンテナー アプリのグループを囲むセキュリティ保護された境界が作成されます。 同じ環境にデプロイされた Container Apps は、同じ仮想ネットワークにデプロイされ、同じ Log Analytics ワークスペースにログを書き込みます。
コンテナー アプリ環境に関連付ける Azure 仮想ネットワーク (VNet) を作成します。 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 を取得します。 これを使用してプライベート エンドポイントを作成します。
SUBNET_ID=$(az network vnet subnet show \ --resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --query "id" \ --output tsv)
環境の作成
前の手順でデプロイした VNet を使用して Container Apps 環境を作成します。 プライベート エンドポイントは、新しい環境向けの既定の種類であるワークロード プロファイル環境でのみサポートされています。
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
環境 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] を選択します。 Image [Windows Server 2022 Datacenter: Azure Edition - x64 Gen2] を選びます。 ユーザー名 「azureuser」と入力します。 Password パスワードを入力します。 パスワードの確認 パスワードをもう一度入力します。 パブリック受信ポート [なし] を選択します。 [ネットワーク] タブで、次の値を入力します。
設定 アクション 仮想ネットワーク my-private-endpoint-vnet を選択します。 Subnet 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 文字の長さにする必要があります
- 次のうちの 3 つを含める必要があります: 1 つの小文字、1 つの大文字、1 つの数字、および 1 つの特殊文字。
接続をテストする
最初に 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 インスタンスと関連するすべてのサービスが削除されます。 また、Container Apps サービスによって自動的に作成され、カスタム ネットワーク コンポーネントを含むリソース グループも削除されます。
注意事項
次のコマンドを実行すると、指定されたリソース グループとそれに含まれるすべてのリソースが削除されます。 指定したリソース グループにこのガイドの範囲外のリソースが存在する場合、それらも削除されます。
az group delete --name $RESOURCE_GROUP