Share via


Usare il firewall per limitare il traffico in uscita usando l'interfaccia della riga di comando di Azure

Importante

Questa funzionalità è attualmente disponibile solo in anteprima. Le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure includono termini legali più validi applicabili alle funzionalità di Azure disponibili in versione beta, in anteprima o non ancora rilasciate nella disponibilità generale. Per informazioni su questa anteprima specifica, vedere Informazioni sull'anteprima di Azure HDInsight nel servizio Azure Kubernetes. Per domande o suggerimenti sulle funzionalità, inviare una richiesta in AskHDInsight con i dettagli e seguire microsoft per altri aggiornamenti nella community di Azure HDInsight.

Quando un'azienda vuole usare la propria rete virtuale per le distribuzioni del cluster, la protezione del traffico della rete virtuale diventa importante. Questo articolo illustra la procedura per proteggere il traffico in uscita dal cluster HDInsight nel servizio Azure Kubernetes tramite Firewall di Azure tramite l'interfaccia della riga di comando di Azure.

Il diagramma seguente illustra l'esempio usato in questo articolo per simulare uno scenario aziendale:

Diagramma che mostra il flusso di rete.

L'esempio illustrato in questo articolo usa Azure Could Shell.

Definire le variabili

Copiare ed eseguire in Azure Cloud Shell per impostare i valori di queste variabili.

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"

Diagramma che mostra le variabili di Cloud Shell.

Creare una rete virtuale e le subnet

  1. Creare un gruppo di risorse con il comando az group create.

    az group create --name $RG --location $LOC
    
  2. Creare una rete virtuale e due subnet.

    1. Rete virtuale con subnet per HDInsight nel pool di cluster del servizio Azure Kubernetes

       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. Subnet per Firewall di Azure.

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

      Importante

      1. Se si aggiunge un gruppo di sicurezza di rete nella subnet HDIAKS_SUBNET_NAME, è necessario aggiungere manualmente determinate regole in uscita e in ingresso. Seguire usare il gruppo di sicurezza di rete per limitare il traffico.
      2. Per impostazione predefinita, la tabella di route non verrà associata alla subnet. Se necessario, l'utente deve creare una tabella di route e associarla al pool di cluster.

Creare HDInsight nel pool di cluster del servizio Azure Kubernetes usando portale di Azure

  1. Creare un pool di cluster.

    Diagramma che mostra la scheda di base del pool di cluster.

    Diagramma che mostra la scheda sicurezza.

  2. Crea una tabella di routing.

    Creare una tabella di route e associarla al pool di cluster. Per altre informazioni, vedere Creare una tabella di route.

Ottenere i dettagli del cluster del servizio Azure Kubernetes creati dietro il pool di cluster

Seguire la procedura per ottenere le informazioni sul cluster del servizio Azure Kubernetes, utili nei passaggi successivi.

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)

Creare un firewall

  1. Creare una risorsa IP pubblico SKU Standard. Questa risorsa viene usata come indirizzo front-end Firewall di Azure.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Registrare l'estensione dell'interfaccia della riga di comando di anteprima Firewall di Azure per creare un Firewall di Azure.

       az extension add --name azure-firewall
    
  3. Creare un Firewall di Azure e abilitare il proxy DNS.

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. Creare una configurazione IP Firewall di Azure.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. Al termine del comando di configurazione IP, salvare l'indirizzo IP front-end del firewall per la configurazione in un secondo momento.

    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)
    

Aggiungere regole di rete e applicazione al firewall

  1. Creare le regole di rete.

    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. Creare le regole dell'applicazione.

    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"
    

Creare una route nella tabella di route per reindirizzare il traffico al firewall

Creare una tabella di route da associare a HDInsight nel pool di cluster del servizio Azure Kubernetes. Per altre informazioni, vedere Creare comandi della tabella di route.

Creare cluster

Nei passaggi precedenti è stato instradato il traffico di rete al firewall.

I passaggi seguenti forniscono informazioni dettagliate sulle regole di rete e applicazione specifiche necessarie per ogni tipo di cluster. È possibile fare riferimento alle pagine di creazione del cluster per la creazione di cluster Apache Flink, Trino e Apache Spark in base alle esigenze.

Importante

Prima di creare un cluster, assicurarsi di eseguire le regole specifiche del cluster seguenti per consentire il traffico.

Trino

  1. Aggiungere le regole di rete e applicazione seguenti per un cluster 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"  
    

    Modificare la sintassi seguente impostando l'area Sql.<Region> in base alle esigenze. Ad esempio: 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. Aggiungere la regola dell'applicazione seguente per un cluster 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. Aggiungere le regole di rete e applicazione seguenti per un cluster Spark.

    Modificare nella sintassi seguente l'area Storage.<Region> in base alle esigenze. Ad esempio: 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"
    

    Modificare nella sintassi seguente l'area Sql.<Region> in base alle esigenze. Ad esempio: 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"
    

Risolvere il problema di routing simmetrico

I passaggi seguenti consentono di richiedere il cluster in base al servizio di ingresso del servizio di bilanciamento del carico del cluster e assicurarsi che il traffico di risposta di rete non passi al firewall. Aggiungere una route alla tabella di route per reindirizzare il traffico di risposta all'indirizzo IP client a Internet e quindi è possibile raggiungere direttamente il cluster.

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

Se non è possibile raggiungere il cluster dopo aver configurato un gruppo di sicurezza di rete, seguire usare il gruppo di sicurezza di rete per limitare il traffico per consentire il traffico.

Suggerimento

Se si vuole consentire un maggior traffico, è possibile configurarlo tramite il firewall.

Come eseguire il debug

Se il cluster funziona in modo imprevisto, è possibile controllare i log del firewall per individuare il traffico bloccato.