Share via


Uitgaand verkeer beheren voor een Azure Spring Apps-exemplaar

Dit artikel is van toepassing op: ✔️ Java ✔️ C#

Dit artikel is van toepassing op: ✔️ Basic/Standard ✔️ Enterprise

In dit artikel wordt beschreven hoe u uitgaand verkeer beveiligt van uw toepassingen die worden gehost in Azure Spring Apps. Het artikel bevat een voorbeeld van een door de gebruiker gedefinieerde route. Een door de gebruiker gedefinieerde route is een geavanceerde functie waarmee u uitgaand verkeer volledig kunt beheren. U kunt een door de gebruiker gedefinieerde route gebruiken in scenario's zoals het automatisch genereren van een openbaar IP-adres van Azure Spring Apps ongedaan maken.

Vereisten

Een virtueel netwerk maken met behulp van een door de gebruiker gedefinieerde route

In de volgende afbeelding ziet u een voorbeeld van een virtueel Azure Spring Apps-netwerk dat gebruikmaakt van een door de gebruiker gedefinieerde route (UDR).

Diagram met de architectuur van een virtueel Azure Spring Apps-netwerk dat gebruikmaakt van een door de gebruiker gedefinieerde route (UDR).

In dit diagram ziet u de volgende functies van de architectuur:

  • Openbaar inkomend verkeer moet via firewallfilters stromen.
  • Elk Azure Spring Apps-exemplaar wordt geïsoleerd binnen een toegewezen subnet.
  • Klanten bezitten en beheren de firewall.
  • Deze structuur zorgt ervoor dat de firewall een gezonde omgeving mogelijk maakt voor alle functies die u nodig hebt.
  • Azure Spring Apps genereert niet automatisch openbare IP-resources.

Omgevingsvariabelen definiëren

In het volgende voorbeeld ziet u hoe u een set omgevingsvariabelen definieert die moeten worden gebruikt bij het maken van resources:

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"

Een virtueel netwerk met meerdere subnetten maken

In deze sectie wordt beschreven hoe u een virtueel netwerk inricht met drie afzonderlijke subnetten: één voor de gebruikers-apps, één voor de serviceruntime en één voor de firewall.

Maak eerst een resourcegroep, zoals wordt weergegeven in het volgende voorbeeld:

# Create a resource group.

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

Maak vervolgens een virtueel netwerk met drie subnetten om de Azure Spring Apps- en Azure Firewall-exemplaren te hosten, zoals wordt weergegeven in het volgende voorbeeld:

# 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

Een Azure Firewall-exemplaar instellen met een door de gebruiker gedefinieerde route

Gebruik de volgende opdracht om een Azure Firewall-exemplaar te maken en in te stellen met een door de gebruiker gedefinieerde route en om uitgaande regels voor Azure Firewall te configureren. Met de firewall kunt u gedetailleerde regels voor uitgaand verkeer vanuit Azure Spring Apps configureren.

Belangrijk

Als uw cluster of toepassing een groot aantal uitgaande verbindingen naar dezelfde bestemming of naar een kleine subset van bestemmingen maakt, hebt u mogelijk meer front-end-IP-adressen van de firewall nodig om te voorkomen dat de maximumpoorten per front-end-IP-adres worden bereikt. Zie quickstart: Een Azure Firewall-exemplaar maken met meerdere openbare IP-adressen - ARM-sjabloon voor meer informatie over het maken van een Azure Firewall-exemplaar met meerdere IP-adressen. Maak een openbare IP-resource van de Standard-SKU voor gebruik als het front-endadres van Azure Firewall.

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

In het volgende voorbeeld ziet u hoe u de Cli-extensie azure Firewall preview installeert en Azure Firewall implementeert:

# 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

In het volgende voorbeeld ziet u hoe u het IP-adres toewijst dat u hebt gemaakt aan de front-end van de firewall.

Notitie

Het instellen van het openbare IP-adres naar het Azure Firewall-exemplaar kan enkele minuten duren. Als u een FQDN (Fully Qualified Domain Name) wilt gebruiken voor netwerkregels, schakelt u een DNS-proxy in. Nadat u de proxy hebt ingeschakeld, luistert de firewall op poort 53 en stuurt de DNS-aanvragen door naar de opgegeven DNS-server. De firewall kan de FQDN vervolgens automatisch vertalen.

# 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

Wanneer de bewerking is voltooid, slaat u het front-end-IP-adres van de firewall op voor de configuratie later, zoals wordt weergegeven in het volgende voorbeeld:

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

Een door de gebruiker gedefinieerde route maken met een hop naar Azure Firewall

Azure routeert automatisch verkeer tussen Azure-subnetten, virtuele netwerken en on-premises netwerken. Als u de standaardroutering in Azure wilt wijzigen, maakt u een routetabel.

In het volgende voorbeeld ziet u hoe u een routetabel maakt die moet worden gekoppeld aan een opgegeven subnet. De routetabel definieert de volgende hop, zoals in het Azure Firewall-exemplaar dat u hebt gemaakt. Aan elk subnet kan één routetabel zijn gekoppeld, of er is mogelijk geen gekoppelde routetabel.

# 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

Firewallregels toevoegen

In het volgende voorbeeld ziet u hoe u regels toevoegt aan uw firewall. Zie Klantverantwoordelijkheden voor het uitvoeren van Azure Spring Apps in een virtueel netwerk voor meer informatie.

# 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

Routetabellen koppelen aan subnetten

Als u het cluster aan de firewall wilt koppelen, moet u ervoor zorgen dat het toegewezen subnet voor het cluster verwijst naar de routetabel die u hebt gemaakt. Subnetten voor app- en serviceruntime moeten zijn gekoppeld aan de bijbehorende routetabellen. In het volgende voorbeeld ziet u hoe u een routetabel koppelt aan een subnet:

# 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

Een rol toevoegen voor een Azure Spring Apps-resourceprovider

In het volgende voorbeeld ziet u hoe u een rol toevoegt voor de Azure Spring Apps-resourceprovider. De rol wordt toegewezen aan alle gebruikers die worden geïdentificeerd door de tekenreeks 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

Een Azure Spring Apps-exemplaar maken met door de gebruiker gedefinieerde routering

In het volgende voorbeeld ziet u hoe u een Azure Spring Apps-exemplaar maakt met door de gebruiker gedefinieerde routering:

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

U hebt nu toegang tot het openbare IP-adres van de firewall vanaf internet. De firewall routeert verkeer naar Azure Spring Apps-subnetten volgens uw routeringsregels.

Volgende stappen