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:
- O tráfego sai da VM com IP privado
- Passa pelo NAT gateway ou IP público da VM/subnet
- Trafega pela internet pública até o endpoint público do Storage Account
- 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​
2.3 Serviços que suportam Service Endpoints​
| Serviço | Service Tag |
|---|---|
| Azure Storage | Microsoft.Storage |
| Azure SQL Database | Microsoft.Sql |
| Azure Cosmos DB | Microsoft.AzureCosmosDB |
| Azure Key Vault | Microsoft.KeyVault |
| Azure Service Bus | Microsoft.ServiceBus |
| Azure Event Hubs | Microsoft.EventHub |
| Azure App Service | Microsoft.Web |
| Azure Container Registry | Microsoft.ContainerRegistry |
| Azure Cognitive Services | Microsoft.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​
5. Funcionamento na Prática​
5.1 Fluxo completo de configuração​
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:
| Aspecto | Service Endpoints | Private Endpoints |
|---|---|---|
| Endereço IP do serviço | Permanece público | Recebe IP privado na VNet |
| DNS | Resolve para IP público | Resolve para IP privado |
| Acesso de on-premises via VPN/ER | Não transitivo | Sim, funciona via VPN/ExpressRoute |
| Proteção contra exfiltração | Requer Service Endpoint Policy | Inerente (acesso por recurso especÃfico) |
| Custo | Gratuito | Custo por hora e por GB processado |
| Complexidade | Simples | Mais 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ção | Permissão mÃnima |
|---|---|
| Habilitar Service Endpoint na subnet | Network Contributor na VNet |
| Adicionar regra de rede no Storage Account | Storage Account Contributor |
| Criar Service Endpoint Policy | Network Contributor |
| Associar Service Endpoint Policy à subnet | Network Contributor na VNet e na Policy |
8. Tomada de Decisão​
8.1 Service Endpoints vs Private Endpoints​
| Situação | Melhor escolha | Motivo |
|---|---|---|
| Acesso de VMs Azure ao Storage, sem requisito de IP privado | Service Endpoint | Mais simples, gratuito |
| Requisito de acesso de on-premises via ExpressRoute | Private Endpoint | Service Endpoint não é transitivo via VPN/ER |
| Conformidade que exige que serviço tenha IP privado | Private Endpoint | Service Endpoint mantém IP público |
| Ambiente com centenas de subnets | Service Endpoint | Escala mais simples |
| Isolamento total por recurso (não por serviço) | Private Endpoint | Service Endpoint protege por serviço, não por instância |
| Custo zero de conectividade adicional | Service Endpoint | Private Endpoint tem custo por hora |
| Resolução DNS privada obrigatória | Private Endpoint | Service Endpoint não altera DNS |
8.2 Com ou sem Service Endpoint Policy​
| Situação | Usar SEP? | Motivo |
|---|---|---|
| Ambiente corporativo com múltiplos Storage Accounts | Sim | Previne acesso a Storage Accounts de outros tenants |
| Ambiente de desenvolvimento controlado | Opcional | Menos crÃtico se todos os recursos são do mesmo tenant |
| Requisito de prevenção de data exfiltration | Sim | SEP é a principal defesa nesse cenário |
| Apenas um Storage Account acessÃvel | Sim (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ário | Configuração de location |
|---|---|
| Storage Account na mesma região da VNet | Especifique a região + região pareada |
| Storage Account em qualquer região | Use * |
| Restrição geográfica de dados | Especifique 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: Denyno 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
AzureServicesse 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​
| Erro | Por que acontece | Como evitar |
|---|---|---|
| Firewall configurado mas VMs ainda bloqueadas | Service Endpoint não habilitado na subnet | Verificar se o endpoint está na lista de service endpoints da subnet |
| Service Endpoint habilitado mas acesso não restrito | defaultAction do firewall do PaaS ainda é "Allow" | Alterar defaultAction para "Deny" após configurar regras |
| Azure Backup falha após habilitar firewall | bypass: AzureServices não configurado | Adicionar AzureServices ao bypass no firewall |
| Acesso de on-premises falha mesmo com Service Endpoint | Service Endpoints não transitam por VPN/ExpressRoute | Usar Private Endpoint para acesso de on-premises |
| VM em outra VNet não consegue acessar via Service Endpoint | Service Endpoints não transitam por VNet peering automaticamente | Habilitar Service Endpoint na subnet da VNet spoke também |
| Ferramenta CLI/PowerShell local para de funcionar | defaultAction: Deny bloqueia IP local do administrador | Adicionar IP público do administrador às exceções durante configuração |
| Service Endpoint Policy bloqueia Storage Account legÃtimo | Storage Account não incluÃdo na lista da policy | Verificar e atualizar a lista de recursos permitidos na SEP |
| Esqueceu a região pareada no Service Endpoint | GRS replica para região diferente; acesso falha em failover | Incluir 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​
| Aspecto | Limite |
|---|---|
| Service Endpoints por subnet | Múltiplos serviços permitidos simultaneamente |
| Service Endpoint Policies por subnet | 1 por serviço |
| Definições por Service Endpoint Policy | 100 |
| Serviços suportados | Lista crescente (ver documentação Azure) |
| Custo | Gratuito (sem custo adicional) |
| Compatibilidade com IPv6 | Nã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: Denyno 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 quandodefaultAction: Denyestá 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
VirtualNetworkServiceEndpointfoi adicionada.