Controlar o tráfego de saída para uma instância dos Aplicativos Spring do Azure
Observação
Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.
O plano Standard de consumo 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 mais informações, confira Migrar o plano Standard de consumo e dedicado dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.
Este artigo aplica-se a: ✔️ Java ✔️ C#
Este artigo se aplica ao: ✔️ nível Básico/Standard ✔️ nível Enterprise
Este artigo descreve como proteger o tráfego de saída de seus aplicativos hospedados nos Aplicativos Spring do Azure. 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. É possível usar uma rota definida pelo usuário em cenários como a rejeição de um endereço IP público gerado automaticamente pelos Aplicativos Spring do Azure.
Pré-requisitos
- Todos os pré-requisitos para implantar os Aplicativos Spring do Azure em uma rede virtual
- Uma versão de API do
2022-09-01 preview
ou mais recente - CLI do Azure 1.1.7 ou mais recente
- Familiaridade com as informações nos 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 dos Aplicativos Spring do Azure que usa uma UDR (rota definida pelo usuário).
Esse diagrama ilustra os seguintes recursos da arquitetura:
- O tráfego de entrada público deve fluir por meio de filtros do firewall.
- Cada instância dos Aplicativos Spring do Azure é isolada dentro de uma sub-rede dedicada.
- Os clientes possuem e gerenciam o firewall.
- Essa estrutura garante que o firewall habilite um ambiente íntegro para todas as funções de que você precisa.
- Os Aplicativos Spring do Azure não geram recursos de IP público automaticamente.
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 runtime do serviço e outra para o firewall.
Primeiro crie um grupo de recursos, conforme mostrado no seguinte exemplo:
# 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 dos Aplicativos Spring do Azure 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 nos Aplicativos Spring do Azure.
Importante
Se o cluster ou aplicativo criar um grande número de conexões de saída direcionadas ao mesmo destino ou a um pequeno subconjunto de destinos, poderá ser necessário obter mais endereços IP front-end de firewall para evitar atingir o valor máximo de portas por endereço IP front-end. Para saber como criar uma instância do Firewall do Azure com diversos endereços IP, confira Início Rápido: Criar uma instância do Firewall do Azure com diversos endereços IP públicos ─ modelo do ARM. Crie um recurso de IP público com SKU Standard a ser usado como o endereço de 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 versão prévia 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 criado ao front-end do firewall.
Observação
A configuração do endereço IP público para a instância do Firewall do Azure pode levar alguns minutos. Para usar um FQDN (nome de domínio totalmente qualificado) nas regras de rede, habilite um proxy DNS. Após você ter habilitado o proxy, o firewall irá escutar na porta 53 e encaminhar as solicitações de DNS para o servidor DNS especificado. Em seguida, o firewall pode 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
Terminada a operação, 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:]')
Crie uma rota definida pelo usuário com um salto para o Firewall do Azure
O Azure roteia o tráfego automaticamente entre redes virtuais, redes locais e sub-redes do Azure. Para 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 foi criada. Cada sub-rede pode ter uma tabela de rotas associada a ela ou nenhuma.
# 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 os Aplicativos Spring do Azure 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 criada. As sub-redes de runtime de aplicativo e serviço devem ser associadas a 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 dos Aplicativos Spring do Azure
O exemplo a seguir mostra como adicionar uma função para o provedor de recursos dos Aplicativos Spring do Azure. 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 dos Aplicativos Spring do Azure com roteamento definido pelo usuário
O exemplo a seguir mostra como criar uma instância dos Aplicativos Spring do Azure 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 é possível acessar o endereço IP público do firewall pela Internet. O firewall roteará o tráfego para as sub-redes dos Aplicativos Spring do Azure de acordo com as suas regras de roteamento.