Share via


Uso del firewall para restringir el tráfico saliente mediante la CLI de Azure

Importante

Esta funcionalidad actualmente está en su versión preliminar. Los Términos de uso complementarios para las versiones preliminares de Microsoft Azure incluyen más términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar, o que todavía no se han lanzado con disponibilidad general. Para obtener información sobre esta versión preliminar específica, consulte la Información de Azure HDInsight sobre la versión preliminar de AKS. Para plantear preguntas o sugerencias sobre la característica, envíe una solicitud en AskHDInsight con los detalles y síganos para obtener más actualizaciones sobre Comunidad de Azure HDInsight.

Cuando una empresa quiere usar su propia red virtual para las implementaciones del clúster, la protección del tráfico de la red virtual es importante. En este artículo se proporcionan los pasos para proteger el tráfico saliente desde el clúster de HDInsight en AKS a través de Azure Firewall mediante CLI de Azure.

En el diagrama siguiente se muestra el ejemplo usado en este artículo para simular un escenario empresarial:

Diagrama que muestra el flujo de red.

En el ejemplo que se muestra en este artículo se usa Azure Could Shell.

Definir las variables

Copiar y ejecutar en Azure Cloud Shell para establecer los valores de estas variables.

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 que muestra las variables de Cloud Shell.

Creación de una red virtual y subredes

  1. Cree un grupo de recursos con el comando az group create.

    az group create --name $RG --location $LOC
    
  2. Cree una red virtual y dos subredes.

    1. Red virtual con subred para el grupo de clústeres de HDInsight en 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. Subred para Azure Firewall.

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

      Importante

      1. Si agrega NSG en la subred HDIAKS_SUBNET_NAME, debe agregar determinadas reglas de entrada y salida manualmente. Siga usar NSG para restringir el tráfico.
      2. De forma predeterminada, la tabla de rutas no se asociará a la subred. Si es necesario, el usuario debe crear una tabla de rutas y asociarla al grupo de clústeres.

Creación del grupo de clústeres de HDInsight en AKS mediante Azure Portal

  1. Cree un grupo de clústeres.

    Diagrama que muestra la pestaña básica del grupo de clústeres.

    Diagrama que muestra la pestaña seguridad.

  2. Cree una tabla de rutas.

    Cree una tabla de rutas y asóciela al grupo de clústeres. Para más información, vea Crear una tabla de rutas.

Obtención de los detalles del clúster de AKS creados detrás del grupo de clústeres

Siga los pasos para obtener la información del clúster de AKS, que es útil en los pasos posteriores.

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)

Creación de un firewall

  1. Cree un recurso de dirección IP pública de SKU estándar. Este recurso se usa como dirección de front-end de Azure Firewall.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Registre la extensión de la CLI de la versión preliminar de Azure Firewall para crear una instancia de Azure Firewall.

       az extension add --name azure-firewall
    
  3. Cree una instancia de Azure Firewall y habilite el proxy DNS.

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. Cree una configuración de IP de Azure Firewall.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. Una vez que el comando de configuración de IP se realiza correctamente, guarde la dirección IP de front-end del firewall para la configuración más adelante.

    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)
    

Adición de reglas de red y aplicación al firewall

  1. Creación de las reglas de red.

    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. Creación de las reglas de aplicación.

    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"
    

Cree una ruta en la tabla de rutas para redirigir el tráfico al firewall

Cree una tabla de rutas que se asociará a HDInsight en el grupo de clústeres de AKS. Para más información, consulte Crear comandos de tabla de rutas.

Creación de un clúster

En los pasos anteriores, enrutamos el tráfico de red al firewall.

En los pasos siguientes se proporcionan detalles sobre las reglas de aplicación y red específicas necesarias para cada tipo de clúster. Puede consultar las páginas de creación del clúster para crear clústeres de Apache Flink, Trino y Apache Spark en función de sus necesidades.

Importante

Antes de crear un clúster, asegúrese de ejecutar las siguientes reglas específicas del clúster para permitir el tráfico.

Trino

  1. Agregue las siguientes reglas de red y aplicación para un clúster de 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"  
    

    Cambie el Sql.<Region> en la sintaxis siguiente a su región según sus necesidades. Por ejemplo: 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. Agregue la siguiente regla de aplicación para un clúster de 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"
    

Spark de Apache

  1. Agregue las siguientes reglas de red y aplicación para un clúster de Spark.

    Cambie el Storage.<Region> en la sintaxis siguiente a su región según sus necesidades. Por ejemplo: 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"
    

    Cambie el Sql.<Region> en la sintaxis siguiente a su región según sus necesidades. Por ejemplo: 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"
    

Solución de problemas de enrutamiento simétrico

Los pasos siguientes le permiten solicitar el clúster por servicio de entrada del equilibrador de carga del clúster y asegurarse de que el tráfico de respuesta de red no fluye al firewall. Agregue una ruta a la tabla de rutas para redirigir el tráfico de respuesta a la dirección IP del cliente a Internet y, a continuación, puede acceder directamente al clúster.

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

Si no puede acceder al clúster después de haber configurado el NSG, siga Usar NSG para restringir el tráfico para permitir el tráfico.

Sugerencia

Si desea permitir más tráfico, puede configurarlo a través del firewall.

Cómo depurar

Si encuentra que el clúster funciona inesperadamente, puede comprobar los registros del firewall para buscar qué tráfico está bloqueado.