Steuern des ausgehenden Datenverkehrs für eine Azure Spring Apps-Instanz

Dieser Artikel gilt für: ✔️ Java ✔️ C#

Dieser Artikel gilt für: ✔️ Basic/Standard ✔️ Enterprise

In diesem Artikel wird beschrieben, wie Sie den von Ihren in Azure Spring Apps gehosteten Anwendungen ausgehenden Datenverkehr sichern. Der Artikel enthält ein Beispiel für eine benutzerdefinierte Route. Eine benutzerdefinierte Route ist ein erweitertes Feature, mit dem Sie den ausgehenden Datenverkehr vollständig steuern können. Sie können eine benutzerdefinierte Route in verschiedenen Szenarien verwenden, z. B. beim Unterbinden einer automatisch generierten öffentlichen IP-Adresse von Azure Spring Apps.

Voraussetzungen

Erstellen eines virtuellen Netzwerks mithilfe einer benutzerdefinierten Route

Die folgende Abbildung zeigt ein Beispiel für ein virtuelles Azure Spring Apps-Netzwerk mit einer benutzerdefinierten Route (User-Defined Route, UDR):

Diagramm, das die Architektur eines virtuellen Azure Spring Apps-Netzwerks zeigt, das eine benutzerdefinierte Route (UDR) verwendet.

Dieses Diagramm veranschaulicht die folgenden Features der Architektur:

  • Der öffentliche Eingangsdatenverkehr muss durch Firewallfilter fließen.
  • Jede Azure Spring Apps-Instanz ist innerhalb eines dedizierten Subnetzes isoliert.
  • Kunden besitzen und verwalten die Firewall.
  • Diese Struktur stellt sicher, dass die Firewall eine gesunde Umgebung für alle benötigten Funktionen ermöglicht.
  • Azure Spring Apps generiert keine öffentlichen IP-Ressourcen automatisch.

Definieren von Umgebungsvariablen

Im folgenden Beispiel wird gezeigt, wie Sie eine Gruppe von Umgebungsvariablen definieren, die bei der Ressourcenerstellung verwendet werden sollen:

export PREFIX="asa-egress"
export RG="${PREFIX}-rg"
export LOC="eastus"
export ASANAME="${PREFIX}"
export VNET_NAME="${PREFIX}-vnet"
export ASA_APP_SUBNET_NAME="asa-app-subnet"
export ASA_SERVICE_RUNTIME_SUBNET_NAME="asa-service-runtime-subnet"
# Do not change FWSUBNET_NAME. This is currently a requirement for Azure Firewall.
export FWSUBNET_NAME="AzureFirewallSubnet"
export FWNAME="${PREFIX}-fw"
export FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
export FWIPCONFIG_NAME="${PREFIX}-fwconfig"
export APP_ROUTE_TABLE_NAME="${PREFIX}-app-rt"
export SERVICE_RUNTIME_ROUTE_TABLE_NAME="${PREFIX}-service-runtime-rt"
export FWROUTE_NAME="${PREFIX}-fwrn"
export ASA_NAME="${PREFIX}-instance"

Erstellen eines virtuellen Netzwerks mit mehreren Subnetzen

In diesem Abschnitt wird gezeigt, wie Sie ein virtuelles Netzwerk mit drei separaten Subnetzen bereitstellen: eines für die Benutzer-Apps, eines für die Dienstlaufzeit und eines für die Firewall.

Erstellen Sie zunächst eine Ressourcengruppe, wie im folgenden Beispiel gezeigt:

# Create a resource group.

az group create --name $RG --location $LOC

Erstellen Sie dann ein virtuelles Netzwerk mit drei Subnetzen, um die Azure Spring Apps- und Azure Firewall-Instanz zu hosten, wie im folgenden Beispiel gezeigt:

# Dedicated virtual network with an Azure Spring Apps app subnet.

az network vnet create \
    --resource-group $RG \
    --name $VNET_NAME \
    --location $LOC \
    --address-prefixes 10.42.0.0/16 \
    --subnet-name $ASA_APP_SUBNET_NAME \
    --subnet-prefix 10.42.1.0/24

# Dedicated subnet for the Azure Spring Apps service runtime subnet.

az network vnet subnet create \
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $ASA_SERVICE_RUNTIME_SUBNET_NAME\
    --address-prefix 10.42.2.0/24

# Dedicated subnet for Azure Firewall. (Firewall name can't be changed.)

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

Einrichten einer Azure Firewall-Instanz mit einer benutzerdefinierten Route

Verwenden Sie den folgenden Befehl, um eine Azure Firewall-Instanz mit einer benutzerdefinierten Route zu erstellen und einzurichten und Azure Firewall-Ausgangsregeln zu konfigurieren. Mit der Firewall können Sie detaillierte Regeln für den ausgehenden Datenverkehr von Azure Spring Apps konfigurieren.

Wichtig

Wenn durch Ihren Cluster oder Ihre Anwendung eine große Anzahl von ausgehenden Verbindungen erstellt wird, die jeweils das gleiche Ziel oder eine kleine Teilmenge von Zielen haben, sind unter Umständen mehr Front-End-IP-Adressen für die Firewall erforderlich, um ein Erreichen der maximalen Portkapazität pro Front-End-IP-Adresse zu vermeiden. Weitere Informationen zum Erstellen einer Azure Firewall-Instanz mit mehreren IP-Adressen finden Sie unter Schnellstart: Erstellen einer Azure Firewall-Instanz mit mehreren öffentlichen IP-Adressen – ARM-Vorlage. Erstellen Sie eine öffentliche IP-Adressressource mit Standard-SKU zur Verwendung als Front-End-Adresse für Azure Firewall.

az network public-ip create \
    --resource-group $RG \
    --name $FWPUBLICIP_NAME -l $LOC \
    --sku "Standard"

Im folgenden Beispiel wird gezeigt, wie Sie die Azure Firewall-Vorschau-CLI-Erweiterung installieren und Azure Firewall bereitstellen:

# Install the Azure Firewall preview CLI extension.

az extension add --name azure-firewall

# Deploy Azure Firewall.

az network firewall create \
    --resource-group $RG \
    --name $FWNAME -l $LOC \
    --enable-dns-proxy true

Im folgenden Beispiel wird gezeigt, wie Sie die von Ihnen erstellte IP-Adresse dem Firewall-Front-End zuweisen.

Hinweis

Das Einrichten der öffentlichen IP-Adresse für die Azure Firewall-Instanz kann einige Minuten dauern. Um einen vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) für Netzwerkregeln zu verwenden, aktivieren Sie einen DNS-Proxy. Nach dem Aktivieren des Proxys lauscht die Firewall an Port 53 und leitet DNS-Anforderungen an den angegebenen DNS-Server weiter. Die Firewall kann den FQDN dann automatisch übersetzen.

# Configure the firewall IP address.

az network firewall ip-config create \
    --resource-group $RG \
    --firewall-name $FWNAME \
    --name $FWIPCONFIG_NAME \
    --public-ip-address $FWPUBLICIP_NAME \
    --vnet-name $VNET_NAME

Wenn der Vorgang abgeschlossen ist, speichern Sie die IP-Adresse des Firewall-Front-Ends für eine spätere Konfiguration, wie im folgenden Beispiel gezeigt:

# Capture the firewall IP address for later use.

export FWPUBLIC_IP=$(az network public-ip show \
    --resource-group $RG \
    --name $FWPUBLICIP_NAME \
    --query "ipAddress" \
    --output tsv)
export FWPRIVATE_IP=$(az network firewall show \
    --resource-group $RG \
    --name $FWNAME \
    --query "ipConfigurations[0].privateIPAddress" \
    --output tsv | tr -d '[:space:]')

Erstellen einer benutzerdefinierten Route mit einem Hop zu Azure Firewall

Azure führt für Datenverkehr automatisch das Routing zwischen Azure-Subnetzen, virtuellen Netzwerken und lokalen Netzwerken durch. Wenn Sie das Standardrouting in Azure ändern möchten, erstellen Sie eine Routingtabelle.

Im folgenden Beispiel wird gezeigt, wie Sie eine Routingtabelle erstellen, die einem angegebenen Subnetz zugeordnet werden soll. Die Routingtabelle definiert den nächsten Hop, wie in der von Ihnen erstellten Azure Firewall-Instanz. Jedem Subnetz kann eine oder keine Routingtabelle zugeordnet sein.

# Create a user-defined route and add a route for Azure Firewall.

az network route-table create \
    --resource-group $RG -l $LOC \
    --name $APP_ROUTE_TABLE_NAME
az network route-table route create \
    --resource-group $RG \
    --name $FWROUTE_NAME \
    --route-table-name $APP_ROUTE_TABLE_NAME \
    --address-prefix 0.0.0.0/0 \
    --next-hop-type VirtualAppliance \
    --next-hop-ip-address $FWPRIVATE_IP
az network route-table create \
    --resource-group $RG -l $LOC \
    --name $SERVICE_RUNTIME_ROUTE_TABLE_NAME
az network route-table route create \
    --resource-group $RG \
    --name $FWROUTE_NAME \
    --route-table-name $SERVICE_RUNTIME_ROUTE_TABLE_NAME \
    --address-prefix 0.0.0.0/0 \
    --next-hop-type VirtualAppliance \
    --next-hop-ip-address $FWPRIVATE_IP

Hinzufügen von Firewallregeln

Das folgende Beispiel zeigt, wie Sie Ihrer Firewall Regeln zuordnen. Weitere Informationen finden Sie unter Kundenzuständigkeiten für die Ausführung von Azure Spring Apps im virtuellen Netzwerk.

# Add firewall network rules.

az network firewall network-rule create \
    --resource-group $RG \
    --firewall-name $FWNAME \
    --collection-name 'asafwnr' \
    --name 'springcloudtcp' \
    --protocols 'TCP' \
    --source-addresses '*' \
    --destination-addresses "AzureCloud" \
    --destination-ports 443 445 \
    --action allow \
    --priority 100

# Add firewall application rules.

az network firewall application-rule create \
    --resource-group $RG \
    --firewall-name $FWNAME \
    --collection-name 'aksfwar'\
    --name 'fqdn' \
    --source-addresses '*' \
    --protocols 'https=443' \
    --fqdn-tags "AzureKubernetesService" \
    --action allow \
    --priority 100

Zuordnen von Routingtabellen und Subnetzen

Wenn Sie den Cluster der Firewall zuordnen möchten, stellen Sie sicher, dass das dedizierte Subnetz für das Subnetz des Clusters auf die von Ihnen erstellte Routingtabelle verweist. Subnetze für App und Dienstlaufzeit müssen entsprechenden Routingtabelle zugeordnet sein. Im folgenden Beispiel wird gezeigt, wie Sie eine Routingtabelle einem Subnetz zuordnen:

# Associate the route table with a next hop to the firewall for the Azure Spring Apps subnet.

az network vnet subnet update \
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $ASA_APP_SUBNET_NAME \
    --route-table $APP_ROUTE_TABLE_NAME

az network vnet subnet update 
    --resource-group $RG \
    --vnet-name $VNET_NAME \
    --name $ASA_SERVICE_RUNTIME_SUBNET_NAME \
    --route-table $SERVICE_RUNTIME_ROUTE_TABLE_NAME

Hinzufügen einer Rolle für einen Azure Spring Apps-Ressourcenanbieter

Das folgende Beispiel zeigt, wie Sie eine Rolle für den Azure Spring Apps-Ressourcenanbieter hinzufügen. Die Rolle wird allen Benutzern zugewiesen, die durch die Zeichenfolge e8de9221-a19c-4c81-b814-fd37c6caf9d2identifiziert werden:

export VIRTUAL_NETWORK_RESOURCE_ID=$(az network vnet show \
    --name $VNET_NAME \
    --resource-group $RG \
    --query "id" \
    --output tsv)

az role assignment create \
    --role "Owner" \
    --scope ${VIRTUAL_NETWORK_RESOURCE_ID} \
    --assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2

export APP_ROUTE_TABLE_RESOURCE_ID=$(az network route-table show \
    --name $APP_ROUTE_TABLE_NAME \
    --resource-group $RG \
    --query "id" \
    --output tsv)
    
az role assignment create \
    --role "Owner" \
    --scope ${APP_ROUTE_TABLE_RESOURCE_ID} \
    --assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2
    
export SERVICE_RUNTIME_ROUTE_TABLE_RESOURCE_ID=$(az network route-table show \
    --name $SERVICE_RUNTIME_ROUTE_TABLE_NAME \
    --resource-group $RG \
    --query "id" \
    --output tsv)
    
az role assignment create \
    --role "Owner" \
    --scope ${SERVICE_RUNTIME_ROUTE_TABLE_RESOURCE_ID} \
    --assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2

Erstellen einer Azure Spring Apps-Instanz mit benutzerdefiniertem Routing

Das folgende Beispiel zeigt, wie Sie eine Azure Spring Apps-Instanz mit benutzerdefiniertem Routing erstellen:

az spring create \
    --name $ASA_NAME \
    --resource-group $RG \
    --vnet $VNET_NAME \
    --app-subnet $ASA_APP_SUBNET_NAME \
    --service-runtime-subnet $ASA_SERVICE_RUNTIME_SUBNET_NAME \
    --outbound-type userDefinedRouting

Sie können jetzt über das Internet auf die öffentliche IP-Adresse der Firewall zugreifen. Die Firewall leitet den Datenverkehr gemäß Ihren Routingregeln in die Subnetze von Azure Spring Apps weiter.

Nächste Schritte