Share via


Verwenden einer Firewall zum Einschränken des ausgehenden Datenverkehrs über die Azure CLI

Wichtig

Diese Funktion steht derzeit als Vorschau zur Verfügung. Die zusätzlichen Nutzungsbedingungen für Microsoft Azure-Vorschauen enthalten weitere rechtliche Bestimmungen, die für Azure-Features in Betaversionen, in Vorschauversionen oder anderen Versionen gelten, die noch nicht allgemein verfügbar gemacht wurden. Informationen zu dieser spezifischen Vorschau finden Sie unter Informationen zur Vorschau von Azure HDInsight in AKS. Bei Fragen oder Funktionsvorschlägen senden Sie eine Anfrage an AskHDInsight mit den entsprechenden Details, und folgen Sie uns für weitere Updates in der Azure HDInsight-Community.

Wenn ein Unternehmen sein eigenes virtuelles Netzwerk für die Clusterbereitstellungen verwenden möchte, gewinnt der Schutz des Datenverkehrs im virtuellen Netzwerk an Bedeutung. In diesem Artikel werden die Schritte beschrieben, mit denen Sie aus Ihrem HDInsight on AKS-Cluster ausgehenden Datenverkehr über Azure Firewall mithilfe der Azure CLI schützen.

Das folgende Diagramm veranschaulicht das Beispiel, das in diesem Artikel zum Simulieren eines Unternehmensszenarios verwendet wird:

Diagramm mit dem Netzwerkfluss.

Das in diesem Artikel gezeigte Beispiel verwendet Azure Could Shell.

Definieren der Variablen

Kopieren und führen Sie in der Azure Cloud Shell aus, um die Werte dieser Variablen festzulegen.

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"

Diagramm mit den Cloud Shell-Variablen.

Erstellen eines virtuellen Netzwerks und der Subnetze

  1. Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.

    az group create --name $RG --location $LOC
    
  2. Erstellen Sie ein virtuelles Netzwerk und zwei Subnetze.

    1. Virtuelles Netzwerk mit Subnetz für HDInsight im AKS-Clusterpool

       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. Subnetz für Azure Firewall.

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

      Wichtig

      1. Wenn Sie NSG im Subnetz HDIAKS_SUBNET_NAME hinzufügen, müssen Sie bestimmte Eingangs- und Ausgangsregeln manuell hinzufügen. Halten Sie sich an die Anweisungen unter Verwenden von NSG zum Einschränken des Datenverkehrs.
      2. Die Routingtabelle ist standardmäßig nicht mit Subnetz verknüpft. Falls erforderlich, muss der Benutzer eine Routingtabelle erstellen und sie dem Clusterpool zuordnen.

Erstellen eines HDInsight on AKS-Clusterpools mithilfe des Azure-Portals

  1. Erstellen Sie einen Clusterpool.

    Diagramm mit der Registerkarte „Basic“ des Clusterpools.

    Diagramm mit der Registerkarte „Sicherheit“.

  2. Erstellen Sie eine Routingtabelle.

    Erstellen Sie eine Routingtabelle und ordnen Sie diese dem Clusterpool zu. Weitere Informationen finden Sie unter Erstellen einer Routingtabelle.

Abrufen von AKS-Clusterdetails, die hinter dem Clusterpool erstellt wurden

Führen Sie die Schritte aus, um die AKS-Clusterinformationen abzurufen, was in den nachfolgenden Schritten hilfreich ist.

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)

Erstellen einer Firewall

  1. Erstellen einer öffentlichen IP-Ressource der SKU „Standard“ Diese Ressource wird als Front-End-Adresse für die Azure Firewall verwendet.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Registrieren Sie die Azure Firewall Vorschau-CLI-Erweiterung, um eine Azure Firewall zu erstellen.

       az extension add --name azure-firewall
    
  3. Erstellen Sie eine Azure Firewall, und aktivieren Sie den DNS-Proxy.

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. Erstellen Sie eine Azure Firewall-IP-Konfiguration.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. Sobald der IP-Konfigurations-Befehl erfolgreich ist, speichern Sie die IP-Adresse des Firewall-Front-Ends zur späteren Konfiguration.

    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)
    

Hinzufügen von Netzwerk- und Anwendungsregeln zur Firewall

  1. Erstellen Sie die Netzwerkregeln.

    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. Erstellen Sie die Anwendungsregeln.

    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"
    

Erstellen einer Route in der Routingtabelle zum Umleiten des Datenverkehrs an die Firewall

Erstellen Sie eine Routingtabelle, die HDInsight im AKS-Clusterpool zugeordnet werden soll. Weitere Informationen finden Sie unter Erstellen von Routingtabellenbefehlen.

Cluster erstellen

In den vorherigen Schritten haben wir den Netzwerkdatenverkehr an die Firewall weitergeleitet.

Die folgenden Schritte enthalten Details zu den spezifischen Netzwerk- und Anwendungsregeln, die für die einzelnen Clustertypen erforderlich sind. Sie können auf den Seiten zur Clustererstellung nachlesen, wie Sie je nach Bedarf Apache Flink-, Trino- und Apache Spark-Cluster erstellen.

Wichtig

Bevor Sie den Cluster erstellen, müssen Sie die folgenden clusterspezifischen Regeln hinzufügen, um den Datenverkehr zuzulassen.

Trino

  1. Fügen Sie die folgenden Netzwerk- und Anwendungsregeln für einen Trino-Cluster hinzu.

     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"  
    

    Ändern Sie die Sql.<Region> folgende Syntax gemäß Ihrer Anforderung in Ihre Region. Beispiel: 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. Fügen Sie die folgende Anwendungsregel für einen Apache Flink-Cluster hinzu.

    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. Fügen Sie die folgenden Netzwerk- und Anwendungsregeln für einen Spark-Cluster hinzu.

    Ändern Sie die Storage.<Region> in der folgenden Syntax gemäß Ihrer Anforderung in Ihre Region. Beispiel: 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"
    

    Ändern Sie die Sql.<Region> folgende Syntax gemäß Ihrer Anforderung in Ihre Region. Beispiel: 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"
    

Beheben eines Problems beim symmetrischen Routing

Die folgende Vorgehensweise ermöglicht es Ihnen, einen clusterspezifischen Lastenausgleichsdienst für eingehenden Datenverkehr anzufordern und so sicherzustellen, dass der Datenverkehr der Netzwerkantwort nicht an die Firewall geleitet wird. Fügen Sie der Routingtabelle eine Route hinzu, um den Antwortdatenverkehr an Ihre Client-IP-Adresse an das Internet umzuleiten. Anschließend können Sie den Cluster direkt erreichen.

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

Wenn Sie den Cluster nicht erreichen können, nachdem Sie NSG konfiguriert haben, verwenden Sie NSG, um den Datenverkehr einzuschränken, um den Datenverkehr zuzulassen.

Tipp

Wenn Sie mehr Datenverkehr zulassen möchten, können Sie ihn über die Firewall konfigurieren.

Debuggen

Wenn Sie eine unerwartete Funktionsweise des Clusters feststellen, können Sie anhand der Firewallprotokolle ermitteln, welcher Datenverkehr blockiert ist.