Partager via


Utiliser un pare-feu pour restreindre le trafic sortant à l'aide d’Azure CLI

Important

Cette fonctionnalité est disponible actuellement en mode Aperçu. Les Conditions d’utilisation supplémentaires pour les préversions de Microsoft Azure contiennent davantage de conditions légales qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou ne se trouvant pas encore en disponibilité générale. Pour plus d’informations sur cette préversion spécifique, consultez les Informations sur la préversion d’Azure HDInsight sur AKS. Pour toute question ou pour des suggestions à propos des fonctionnalités, veuillez envoyer vos requêtes et leurs détails sur AskHDInsight, et suivez-nous sur la Communauté Azure HDInsight pour plus de mises à jour.

Lorsqu'une entreprise souhaite utiliser son propre réseau virtuel pour les déploiements de clusters, la sécurisation du trafic du réseau virtuel devient importante. Cet article fournit les étapes pour sécuriser le trafic sortant de votre cluster HDInsight sur AKS via le Pare-feu Azure à l'aide d’Azure CLI.

Le diagramme suivant illustre l'exemple utilisé dans cet article pour simuler un scénario d'entreprise :

Diagramme montrant le flux du réseau.

L’exemple illustré dans cet article utilise Azure Cloud Shell.

Définir les variables

Copiez et exécutez dans Azure Cloud Shell pour définir les valeurs de ces 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"

Diagramme montrant les variables Cloud Shell.

Créer un réseau virtuel et des sous-réseaux

  1. Créez un groupe de ressources avec la commande az group create.

    az group create --name $RG --location $LOC
    
  2. Créer un réseau virtuel et deux sous-réseaux.

    1. Réseau virtuel avec sous-réseau pour HDInsight sur le 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. Sous-réseau pour le pare-feu Azure.

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

      Important

      1. Si vous ajoutez NSG dans le sous-réseau HDIAKS_SUBNET_NAME, vous devez ajouter manuellement certaines règles sortantes et entrantes. Suivez l'utilisation de NSG pour restreindre le trafic.
      2. Par défaut, la table de routage ne sera pas associée au sous-réseau. Si nécessaire, l’utilisateur doit créer une table de routage et l’associer au pool de clusters.

Créer HDInsight sur le pool de clusters AKS à l'aide du Portail Microsoft Azure

  1. Créez un pool de clusters.

    Diagramme montrant l’onglet de base du pool de clusters.

    Diagramme montrant l’onglet de sécurité.

  2. Crée une table de routage.

    Créez une table de routage et associez-la au pool de clusters. Pour plus d’informations, consultez créer une table de routage.

Obtenez les détails du cluster AKS créé derrière le pool de clusters

Suivez les étapes pour obtenir les informations du cluster AKS, ce qui est utile dans les étapes suivantes.

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)

Créer un pare-feu

  1. Créez une ressource IP publique de référence SKU standard. Cette ressource est utilisée comme adresse de front-end du Pare-feu Azure.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Inscrivez l’extension CLI en préversion du Pare-feu Azure pour créer un Pare-feu Azure.

       az extension add --name azure-firewall
    
  3. Créez un pare-feu Azure et activez le proxy DNS.

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. Créez une configuration IP de Pare-feu Azure.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. Une fois que la configuration IP précédente a réussi, enregistrez l’adresse IP du front-end du pare-feu pour la configurer ultérieurement.

    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)
    

Ajouter des règles réseau et applicatives au pare-feu

  1. Créez les règles de réseau

    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. Créez des règles d’application

    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"
    

Créer une route dans la table de routage pour rediriger le trafic vers le pare-feu

Créez une table de routage à associer à HDInsight sur le pool de clusters AKS. Pour plus d’informations, consultez créer des commandes de table de routage.

Créer un cluster

Dans les étapes précédentes, nous avons routé le trafic réseau vers le pare-feu.

Les étapes suivantes fournissent des détails sur les règles de réseau et d'application spécifiques requises par chaque type de cluster. Vous pouvez vous référer aux pages de création de cluster pour créer des clusters Apache Flink, Trino et Apache Spark en fonction de vos besoins.

Important

Avant de créer un cluster, assurez-vous d'exécuter les règles spécifiques au cluster suivantes pour autoriser le trafic.

Trino

  1. Ajoutez les règles de réseau et d’application suivantes pour 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"  
    

    Modifiez Sql.<Region> dans la syntaxe suivante en fonction de votre région selon vos besoins. Par exemple : 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. Ajoutez la règle d’application suivante pour 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. Ajoutez les règles de réseau et d’application suivantes pour un cluster Spark.

    Modifiez Storage.<Region> dans la syntaxe suivante en fonction de votre région selon vos besoins. Par exemple : 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"
    

    Modifiez Sql.<Region> dans la syntaxe suivante en fonction de votre région selon vos besoins. Par exemple : 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"
    

Résoudre le problème de routage symétrique

Les étapes suivantes vous permettent de demander le service d'entrée de l'équilibreur de charge cluster par cluster et de garantir que le trafic de réponse réseau ne circule pas vers le pare-feu. Ajoutez une route à la table de routage pour rediriger le trafic de réponse vers l'adresse IP de votre client vers Internet, puis vous pourrez accéder directement au 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

Si vous ne pouvez pas atteindre le cluster après avoir configuré le groupe de sécurité réseau, suivez utilisez le groupe de sécurité réseau (NSG) pour restreindre le trafic pour autoriser le trafic.

Conseil

Si vous souhaitez autoriser plus de trafic, vous pouvez le configurer via le pare-feu.

Comment déboguer

Si vous constatez que le cluster fonctionne de manière inattendue, vous pouvez consulter les journaux du pare-feu pour déterminer quel trafic est bloqué.