Share via


Azure CLI を使用してファイアウォールを使って送信トラフィックを制限する

重要

現在、この機能はプレビュー段階にあります。 ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用されるその他の法律条項については、「Microsoft Azure プレビューの追加の使用条件」に記載されています。 この特定のプレビューについては、Azure 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"

Cloud Shell 変数を示す図。

仮想ネットワークとサブネットを作成する

  1. az group create コマンドを使用して、リソース グループを作成します。

    az group create --name $RG --location $LOC
    
  2. 仮想ネットワークと 2 つのサブネットを作成します。

    1. 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
      
    2. Azure Firewall のサブネット。

      az network vnet subnet create \
         --resource-group $RG \
         --vnet-name $VNET_NAME \
         --name $FWSUBNET_NAME \
         --address-prefix 10.2.0.0/16
      

      重要

      1. サブネット HDIAKS_SUBNET_NAME で NSG を追加する場合は、特定の送信規則と受信規則を手動で追加する必要があります。 NSG を使用してトラフィックを制限する手順に従います。
      2. 既定では、ルート テーブルはサブネットに関連付けられません。 必要に応じて、ユーザーはルート テーブルを作成し、それをクラスター プールに関連付ける必要があります。

Azure portal を使用して HDInsight on AKS クラスター プールを作成する

  1. クラスター プールを作成します。

    クラスター プールの基本タブを示すスクリーンショット。

    セキュリティ タブを示す図。

  2. ルート テーブルを作成します。

    ルート テーブルを作成し、クラスター プールに関連付けます。 詳細については、「ルート テーブルの作成」を参照してください。

クラスター プールの背後に作成された 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)

ファイアウォールを作成する

  1. Standard SKU パブリック IP アドレスを作成します。 このリソースは、Azure Firewall フロントエンド アドレスとして使用されます。

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Azure Firewall プレビュー CLI 拡張機能を登録して、Azure ファイアウォールを作成します。

       az extension add --name azure-firewall
    
  3. Azure ファイアウォールを作成し、DNS プロキシを有効にします。

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. 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
    
  5. 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)
    

ファイアウォールにネットワーク ルールとアプリケーション ルールを追加する

  1. ネットワーク ルールを作成します。

    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
    
  2. アプリケーション ルールを作成します。

    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 FlinkTrinoApache Spark のクラスターを作成するためのクラスター作成ページを、必要に応じて参照することができます。

重要

クラスターを作成する前に、次のクラスター固有のルールを実行してトラフィックを許可してください。

Trino

  1. 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"
    
  1. 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

  1. 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 を使ってトラフィックを制限するの記事に従ってトラフィックを許可します。

ヒント

より多くのトラフィックを許可する必要がある場合は、ファイアウォールを通じて構成できます。

デバッグする方法

クラスターが予期しない動作をする場合は、ファイアウォール ログを確認して、どのトラフィックがブロックされているかを見つけることができます。