Controlar o tráfego de saída para uma instância do Azure Spring Apps
Nota
Os planos Basic, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de aposentadoria de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.
O plano de consumo padrão e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Migrar consumo padrão e plano dedicado do Azure Spring Apps para Aplicativos de Contêiner do Azure.
Este artigo aplica-se a: ✔️ Java ✔️ C#
Este artigo aplica-se a: ✔️ Basic/Standard ✔️ Enterprise
Este artigo descreve como proteger o tráfego de saída de seus aplicativos hospedados no Azure Spring Apps. O artigo fornece um exemplo de uma rota definida pelo usuário. Uma rota definida pelo usuário é um recurso avançado que permite controlar totalmente o tráfego de saída. Você pode usar uma rota definida pelo usuário em cenários como não permitir um endereço IP público gerado automaticamente pelo Azure Spring Apps.
Pré-requisitos
- Todos os pré-requisitos para implantar o Azure Spring Apps em uma rede virtual
- Uma versão da API ou
2022-09-01 preview
posterior - Azure CLI versão 1.1.7 ou posterior
- Familiaridade com as informações dos seguintes artigos:
Criar uma rede virtual usando uma rota definida pelo usuário
A ilustração a seguir mostra um exemplo de uma rede virtual do Azure Spring Apps que usa uma rota definida pelo usuário (UDR).
Este diagrama ilustra as seguintes características da arquitetura:
- O tráfego de entrada pública deve fluir através de filtros de firewall.
- Cada instância do Azure Spring Apps é isolada em uma sub-rede dedicada.
- Os clientes possuem e gerenciam o firewall.
- Essa estrutura garante que o firewall permita um ambiente saudável para todas as funções que você precisa.
- O Azure Spring Apps não gera automaticamente recursos IP públicos.
Definir variáveis de ambiente
O exemplo a seguir mostra como definir um conjunto de variáveis de ambiente a serem usadas na criação de recursos:
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"
Criar uma rede virtual com várias sub-redes
Esta seção mostra como provisionar uma rede virtual com três sub-redes separadas: uma para os aplicativos do usuário, uma para o tempo de execução do serviço e uma para o firewall.
Primeiro, crie um grupo de recursos, conforme mostrado no exemplo a seguir:
# Create a resource group.
az group create --name $RG --location $LOC
Em seguida, crie uma rede virtual com três sub-redes para hospedar as instâncias do Azure Spring Apps e do Firewall do Azure, conforme mostrado no exemplo a seguir:
# 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
Configurar uma instância do Firewall do Azure com uma rota definida pelo usuário
Use o comando a seguir para criar e configurar uma instância do Firewall do Azure com uma rota definida pelo usuário e para configurar as regras de saída do Firewall do Azure. O firewall permite configurar regras granulares de tráfego de saída do Azure Spring Apps.
Importante
Se o cluster ou aplicativo criar um grande número de conexões de saída direcionadas para o mesmo destino ou para um pequeno subconjunto de destinos, talvez você precise de mais endereços IP front-end de firewall para evitar atingir o máximo de portas por endereço IP front-end. Para obter mais informações sobre como criar uma instância do Firewall do Azure com vários endereços IP, consulte Guia de início rápido: criar uma instância do Firewall do Azure com vários endereços IP públicos - modelo ARM. Crie um recurso IP público de SKU padrão para uso como o endereço front-end do Firewall do Azure.
az network public-ip create \
--resource-group $RG \
--name $FWPUBLICIP_NAME -l $LOC \
--sku "Standard"
O exemplo a seguir mostra como instalar a extensão da CLI de visualização do Firewall do Azure e implantar o Firewall do 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
O exemplo a seguir mostra como atribuir o endereço IP que você criou ao front-end do firewall.
Nota
Configurar o endereço IP público para a instância do Firewall do Azure pode levar alguns minutos. Para usar um nome de domínio totalmente qualificado (FQDN) em regras de rede, habilite um proxy DNS. Depois de ativar o proxy, a firewall escuta na porta 53 e reencaminha os pedidos DNS para o servidor DNS especificado. O firewall pode então traduzir o FQDN automaticamente.
# 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
Quando a operação estiver concluída, salve o endereço IP front-end do firewall para configuração posterior, conforme mostrado no exemplo a seguir:
# 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:]')
Criar uma rota definida pelo usuário com um salto para o Firewall do Azure
O Azure roteia automaticamente o tráfego entre sub-redes do Azure, redes virtuais e redes locais. Se você quiser alterar o roteamento padrão no Azure, crie uma tabela de rotas.
O exemplo a seguir mostra como criar uma tabela de rotas a ser associada a uma sub-rede especificada. A tabela de rotas define o próximo salto, como na instância do Firewall do Azure que você criou. Cada sub-rede pode ter uma tabela de rotas associada a ela ou pode não ter nenhuma tabela de rotas associada.
# 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
Adicionar regras de firewall
O exemplo a seguir mostra como adicionar regras ao firewall. Para obter mais informações, consulte Responsabilidades do cliente para executar o Azure Spring Apps em uma rede virtual.
# 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
Associar tabelas de rotas a sub-redes
Para associar o cluster ao firewall, verifique se a sub-rede dedicada para o cluster faz referência à tabela de rotas que você criou. As sub-redes de tempo de execução do aplicativo e do serviço devem ser associadas às tabelas de rotas correspondentes. O exemplo a seguir mostra como associar uma tabela de rotas a uma sub-rede:
# 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
Adicionar uma função para um provedor de recursos do Azure Spring Apps
O exemplo a seguir mostra como adicionar uma função para o provedor de recursos do Azure Spring Apps. A função é atribuída a todos os usuários identificados pela cadeia de caracteres 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
Criar uma instância do Azure Spring Apps com roteamento definido pelo usuário
O exemplo a seguir mostra como criar uma instância do Azure Spring Apps com roteamento definido pelo usuário:
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
Agora você pode acessar o endereço IP público do firewall a partir da Internet. O firewall roteia o tráfego para as sub-redes do Azure Spring Apps de acordo com suas regras de roteamento.