Partage via


Contrôler le trafic de sortie pour une instance Azure Spring Apps

Remarque

Les plans Essentiel, Standard et Entreprise seront déconseillés à compter de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de mise hors service d’Azure Spring Apps.

Le plan de consommation standard et dédiée sera déconseillé à compter du 30 septembre 2024, avec un arrêt complet après six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation standard et dédiée Azure Spring Apps vers Azure Container Apps.

Cet article s’applique à : ✔️ Java ✔️ C#

Cet article s’applique au : Niveau ✔️ De base/Standard ✔️ Entreprise

Cet article explique comment sécuriser le trafic sortant depuis vos applications hébergées dans Azure Spring Apps. L’article fournit un exemple de route définie par l’utilisateur. Une route définie par l’utilisateur est une fonctionnalité avancée qui vous permet d’avoir un contrôle total sur le trafic de sortie. Vous pouvez utiliser une route définie par l’utilisateur dans des scénarios visant, par exemple, à interdire une adresse IP publique générée automatiquement par Azure Spring Apps.

Prérequis

Créer un réseau virtuel avec une route définie par l’utilisateur

L’illustration suivante montre un exemple de réseau virtuel Azure Spring Apps qui utilise une route définie par l’utilisateur (UDR).

Diagramme illustrant l’architecture d’un réseau virtuel Azure Spring Apps qui utilise une route définie par l’utilisateur (UDR).

Ce diagramme illustre les fonctionnalités suivantes de l’architecture :

  • Le trafic d’entrée public doit circuler via des filtres du pare-feu.
  • Chaque instance Azure Spring Apps est isolée au sein d’un sous-réseau dédié.
  • Les clients possèdent et gèrent le pare-feu.
  • Cette structure veille à ce que le pare-feu permettent un environnement sain pour toutes les fonctions qui vous sont nécessaires.
  • Azure Spring Apps ne génère pas automatiquement des ressources d’IP publique.

Définissez des variables d’environnement

L’exemple suivant montre comment définir un ensemble de variables d’environnement à utiliser au moment de la création des ressources :

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"

Créer un réseau virtuel comprenant plusieurs sous-réseaux

Cette section explique comment provisionner un réseau virtuel avec trois sous-réseaux distincts : un pour les applications utilisateur, un pour le runtime de service et un pour le pare-feu.

Commencez par créer un groupe de ressources, comme illustré dans l’exemple suivant :

# Create a resource group.

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

Ensuite, créez un réseau virtuel avec trois sous-réseaux pour héberger les instances d’Azure Spring Apps et du Pare-feu Azure, comme dans l’exemple suivant :

# 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

Configurer une instance du Pare-feu Azure avec une route définie par l’utilisateur

Utilisez la commande suivante pour créer et configurer une instance du Pare-feu Azure avec une route définie par l’utilisateur, et pour configurer les règles de trafic sortant du Pare-feu Azure. Le pare-feu vous permet de configurer des règles de trafic de sortie granulaires à partir d’Azure Spring Apps.

Important

Si votre cluster ou votre application crée un grand nombre de connexions sortantes dirigées vers la même destination ou vers une petite partie des destinations, il peut vous falloir davantage d’adresses IP front-end de pare-feu pour éviter d’atteindre la limite maximale de ports par adresse IP front-end. Pour plus d’informations sur la création d’une instance du Pare-feu Azure avec plusieurs adresses IP, consultez Démarrage rapide : Créer une instance du Pare-feu Azure avec plusieurs adresses IP publiques - Modèle ARM. Créez une ressource d’adresse IP publique de référence SKU Standard à utiliser comme adresse front-end de Pare-feu Azure.

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

L’exemple suivant montre comment installer l’extension CLI du Pare-feu Azure (préversion) et déployer le Pare-feu Azure :

# 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

L’exemple suivant montre comment affecter l’adresse IP que vous avez créée à l’adresse front-end du pare-feu.

Remarque

La configuration de l’adresse IP publique sur le Pare-feu Azure peut prendre plusieurs minutes. Pour utiliser un nom de domaine complet (FQDN) sur des règles réseau, activez un proxy DNS. Une fois le proxy activé, le pare-feu écoute sur le port 53 et transfère les requêtes DNS au serveur DNS spécifié. Le pare-feu peut ensuite traduire automatiquement le nom de domaine complet.

# 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

À la fin de l’opération, enregistrez l’adresse IP front-end du pare-feu pour la configuration ultérieure, comme illustré dans l’exemple suivant :

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

Créer un itinéraire défini par l’utilisateur avec un tronçon vers le Pare-feu Azure

Azure achemine automatiquement le trafic entre les sous-réseaux, les réseaux virtuels et les réseaux locaux Azure. Si vous souhaitez changer le routage par défaut dans Azure, créez une table de routage.

L’exemple suivant montre comment créer une table de routage à associer à un sous-réseau spécifié. La table de routage définit le tronçon suivant, comme dans l’instance du Pare-feu Azure que vous avez créée. Chaque sous-réseau peut avoir une table de routage qui lui est associée, ou n’en avoir aucune.

# 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

Ajouter des règles de pare-feu

L’exemple suivant montre comment ajouter des règles à votre pare-feu. Pour plus d’informations, consultez Responsabilités du client pour l’exécution d’Azure Spring Apps dans un réseau virtuel.

# 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

Associer des tables de routage à des sous-réseaux

Pour associer le cluster au pare-feu, vérifiez que le sous-réseau dédié du cluster référence la table de routage que vous avez créée. Les sous-réseaux d’exécution d’application et de service doivent être associés aux tables de routage correspondantes. L’exemple suivant montre comment associer une table de routage à un sous-réseau :

# 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

Ajouter un rôle au fournisseur de ressources Azure Spring Apps

L’exemple suivant montre comment ajouter un rôle pour un fournisseur de ressources Azure Spring Apps. Le rôle est attribué à tous les utilisateurs identifiés par la chaîne 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

Créer une instance d’Azure Spring Apps avec un routage défini par l’utilisateur

L’exemple suivant montre comment créer une instance d’Azure Spring Apps avec un routage défini par l’utilisateur :

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

Vous pouvez maintenant accéder à l’adresse IP publique du pare-feu depuis Internet. Le pare-feu achemine le trafic vers les sous-réseaux Azure Spring Apps en fonction de vos règles d’acheminement.

Étapes suivantes