Compartilhar via


Controlar o tráfego de saída para uma instância dos Aplicativos Spring 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

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

Diagrama mostrando a arquitetura de uma rede virtual dos Aplicativos Spring do Azure usando uma rota definida pelo usuário (UDR).

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.

Próximas etapas