Pular para o conteúdo principal

Fundamentação Teórica: Configure Service Endpoints for Azure Platform as a Service (PaaS)


1. Intuição Inicial​

Imagine que você mora num bairro residencial e precisa ir ao banco. Normalmente, você sai pela rua principal, trafega por vias públicas e chega ao banco. O caminho é funcional, mas expõe você ao trânsito urbano e a todos os riscos associados.

Agora imagine que o banco abre uma entrada exclusiva para moradores do seu bairro, acessível por uma rua interna e privada que só os moradores do bairro podem usar. O banco permanece no mesmo lugar físico, mas agora você acessa por um caminho privado e seguro. Além disso, o banco pode configurar sua entrada para só aceitar moradores do seu bairro, bloqueando qualquer outra pessoa.

Service Endpoints no Azure funcionam exatamente assim. Serviços PaaS como Azure Storage, Azure SQL Database e Azure Key Vault têm endereços IP públicos. Por padrão, suas VMs acessam esses serviços pela internet pública. Com Service Endpoints, você cria um caminho privado e otimizado da sua subnet diretamente ao serviço PaaS, mantendo o tráfego dentro da rede backbone da Microsoft e permitindo que o serviço restrinja acesso apenas à sua subnet.


2. Contexto​

2.1 O problema que Service Endpoints resolve​

Sem Service Endpoints, quando uma VM numa VNet acessa um serviço PaaS como Azure Storage:

  1. O tráfego sai da VM com IP privado
  2. Passa pelo NAT gateway ou IP público da VM/subnet
  3. Trafega pela internet pública até o endpoint público do Storage Account
  4. O Storage Account aceita conexões de qualquer IP da internet

Isso cria dois problemas:

  • Segurança: O Storage Account fica exposto a qualquer tentativa de acesso da internet
  • Performance e confiabilidade: O tráfego usa a internet pública com suas variabilidades

Service Endpoints resolve ambos ao mesmo tempo.

2.2 Posição no ecossistema de conectividade Azure​

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

2.3 Serviços que suportam Service Endpoints​

ServiçoService Tag
Azure StorageMicrosoft.Storage
Azure SQL DatabaseMicrosoft.Sql
Azure Cosmos DBMicrosoft.AzureCosmosDB
Azure Key VaultMicrosoft.KeyVault
Azure Service BusMicrosoft.ServiceBus
Azure Event HubsMicrosoft.EventHub
Azure App ServiceMicrosoft.Web
Azure Container RegistryMicrosoft.ContainerRegistry
Azure Cognitive ServicesMicrosoft.CognitiveServices

3. Construção dos Conceitos​

3.1 O que muda tecnicamente com Service Endpoints​

Quando você habilita um Service Endpoint numa subnet, ocorrem duas mudanças técnicas simultâneas:

Mudança 1: Roteamento O sistema de roteamento da subnet aprende uma rota específica para o serviço PaaS que vai diretamente para o backbone Microsoft, em vez de passar pelo default gateway da internet. As rotas são adicionadas automaticamente à tabela de rotas efetiva da NIC.

Mudança 2: Identidade da subnet A subnet passa a apresentar uma identidade virtual ao serviço PaaS. Quando o tráfego chega ao Storage Account (ou outro PaaS), ele vem identificado como "originado da subnet X da VNet Y". Isso permite que o serviço PaaS configure regras de firewall baseadas em subnet, não em IP.

Ponto crítico que confunde muitos: O endereço IP público do serviço PaaS não muda. O Storage Account ainda tem um endereço IP público. O que muda é o caminho que o tráfego percorre e a identidade com que ele chega. O tráfego ainda vai para o IP público do Storage, mas agora pelo backbone privado da Microsoft.


3.2 Dois lados da configuração​

Service Endpoints requerem configuração em dois lados, e ambos são necessários para que a restrição funcione:

Lado 1: A subnet (VNet) Você habilita o Service Endpoint na subnet, adicionando o serviço (ex: Microsoft.Storage) à lista de endpoints da subnet.

Lado 2: O serviço PaaS (firewall do serviço) No serviço PaaS (ex: Storage Account), você configura a regra de firewall para permitir acesso apenas da subnet específica e opcionalmente negar todo o resto.

Se você configurar apenas o Lado 1 (subnet), o tráfego passa pelo backbone mas o Storage Account ainda aceita conexões de qualquer lugar. O benefício é apenas de roteamento.

Se você configurar apenas o Lado 2 (firewall do PaaS), você bloqueará o acesso do serviço mas a subnet ainda não terá o endpoint configurado, portanto a regra nunca se satisfará.

Ambos os lados juntos criam o controle de acesso real.


3.3 Service Endpoint Policies​

Service Endpoint Policies são uma camada adicional de controle que pode ser aplicada à subnet para restringir quais instâncias específicas de um serviço podem ser acessadas.

Por exemplo: você tem Service Endpoint para Microsoft.Storage habilitado na subnet. Sem Service Endpoint Policy, as VMs nessa subnet podem acessar qualquer Storage Account do Azure, não apenas os da sua organização. Com uma Service Endpoint Policy, você restringe para apenas os Storage Accounts específicos da sua organização.

Isso previne data exfiltration: um usuário mal-intencionado não consegue criar uma Storage Account própria e usar a conectividade da subnet para exfiltrar dados para ela.


4. Visão Estrutural​

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

5. Funcionamento na Prática​

5.1 Fluxo completo de configuração​

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

5.2 O que acontece com o tráfego após habilitação​

Antes do Service Endpoint:

  • VM (10.0.1.4) → NAT → IP público da VM → internet → IP público do Storage

Após o Service Endpoint:

  • VM (10.0.1.4) → backbone Microsoft → IP público do Storage (chegando identificado como vindo da subnet AppSubnet da VNet myVNet)

O IP de origem que o Storage enxerga ainda é um IP da faixa Microsoft (não o IP privado da VM). O que o Storage recebe é a identidade da subnet, não o IP privado da VM. Isso é fundamental para entender como as regras de firewall do PaaS funcionam.


5.3 Comportamento com VNet Peering​

Service Endpoints não transitam automaticamente por VNet peering. Se você tem:

  • VNet Hub com Subnet A (Service Endpoint para Storage habilitado)
  • VNet Spoke com Subnet B (sem Service Endpoint)

VMs na Subnet B não se beneficiam do Service Endpoint configurado na Subnet A. Cada subnet precisa ter seu próprio Service Endpoint configurado.


5.4 Service Endpoint vs impacto no firewall do PaaS ao habilitar "Deny All"​

Quando você habilita o firewall do Storage Account com "Deny all public networks" e adiciona apenas subnets com Service Endpoint, há um comportamento importante:

  • Azure Portal, Azure CLI e Azure PowerShell rodando na sua máquina local param de funcionar para gerenciar o Storage Account (pois seu IP local não está na lista permitida)
  • Para contornar isso, adicione temporariamente seu IP público local às exceções, ou use "Allow trusted Microsoft services" para que serviços Azure como Azure Backup e Azure Site Recovery continuem funcionando

6. Formas de Implementação​

6.1 Portal Azure​

Habilitando Service Endpoint na subnet:

VNet > Subnets > [subnet] > Service endpoints > + Add

Selecione o serviço (ex: Microsoft.Storage) e salve. A alteração é aplicada imediatamente.

Configurando o firewall do Storage Account:

Storage Account > Networking > Firewalls and virtual networks

Selecione "Enabled from selected virtual networks and IP addresses", clique em "+ Add existing virtual network", selecione a VNet e a subnet. Se o Service Endpoint ainda não estiver habilitado na subnet, o portal oferece habilitá-lo diretamente neste passo.


6.2 Azure CLI​

Habilitando Service Endpoint na subnet:

az network vnet subnet update \
--vnet-name myVNet \
--name AppSubnet \
--resource-group myRG \
--service-endpoints Microsoft.Storage

Para múltiplos serviços simultaneamente:

az network vnet subnet update \
--vnet-name myVNet \
--name AppSubnet \
--resource-group myRG \
--service-endpoints Microsoft.Storage Microsoft.Sql Microsoft.KeyVault

Adicionando regra de rede no Storage Account:

# Obter resource ID da subnet
SUBNET_ID=$(az network vnet subnet show \
--vnet-name myVNet \
--name AppSubnet \
--resource-group myRG \
--query id --output tsv)

# Adicionar regra de rede no Storage Account
az storage account network-rule add \
--account-name myaccount \
--resource-group myRG \
--subnet $SUBNET_ID

Configurar ação padrão do firewall para Deny:

az storage account update \
--name myaccount \
--resource-group myRG \
--default-action Deny

Permitir serviços Microsoft confiáveis:

az storage account update \
--name myaccount \
--resource-group myRG \
--bypass AzureServices Logging Metrics

Verificar regras de rede ativas:

az storage account show \
--name myaccount \
--resource-group myRG \
--query networkRuleSet

6.3 Configurando Service Endpoint Policy​

# Criar Service Endpoint Policy
az network service-endpoint policy create \
--name MySEPolicy \
--resource-group myRG \
--location eastus

# Adicionar definição: permitir apenas Storage Accounts específicos
az network service-endpoint policy-definition create \
--policy-name MySEPolicy \
--resource-group myRG \
--name AllowMyStorageOnly \
--service Microsoft.Storage \
--service-resources \
"/subscriptions/<sub-id>/resourceGroups/myRG/providers/Microsoft.Storage/storageAccounts/myaccount1" \
"/subscriptions/<sub-id>/resourceGroups/myRG/providers/Microsoft.Storage/storageAccounts/myaccount2"

# Associar a policy à subnet
az network vnet subnet update \
--vnet-name myVNet \
--name AppSubnet \
--resource-group myRG \
--service-endpoint-policy MySEPolicy

6.4 Azure PowerShell​

# Habilitar Service Endpoint na subnet
$subnet = Get-AzVirtualNetworkSubnetConfig `
-Name "AppSubnet" `
-VirtualNetwork (Get-AzVirtualNetwork -Name "myVNet" -ResourceGroupName "myRG")

$serviceEndpoint = New-AzServiceEndpointPolicy -Name "Policy1" -Location "eastus" -ResourceGroupName "myRG"

Set-AzVirtualNetworkSubnetConfig `
-Name "AppSubnet" `
-VirtualNetwork (Get-AzVirtualNetwork -Name "myVNet" -ResourceGroupName "myRG") `
-AddressPrefix $subnet.AddressPrefix `
-ServiceEndpoint "Microsoft.Storage"

# Adicionar regra no Storage Account
$subnetId = $subnet.Id
Add-AzStorageAccountNetworkRule `
-ResourceGroupName "myRG" `
-AccountName "myaccount" `
-VirtualNetworkResourceId $subnetId

# Definir ação padrão como Deny
Update-AzStorageAccountNetworkRuleSet `
-ResourceGroupName "myRG" `
-AccountName "myaccount" `
-DefaultAction Deny

6.5 Bicep​

// Subnet com Service Endpoints
resource appSubnet 'Microsoft.Network/virtualNetworks/subnets@2023-05-01' = {
parent: vnet
name: 'AppSubnet'
properties: {
addressPrefix: '10.0.1.0/24'
serviceEndpoints: [
{
service: 'Microsoft.Storage'
locations: ['eastus', 'eastus2']
}
{
service: 'Microsoft.KeyVault'
locations: ['*']
}
]
}
}

// Storage Account com firewall restrito à subnet
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: 'myaccount'
location: location
sku: { name: 'Standard_LRS' }
kind: 'StorageV2'
properties: {
networkAcls: {
defaultAction: 'Deny'
bypass: 'AzureServices,Metrics,Logging'
virtualNetworkRules: [
{
id: appSubnet.id
action: 'Allow'
}
]
}
}
}

7. Controle e Segurança​

7.1 O que Service Endpoints NÃO faz​

Este é um ponto fundamental que distingue Service Endpoints de Private Endpoints:

AspectoService EndpointsPrivate Endpoints
Endereço IP do serviçoPermanece públicoRecebe IP privado na VNet
DNSResolve para IP públicoResolve para IP privado
Acesso de on-premises via VPN/ERNão transitivoSim, funciona via VPN/ExpressRoute
Proteção contra exfiltraçãoRequer Service Endpoint PolicyInerente (acesso por recurso específico)
CustoGratuitoCusto por hora e por GB processado
ComplexidadeSimplesMais complexo (DNS, aprovação)

Service Endpoints protegem o acesso ao serviço de fora da VNet, mas não criam um IP privado para o serviço. O serviço ainda é acessível publicamente de outros lugares que você não bloqueou no firewall.


7.2 Bypass: serviços Microsoft confiáveis​

Quando você define defaultAction: Deny no firewall de um Storage Account, alguns serviços Azure internos também perdem acesso. A opção bypass permite isenções para:

  • AzureServices: Azure Backup, Azure Site Recovery, Azure Data Factory, Azure Monitor
  • Metrics: Azure Monitor pode coletar métricas de armazenamento
  • Logging: Azure Storage Analytics pode escrever logs

Importante: AzureServices não é uma brecha de segurança: apenas serviços Microsoft com identidade gerenciada e integração native bypass conseguem acesso por esse mecanismo, não recursos arbitrários.


7.3 Permissões para configurar Service Endpoints​

OperaçãoPermissão mínima
Habilitar Service Endpoint na subnetNetwork Contributor na VNet
Adicionar regra de rede no Storage AccountStorage Account Contributor
Criar Service Endpoint PolicyNetwork Contributor
Associar Service Endpoint Policy à subnetNetwork Contributor na VNet e na Policy

8. Tomada de Decisão​

8.1 Service Endpoints vs Private Endpoints​

SituaçãoMelhor escolhaMotivo
Acesso de VMs Azure ao Storage, sem requisito de IP privadoService EndpointMais simples, gratuito
Requisito de acesso de on-premises via ExpressRoutePrivate EndpointService Endpoint não é transitivo via VPN/ER
Conformidade que exige que serviço tenha IP privadoPrivate EndpointService Endpoint mantém IP público
Ambiente com centenas de subnetsService EndpointEscala mais simples
Isolamento total por recurso (não por serviço)Private EndpointService Endpoint protege por serviço, não por instância
Custo zero de conectividade adicionalService EndpointPrivate Endpoint tem custo por hora
Resolução DNS privada obrigatóriaPrivate EndpointService Endpoint não altera DNS

8.2 Com ou sem Service Endpoint Policy​

SituaçãoUsar SEP?Motivo
Ambiente corporativo com múltiplos Storage AccountsSimPrevine acesso a Storage Accounts de outros tenants
Ambiente de desenvolvimento controladoOpcionalMenos crítico se todos os recursos são do mesmo tenant
Requisito de prevenção de data exfiltrationSimSEP é a principal defesa nesse cenário
Apenas um Storage Account acessívelSim (simplifica)Reforça que apenas aquele recurso é acessível

8.3 Locais (locations) no Service Endpoint​

Ao habilitar um Service Endpoint, você pode especificar em quais regiões ele se aplica. Use * para todas as regiões ou especifique regiões individuais.

CenárioConfiguração de location
Storage Account na mesma região da VNetEspecifique a região + região pareada
Storage Account em qualquer regiãoUse *
Restrição geográfica de dadosEspecifique apenas a região onde os dados devem estar

9. Boas Práticas​

  • Configure sempre ambos os lados: habilitar o Service Endpoint na subnet E configurar o firewall do PaaS. Apenas um dos lados não cria a restrição de acesso.
  • Use defaultAction: Deny no firewall do PaaS após configurar as exceções de subnet. Sem essa configuração, qualquer IP da internet ainda pode acessar o serviço.
  • Adicione Service Endpoint Policies em ambientes corporativos para prevenir data exfiltration. Sem SEP, um colaborador pode criar uma Storage Account pessoal e acessá-la pela VNet corporativa.
  • Configure bypass para AzureServices se serviços como Azure Backup precisam acessar o Storage Account.
  • Habilite Service Endpoints apenas nas subnets que realmente precisam de acesso ao PaaS. Não habilite em todas as subnets da VNet por conveniência.
  • Lembre-se de include regiões pareadas ao configurar o Service Endpoint para Storage, pois Storage Accounts com GRS replicam para a região pareada e o acesso deve funcionar em failover.
  • Combine com NSGs: o Service Endpoint garante que o Storage só aceite da subnet; o NSG garante que a VM só possa conectar ao endpoint necessário no outbound.
  • Prefira Private Endpoints quando o requisito inclui acesso de ambientes on-premises ou quando a resolução de nome privada é necessária.

10. Erros Comuns​

ErroPor que aconteceComo evitar
Firewall configurado mas VMs ainda bloqueadasService Endpoint não habilitado na subnetVerificar se o endpoint está na lista de service endpoints da subnet
Service Endpoint habilitado mas acesso não restritodefaultAction do firewall do PaaS ainda é "Allow"Alterar defaultAction para "Deny" após configurar regras
Azure Backup falha após habilitar firewallbypass: AzureServices não configuradoAdicionar AzureServices ao bypass no firewall
Acesso de on-premises falha mesmo com Service EndpointService Endpoints não transitam por VPN/ExpressRouteUsar Private Endpoint para acesso de on-premises
VM em outra VNet não consegue acessar via Service EndpointService Endpoints não transitam por VNet peering automaticamenteHabilitar Service Endpoint na subnet da VNet spoke também
Ferramenta CLI/PowerShell local para de funcionardefaultAction: Deny bloqueia IP local do administradorAdicionar IP público do administrador às exceções durante configuração
Service Endpoint Policy bloqueia Storage Account legítimoStorage Account não incluído na lista da policyVerificar e atualizar a lista de recursos permitidos na SEP
Esqueceu a região pareada no Service EndpointGRS replica para região diferente; acesso falha em failoverIncluir a região pareada ao configurar locations do endpoint

11. Operação e Manutenção​

11.1 Verificando Service Endpoints ativos numa subnet​

az network vnet subnet show \
--vnet-name myVNet \
--name AppSubnet \
--resource-group myRG \
--query serviceEndpoints \
--output table

11.2 Verificando regras de rede no Storage Account​

az storage account show \
--name myaccount \
--resource-group myRG \
--query networkRuleSet \
--output json

A saída mostra defaultAction, lista de virtualNetworkRules, lista de ipRules e configuração de bypass.

11.3 Verificando rotas efetivas na NIC​

Após habilitar Service Endpoint, você pode verificar que a rota para o serviço foi adicionada automaticamente:

az network nic show-effective-route-table \
--name myVM-NIC \
--resource-group myRG \
--output table

Procure por rotas com nextHopType: VirtualNetworkServiceEndpoint apontando para os prefixos IP do serviço. Isso confirma que o tráfego está sendo roteado pelo backbone Microsoft.

11.4 Limites importantes​

AspectoLimite
Service Endpoints por subnetMúltiplos serviços permitidos simultaneamente
Service Endpoint Policies por subnet1 por serviço
Definições por Service Endpoint Policy100
Serviços suportadosLista crescente (ver documentação Azure)
CustoGratuito (sem custo adicional)
Compatibilidade com IPv6Não suportado (apenas IPv4)

12. Integração e Automação​

12.1 Azure Policy para garantir uso de Service Endpoints​

# Policy: Storage Accounts devem ter rede virtual restrita
az policy assignment create \
--name "storage-network-restriction" \
--policy "2a1a9cdf-e04d-429a-8416-3bfb72a1b26f" \
--scope "/subscriptions/<sub-id>"

Esta policy built-in audita Storage Accounts sem restrição de rede virtual configurada.

Custom policy para negar criação de Storage Accounts sem Service Endpoint configurado:

{
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
},
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
"equals": "Allow"
}
]
},
"then": {
"effect": "deny"
}
}

12.2 Integração com Azure SQL Database​

Para SQL Database, a configuração é similar mas usa Service Tag Microsoft.Sql:

# Habilitar Service Endpoint para SQL na subnet
az network vnet subnet update \
--vnet-name myVNet \
--name AppSubnet \
--resource-group myRG \
--service-endpoints Microsoft.Sql

# Adicionar regra de VNet no SQL Server
az sql server vnet-rule create \
--server mySqlServer \
--resource-group myRG \
--name AllowAppSubnet \
--vnet-name myVNet \
--subnet AppSubnet

O SQL Server verifica automaticamente se o Service Endpoint Microsoft.Sql está habilitado na subnet antes de aceitar a regra.


12.3 Integração com Key Vault​

# Habilitar Service Endpoint para Key Vault
az network vnet subnet update \
--vnet-name myVNet \
--name AppSubnet \
--resource-group myRG \
--service-endpoints Microsoft.KeyVault

# Adicionar regra de rede no Key Vault
az keyvault network-rule add \
--name myKeyVault \
--resource-group myRG \
--vnet-name myVNet \
--subnet AppSubnet

# Definir ação padrão como Deny
az keyvault update \
--name myKeyVault \
--resource-group myRG \
--default-action Deny

13. Resumo Final​

Conceitos essenciais:

  • Service Endpoints criam um caminho de rede otimizado da subnet diretamente ao serviço PaaS pelo backbone Microsoft, sem passar pela internet pública.
  • O serviço PaaS mantém seu endereço IP público mas o tráfego não usa a internet.
  • A configuração exige dois lados: habilitar o endpoint na subnet (VNet) E configurar o firewall do serviço PaaS para aceitar apenas aquela subnet.
  • Sem defaultAction: Deny no firewall do PaaS, a restrição não é efetiva, pois o serviço ainda aceita qualquer origem.

Diferenças críticas:

  • Service Endpoint vs Private Endpoint: Service Endpoint não cria IP privado; Private Endpoint cria. Service Endpoint não transita por VPN/ExpressRoute; Private Endpoint sim. Service Endpoint é gratuito; Private Endpoint tem custo.
  • Apenas subnet, sem SEP: VMs na subnet podem acessar qualquer instância daquele serviço PaaS em qualquer tenant Azure. Service Endpoint Policy restringe a instâncias específicas.
  • Service Endpoints e VNet Peering: Não são transitivos. Cada subnet spoke precisa de seu próprio Service Endpoint se precisar acessar o PaaS.

O que precisa ser lembrado:

  • Habilitar apenas o Service Endpoint na subnet sem configurar o firewall do PaaS não cria restrição de acesso, apenas melhora o roteamento.
  • Service Endpoint Policies previnem data exfiltration ao restringir quais instâncias específicas do serviço são acessíveis.
  • O bypass AzureServices é necessário para que serviços como Azure Backup continuem funcionando quando defaultAction: Deny está ativo.
  • Service Endpoints são gratuitos e não adicionam custo além da infraestrutura existente.
  • Para acesso de ambientes on-premises (via VPN ou ExpressRoute) a serviços PaaS, use Private Endpoints, pois Service Endpoints não são acessíveis transitivamente via gateways.
  • Após habilitar o Service Endpoint, verifique as rotas efetivas da NIC para confirmar que a rota VirtualNetworkServiceEndpoint foi adicionada.