Compartilhar via


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

Observação

Desativaremos o Microsoft Azure HDInsight no AKS em 31 de janeiro de 2025. Para evitar o encerramento abrupto das suas cargas de trabalho, você precisará migrá-las para o Microsoft Fabric ou para um produto equivalente do Azure antes de 31 de janeiro de 2025. Os clusters restantes em sua assinatura serão interrompidos e removidos do host.

Somente o suporte Básico do Azure estará disponível até a data de desativação.

Importante

Esse recurso está atualmente na visualização. Os Termos de uso complementares para versões prévias do Microsoft Azure incluem mais termos legais que se aplicam aos recursos do Azure que estão em versão beta, em versão prévia ou ainda não lançados em disponibilidade geral. Para obter informações sobre essa versão prévia específica, confira Informações sobre a versão prévia do Azure HDInsight no AKS. Caso tenha perguntas ou sugestões de recursos, envie uma solicitação no AskHDInsight com os detalhes e siga-nos para ver mais atualizações sobre a Comunidade do Azure HDInsight.

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

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 nesse artigo é como usar o Azure Cloud Shell.

Defina 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. Criar a rede virtual e duas sub-redes.

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

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

  1. Crie um pool de clusters.

    Diagrama mostrando a guia básica do pool de clusters.

    Diagrama mostrando a guia de segurança.

  2. Criar uma tabela de rotas.

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

Obter detalhes do cluster do AKS criado por trás do pool de clusters

Siga as etapas para obter as informações do cluster do AKS, que são úteis 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. Criar um endereço IP público de SKU padrão. Esse recurso será 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 CLI de exibiçã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 anterior for bem-sucedido, salve o endereço IP do front-end do firewall para configuração posterior.

    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 de aplicativo 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 roteamento a ser associada ao HDInsight no pool de clusters do AKS. Para obter mais informações, confira comandos de criação de tabelas de roteamento.

Criar cluster

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

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

Importante

Antes de criar o cluster, adicione as seguintes regras específicas de cluster para permitir o tráfego.

Trino

  1. Adicione as seguintes regras de rede e aplicativo para um cluster do 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 suas necessidades. 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 do 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 de aplicativo para um cluster do Spark.

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

Solucionar problema de roteamento simétrico

As etapas a seguir nos permitem solicitar serviço de ingresso do balanceador de carga cluster por cluster e garantir 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 para seu IP de cliente para a Internet e, em seguida, você pode acessar o cluster diretamente.

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 você não conseguir acessar o cluster depois de configurar o NSG, siga usar o NSG para restringir o tráfego para permitir o tráfego.

Dica

Se você quiser permitir mais tráfego, poderá configurá-lo por meio do firewall.

Como depurar

Se você notar que o cluster está funcionando de maneira inesperada, poderá verificar os logs do firewall para localizar qual tráfego está sendo bloqueado.