Share via


Controlar o tráfego de saída para uma instância do Azure Spring Apps

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

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).

Diagrama que mostra a arquitetura 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.

Próximos passos