Azure CLI を使用してファイアウォールを使って送信トラフィックを制限する
Note
Azure HDInsight on AKS は 2025 年 1 月 31 日に廃止されます。 2025 年 1 月 31 日より前に、ワークロードを Microsoft Fabric または同等の Azure 製品に移行することで、ワークロードの突然の終了を回避する必要があります。 サブスクリプション上に残っているクラスターは停止され、ホストから削除されることになります。
提供終了日までは基本サポートのみが利用できます。
重要
現在、この機能はプレビュー段階にあります。 ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用されるその他の法律条項については、「Microsoft Azure プレビューの追加の使用条件」に記載されています。 この特定のプレビューについては、「Microsoft HDInsight on AKS のプレビュー情報」を参照してください。 質問や機能の提案については、詳細を記載した要求を AskHDInsight で送信してください。また、その他の更新情報については、Azure HDInsight コミュニティのフォローをお願いいたします。
企業が独自の仮想ネットワークを使用してクラスターをデプロイする場合、仮想ネットワークのトラフィックをセキュリティで保護することが重要になります。 この記事では、Azure CLI を使用して HDInsight on AKS クラスターからの Azure Firewall 経由の送信トラフィックをセキュリティで保護する手順を説明します。
次の図は、この記事で使用されている、エンタープライズ シナリオをシミュレートする例を示しています。
この記事が示す例は、Azure Could Shell を使用しています。
変数を定義する
以下をコピーして Azure Cloud Shell で実行し、変数の値を設定します。
PREFIX="hdiaks-egress"
RG="${PREFIX}-rg"
LOC="eastus"
HDIAKS_CLUSTER_POOL=${PREFIX}
VNET_NAME="${PREFIX}-vnet"
HDIAKS_SUBNET_NAME="${PREFIX}-subnet"
# DO NOT CHANGE FWSUBNET_NAME - This is currently a requirement for Azure Firewall.
FWSUBNET_NAME="AzureFirewallSubnet"
FWNAME="${PREFIX}-fw"
FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
FWIPCONFIG_NAME="${PREFIX}-fwconfig"
FWROUTE_NAME="${PREFIX}-fwrn"
FWROUTE_NAME_INTERNET="${PREFIX}-fwinternet"
仮想ネットワークとサブネットを作成する
az group create コマンドを使用して、リソース グループを作成します。
az group create --name $RG --location $LOC
仮想ネットワークと 2 つのサブネットを作成します。
HDInsight on AKS クラスター プール用サブネットを備えた仮想ネットワーク
az network vnet create \ --resource-group $RG \ --name $VNET_NAME \ --location $LOC \ --address-prefixes 10.0.0.0/8 \ --subnet-name $HDIAKS_SUBNET_NAME \ --subnet-prefix 10.1.0.0/16
Azure Firewall のサブネット。
az network vnet subnet create \ --resource-group $RG \ --vnet-name $VNET_NAME \ --name $FWSUBNET_NAME \ --address-prefix 10.2.0.0/16
重要
- サブネット
HDIAKS_SUBNET_NAME
で NSG を追加する場合は、特定の送信規則と受信規則を手動で追加する必要があります。 NSG を使用してトラフィックを制限する手順に従います。 - 既定では、ルート テーブルはサブネットに関連付けられません。 必要に応じて、ユーザーはルート テーブルを作成し、それをクラスター プールに関連付ける必要があります。
- サブネット
Azure portal を使用して HDInsight on AKS クラスター プールを作成する
クラスター プールを作成します。
ルート テーブルを作成します。
ルート テーブルを作成し、クラスター プールに関連付けます。 詳細については、「ルート テーブルの作成」を参照してください。
クラスター プールの背後に作成された AKS クラスターの詳細を取得する
手順に従って AKS クラスター情報を取得します。これは、後の手順で役立ちます。
AKS_MANAGED_RG=$(az network vnet subnet show --name $HDIAKS_SUBNET_NAME --vnet-name $VNET_NAME --resource-group $RG --query routeTable.resourceGroup -o tsv)
AKS_ID=$(az group show --name $AKS_MANAGED_RG --query managedBy -o tsv)
HDIAKS_MANAGED_RG=$(az resource show --ids $AKS_ID --query "resourceGroup" -o tsv)
API_SERVER=$(az aks show --name $HDIAKS_CLUSTER_POOL --resource-group $HDIAKS_MANAGED_RG --query fqdn -o tsv)
ファイアウォールを作成する
Standard SKU パブリック IP アドレスを作成します。 このリソースは、Azure Firewall フロントエンド アドレスとして使用されます。
az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
Azure Firewall プレビュー CLI 拡張機能を登録して、Azure ファイアウォールを作成します。
az extension add --name azure-firewall
Azure ファイアウォールを作成し、DNS プロキシを有効にします。
az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
Azure Firewall IP 構成を作成します。
az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
IP 構成コマンドが正常に完了したら、後で構成できるようにファイアウォールのフロントエンド IP アドレスを保存します。
FWPUBLIC_IP=$(az network public-ip show -g $RG -n $FWPUBLICIP_NAME --query "ipAddress" -o tsv) FWPRIVATE_IP=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].privateIPAddress" -o tsv)
ファイアウォールにネットワーク ルールとアプリケーション ルールを追加する
ネットワーク ルールを作成します。
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100 az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000 az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiserver' --protocols 'TCP' --source-addresses '*' --destination-fqdns "$API_SERVER" --destination-ports 443 #Add below step, in case you are integrating log analytics workspace az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'azuremonitor' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureMonitor" --destination-ports 443
アプリケーション ルールを作成します。
az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'aks-fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100 az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'acr' --source-addresses '*' --protocols 'https=443' --target-fqdns "hiloprodrpacr00.azurecr.io" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'blob' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.blob.core.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'servicebus' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.servicebus.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'gsm' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.table.core.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'gcsmonitoring' --source-addresses '*' --protocols 'https=443' --target-fqdns "gcs.prod.monitoring.core.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'graph' --source-addresses '*' --protocols 'https=443' --target-fqdns "graph.microsoft.com"
ルート テーブルにルートを作成して、トラフィックをファイアウォールにリダイレクトする
HDInsight on AKS クラスター プールに関連付けるルート テーブルを作成します。 詳細については、ルート テーブルの作成コマンドに関するページを参照してください。
クラスターの作成
前の手順では、ネットワーク トラフィックをファイアウォールにルーティングしました。
次の手順では、クラスターの種類それぞれに必要な特定のネットワーク ルールとアプリケーション ルールについて詳しく説明します。 Apache Flink、Trino、Apache Spark のクラスターを作成するためのクラスター作成ページを、必要に応じて参照することができます。
重要
クラスターを作成する前に、次のクラスター固有のルールを実行してトラフィックを許可してください。
Trino
Trino クラスターの次のネットワーク ルールとアプリケーション ルールを追加します。
az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net" az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'mysql' --source-addresses '*' --protocols 'mssql=1433' --target-fqdns "*.database.windows.net"
要件に従って、次の構文の
Sql.<Region>
をご自身のリージョンに変更します。 例:Sql.EastUS
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'mysql' --protocols 'TCP' --source-addresses '*' --destination-addresses Sql.<Region> --destination-ports "11000-11999"
Apache Flink
Apache Flink クラスターの次のアプリケーション ルールを追加します。
az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
Apache Spark
Spark クラスターの次のネットワーク ルールとアプリケーション ルールを追加します。
要件に従って、次の構文の
Storage.<Region>
をご自身のリージョンに変更します。 例:Storage.EastUS
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'smb' --protocols 'TCP' --source-addresses '*' --destination-addresses "Storage.<Region>" --destination-ports 445 az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
要件に従って、次の構文の
Sql.<Region>
をご自身のリージョンに変更します。 例:Sql.EastUS
az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'mysql' --protocols 'TCP' --source-addresses '*' --destination-addresses "Sql.<Region>" --destination-ports '11000-11999' az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'mysql' --source-addresses '*' --protocols 'mssql=1433' --target-fqdns "*.database.windows.net"
対称的なルーティングの問題を解決する
次の手順を使用すると、クラスターごとにロード バランサー イングレス サービスを要求し、ネットワーク応答トラフィックがファイアウォールに流れないようにすることができます。 クライアント IP への応答トラフィックがインターネットにリダイレクトされるようにルート テーブルにルートを追加します。これによりクラスターに直接到達できます。
az network route-table route create -g $AKS_MANAGED_RG --name clientip --route-table-name $ROUTE_TABLE_NAME --address-prefix {Client_IPs} --next-hop-type Internet
NSG を構成した後、クラスターにアクセスできない場合は、NSG を使ってトラフィックを制限するの記事に従ってトラフィックを許可します。
ヒント
より多くのトラフィックを許可する必要がある場合は、ファイアウォールを通じて構成できます。
デバッグする方法
クラスターが予期しない動作をする場合は、ファイアウォール ログを確認して、どのトラフィックがブロックされているかを見つけることができます。