Partilhar via


Usar firewall para restringir o tráfego de saída usando a CLI do Azure

Importante

O Azure HDInsight no AKS foi desativado em 31 de janeiro de 2025. Saiba mais com este anúncio.

Você precisa migrar suas cargas de trabalho para Microsoft Fabric ou um produto equivalente do Azure para evitar o encerramento abrupto de suas cargas de trabalho.

Importante

Esta funcionalidade está atualmente em pré-visualização. Os Termos de Utilização Suplementares para Versões de Teste do Microsoft Azure incluem mais termos legais que se aplicam a funcionalidades do Azure que estão em versão beta, em teste, ou ainda não lançadas para disponibilidade geral. Para obter informações sobre essa visualização específica, consulte Azure HDInsight no AKS informações de visualização. Para perguntas ou sugestões de funcionalidades, envie uma solicitação no AskHDInsight com os detalhes e siga-nos para mais atualizações na Comunidade Azure HDInsight .

Quando uma empresa deseja usar sua própria rede virtual para as implantações de cluster, proteger o tráfego da rede virtual torna-se importante. Este artigo fornece as etapas para proteger o tráfego de saída do seu cluster HDInsight no AKS através do Azure Firewall usando Azure CLI.

O diagrama a seguir ilustra o exemplo usado neste artigo para simular um cenário empresarial:

Diagrama mostrando o fluxo de rede.

O exemplo demonstrado neste artigo está usando Azure Could Shell.

Definir as variáveis

Copie e execute no Azure Cloud Shell para definir os valores dessas variáveis.

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"

Diagrama mostrando as variáveis do Cloud Shell.

Criar uma rede virtual e sub-redes

  1. Crie um grupo de recursos usando o comando az group create.

    az group create --name $RG --location $LOC
    
  2. Crie uma rede virtual e duas sub-redes.

    1. Rede virtual com sub-rede para HDInsight no pool de clusters 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. Sub-rede para o Firewall do 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 você adicionar NSG na sub-rede HDIAKS_SUBNET_NAME, precisará adicionar determinadas regras de entrada e saída manualmente. Siga use NSG para restringir o tráfego.
      2. Por padrão, a tabela de rotas não será associada à sub-rede. Se necessário, o usuário deve criar uma tabela de rotas e associá-la ao pool de clusters.

Criar o HDInsight no pool de clusters AKS usando o portal do Azure

  1. Crie um pool de clusters.

    Diagrama no qual se mostra a aba básica do cluster pool.

    Diagrama mostrando a guia de segurança.

  2. Crie uma tabela de rotas.

    Crie uma tabela de rotas e associe-a ao grupo de clusters. Para obter mais informações, consulte criar uma tabela de rotas.

Obter detalhes do cluster AKS associado ao pool de clusters

Siga as etapas para obter as informações do cluster AKS, o que é útil nas etapas subsequentes.

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)

Criar firewall

  1. Crie um recurso IP público de SKU padrão. Este recurso é usado como o endereço de front-end do Firewall do Azure.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Registre a extensão da CLI de visualização do Firewall do Azure para criar um Firewall do Azure.

       az extension add --name azure-firewall
    
  3. Crie um Firewall do Azure e habilite o proxy DNS.

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. Crie uma configuração de IP do Firewall do Azure.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. Assim que o comando de configuração de IP for bem-sucedido, guarde o endereço IP do frontend do firewall para configurar mais tarde.

    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)
    

Adicionar regras de rede e aplicativos ao firewall

  1. Crie as regras de rede.

    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. Crie as regras do aplicativo.

    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"
    

Criar rota na tabela de rotas para redirecionar o tráfego para o firewall

Crie uma tabela de rotas a ser associada ao HDInsight no pool de clusters AKS. Para obter mais informações, consulte os comandos para criar a tabela de rotas .

Criar cluster

Nas etapas anteriores, roteamos o tráfego de rede para o firewall.

As etapas a seguir fornecem detalhes sobre as regras específicas de rede e aplicativo necessárias para cada tipo de cluster. Você pode consultar as páginas de criação de cluster para criar Apache Flink, Trinoe Apache Spark clusters com base em sua necessidade.

Importante

Antes de criar um cluster, certifique-se de executar as seguintes regras específicas do cluster para permitir o tráfego.

Trino

  1. Adicione as seguintes regras de rede e aplicativo para um 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"  
    

    Altere o Sql.<Region> na sintaxe a seguir para sua região de acordo com sua necessidade. Por exemplo: 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. Adicione a seguinte regra de aplicativo para um 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. Adicione as seguintes regras de rede e aplicativo para um cluster do Spark.

    Altere o Storage.<Region> na sintaxe a seguir para sua região de acordo com sua necessidade. Por exemplo: 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"
    

    Altere o Sql.<Region> na sintaxe a seguir para sua região de acordo com sua necessidade. Por exemplo: 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"
    

Resolver problema de roteamento simétrico

As etapas seguintes permitem solicitar serviço de entrada do balanceador de carga cluster a cluster e garantem que o tráfego de resposta da rede não flua para o firewall. Adicione uma rota à tabela de rotas para redirecionar o tráfego de resposta do IP do cliente para a Internet e, assim, pode aceder diretamente ao 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 não conseguir aceder ao cluster depois de configurar o NSG, siga para usar o NSG e restringir o tráfego, e para permitir o tráfego.

Dica

Se quiser permitir mais tráfego, pode configurá-lo através da firewall.

Como depurar código

Se você achar que o cluster funciona inesperadamente, poderá verificar os logs do firewall para descobrir qual tráfego está bloqueado.