Dela via


Kontrollera utgående trafik för en Azure Spring Apps-instans

Kommentar

Basic-, Standard- och Enterprise-planerna kommer att vara inaktuella från och med mitten av mars 2025, med en 3-årig pensionsperiod. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i meddelandet om azure Spring Apps-pensionering.

Standardförbrukningen och den dedikerade planen kommer att vara inaktuell från och med den 30 september 2024, med en fullständig avstängning efter sex månader. Vi rekommenderar att du övergår till Azure Container Apps. Mer information finns i Migrera Azure Spring Apps Standard-förbrukning och dedikerad plan till Azure Container Apps.

Den här artikeln gäller för: ✔️ Java ✔️ C#

Den här artikeln gäller för: ✔️ Basic/Standard ✔️ Enterprise

Den här artikeln beskriver hur du skyddar utgående trafik från dina program i Azure Spring Apps. Artikeln innehåller ett exempel på en användardefinierad väg. En användardefinierad väg är en avancerad funktion som gör att du kan kontrollera utgående trafik fullt ut. Du kan använda en användardefinierad väg i scenarier som att inte tillåta en offentlig IP-adress som genererats automatiskt av Azure Spring Apps.

Förutsättningar

Skapa ett virtuellt nätverk med hjälp av en användardefinierad väg

Följande bild visar ett exempel på ett virtuellt Azure Spring Apps-nätverk som använder en användardefinierad väg (UDR).

Diagram som visar arkitekturen för ett virtuellt Azure Spring Apps-nätverk som använder en användardefinierad väg (UDR).

Det här diagrammet illustrerar följande funktioner i arkitekturen:

  • Offentlig inkommande trafik måste flöda genom brandväggsfilter.
  • Varje Azure Spring Apps-instans är isolerad i ett dedikerat undernät.
  • Kunderna äger och hanterar brandväggen.
  • Den här strukturen säkerställer att brandväggen möjliggör en felfri miljö för alla funktioner som du behöver.
  • Azure Spring Apps genererar inte automatiskt offentliga IP-resurser.

Definiera miljövariabler

I följande exempel visas hur du definierar en uppsättning miljövariabler som ska användas vid skapande av resurser:

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"

Skapa ett virtuellt nätverk med flera undernät

Det här avsnittet visar hur du etablerar ett virtuellt nätverk med tre separata undernät: ett för användarapparna, ett för tjänstkörningen och ett för brandväggen.

Skapa först en resursgrupp, som du ser i följande exempel:

# Create a resource group.

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

Skapa sedan ett virtuellt nätverk med tre undernät som värd för Azure Spring Apps- och Azure Firewall-instanserna, som du ser i följande exempel:

# 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

Konfigurera en Azure Firewall-instans med en användardefinierad väg

Använd följande kommando för att skapa och konfigurera en Azure Firewall-instans med en användardefinierad väg och för att konfigurera utgående regler för Azure Firewall. Med brandväggen kan du konfigurera detaljerade regler för utgående trafik från Azure Spring Apps.

Viktigt!

Om klustret eller programmet skapar ett stort antal utgående anslutningar som dirigeras till samma mål eller till en liten delmängd av mål, kan du behöva fler IP-adresser för brandväggens klientdel för att undvika att nå maximalt antal portar per klientdels-IP-adress. Mer information om hur du skapar en Azure Firewall-instans med flera IP-adresser finns i Snabbstart: Skapa en Azure Firewall-instans med flera offentliga IP-adresser – ARM-mall. Skapa en offentlig IP-resurs för Standard SKU för användning som Klientdelsadress för Azure Firewall.

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

I följande exempel visas hur du installerar CLI-tillägget för förhandsversionen av Azure Firewall och distribuerar Azure Firewall:

# 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

I följande exempel visas hur du tilldelar den IP-adress som du skapade till brandväggens klientdel.

Kommentar

Det kan ta några minuter att konfigurera den offentliga IP-adressen till Azure Firewall-instansen. Om du vill använda ett fullständigt kvalificerat domännamn (FQDN) i nätverksregler aktiverar du en DNS-proxy. När du har aktiverat proxyn lyssnar brandväggen på port 53 och vidarebefordrar DNS-begäranden till den angivna DNS-servern. Brandväggen kan sedan översätta det fullständiga domännamnet automatiskt.

# 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

När åtgärden är klar sparar du brandväggens klientdels-IP-adress för konfiguration senare, som du ser i följande exempel:

# 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:]')

Skapa en användardefinierad väg med ett hopp till Azure Firewall

Azure dirigerar automatiskt trafik mellan Azure-undernät, virtuella nätverk och lokala nätverk. Om du vill ändra standardroutningen i Azure skapar du en routningstabell.

I följande exempel visas hur du skapar en routningstabell som ska associeras med ett angivet undernät. Routningstabellen definierar nästa hopp, som i Azure Firewall-instansen som du skapade. Varje undernät kan ha en routningstabell associerad med den, eller så kanske den inte har någon associerad routningstabell.

# 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

Lägga till brandväggsregler

I följande exempel visas hur du lägger till regler i brandväggen. Mer information finns i Kundens ansvar för att köra Azure Spring Apps i ett virtuellt nätverk.

# 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

Associera routningstabeller med undernät

Om du vill associera klustret med brandväggen kontrollerar du att det dedikerade undernätet för klustret refererar till routningstabellen som du skapade. Undernät för app- och tjänstkörning måste associeras med motsvarande routningstabeller. I följande exempel visas hur du associerar en routningstabell med ett undernät:

# 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

Lägga till en roll för en Azure Spring Apps-resursprovider

I följande exempel visas hur du lägger till en roll för Azure Spring Apps-resursprovidern. Rollen tilldelas till alla användare som identifieras av strängen e8de9221-a19c-4c81-b814-fd37c6caf9d2:

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

Skapa en Azure Spring Apps-instans med användardefinierad routning

I följande exempel visas hur du skapar en Azure Spring Apps-instans med användardefinierad routning:

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

Nu kan du komma åt brandväggens offentliga IP-adress från Internet. Brandväggen dirigerar trafik till Azure Spring Apps-undernät enligt dina routningsregler.

Nästa steg