Migração Azure Key Vault para RBAC: Guia Completo

Publicado em Fevereiro 2026 | Por Okeh | ... visualizações

⚠️ Aviso Crítico: A Microsoft aposentará todas as versões de API anteriores à 2026-02-01 em 27 de fevereiro de 2027. Isso significa que seu Key Vault deixará de funcionar se não realizar a migração de Access Policies para Azure RBAC.

Se você utiliza Azure Key Vault com Access Policies (modelo legado), recebeu uma notificação urgente da Microsoft. Este é um dos maiores mudanças de segurança no Key Vault em anos. O Azure RBAC oferece segurança superior, auditoria melhorada e integração mais robusta com os serviços do Azure. Vamos explorar tudo que você precisa saber para fazer essa transição com sucesso.

Entendendo a Mudança: Access Policies vs Azure RBAC

O Modelo Legado: Access Policies

Como funciona: Um modelo simples e direto onde você concede permissões específicas a um principal (usuário, aplicação, managed identity) diretamente no Key Vault.

Problemas:

O Novo Modelo: Azure RBAC (Role-Based Access Control)

Como funciona: Controle de acesso baseado em funções, usando as mesmas roles do Azure (Contributor, Owner, etc) e roles customizadas.

Vantagens:

Aspecto Access Policies Azure RBAC
Granularidade Limitada (14 permissões) Muito fina (150+ roles)
Auditoria Básica Completa com Azure Monitor
Conditional Access
Suporte Microsoft Legado (deprecated) Padrão (futuro)
Integração IaC Complexa Nativa (Terraform, Bicep)

O Que Vai Parar de Funcionar?

🔴 Cenário 1: Criação de Novas Vaults

Após 27 fevereiro 2027:

Se você não configurar explicitamente enableRbacAuthorization: false, todas as novas vaults serão criadas com RBAC obrigatoriamente. Se seu código espera Access Policies, você receberá HTTP 403 Forbidden.

// ❌ Após 27 fev 2027 - Falhará porque tentará usar Access Policies
az keyvault create --name meuVault --resource-group meuRG

// ✅ Solução 1: Criar com RBAC (recomendado)
az keyvault create --name meuVault --resource-group meuRG \
  --enable-rbac-authorization true

// ✅ Solução 2: Forçar Access Policies (legado - não recomendado)
az keyvault create --name meuVault --resource-group meuRG \
  --enable-rbac-authorization false

🔴 Cenário 2: Integrações com Serviços Azure

Serviços afetados:

Se essas integrações estiverem usando Access Policies, receberão HTTP 403 errors após a aposentadoria da API legada.

🔴 Cenário 3: Certificados com Renovação Automática

Problema específico: Se você tem certificados contratados diretamente (não gerados pelo Key Vault) com renovação automática, a autoridade certificadora precisará de permissões para:

Com RBAC, essa integração usa Managed Identity com role "Key Vault Certificate Officer" em vez de Access Policies.

Mudanças por Serviço: Como Integrar com RBAC

1️⃣ Azure App Gateway + Load Balancer + WAF

Situação atual (Access Policies):

# App Gateway com acesso ao certificado via Access Policy
$vault = Get-AzKeyVault -VaultName "meuVault"
Set-AzKeyVaultAccessPolicy -VaultName "meuVault" \
  -ServicePrincipalName "00000000-0000-0000-0000-000000000000" \
  -PermissionsToSecrets get,list \
  -PermissionsToCertificates get,list

Com Azure RBAC (novo):

# 1. Obter a Managed Identity do App Gateway
$appGateway = Get-AzApplicationGateway -Name "meuAppGateway" -ResourceGroupName "meuRG"
$identity = $appGateway.Identity.PrincipalId

# 2. Atribuir role no Key Vault
New-AzRoleAssignment -ObjectId $identity \
  -RoleDefinitionName "Key Vault Secrets User" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

# 3. Para certificados
New-AzRoleAssignment -ObjectId $identity \
# 3. Para certificados
New-AzRoleAssignment -ObjectId $identity \
  -RoleDefinitionName "Key Vault Certificate User" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

Roles RBAC necessárias para App Gateway:

2️⃣ Azure WebApp (App Service)

Mudança de integração: WebApps acessam certificados e secrets via Managed Identity.

# 1. Habilitar Managed Identity na WebApp
$webApp = Get-AzWebApp -Name "minhaApp" -ResourceGroupName "meuRG"
$identity = $webApp.Identity.PrincipalId

# 2. Atribuir role RBAC
New-AzRoleAssignment -ObjectId $identity \
  -RoleDefinitionName "Key Vault Secrets User" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

# 3. No código da aplicação, usar DefaultAzureCredential
# Isso carrega automaticamente as credenciais via MSI
var client = new SecretClient(vaultUri, new DefaultAzureCredential());
KeyVaultSecret secret = await client.GetSecretAsync("meuSecret");

3️⃣ Azure Functions

Impacto: Functions que usam Key Vault bindings precisarão de RBAC configurado.

# 1. Habilitar Managed Identity na Function App
$functionApp = Get-AzFunctionApp -Name "minhaFunction" -ResourceGroupName "meuRG"
$identity = $functionApp.Identity.PrincipalId

# 2. Atribuir role RBAC
New-AzRoleAssignment -ObjectId $identity \
  -RoleDefinitionName "Key Vault Secrets User" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

# 3. No settings.json, referenciar o secret
{
  "KeyVaultName": "meuVault",
  "ConnectionString": "@Microsoft.KeyVault(SecretUri=https://meuVault.vault.azure.net/secrets/minhaConexao)"
}

4️⃣ Certificados com Renovação Automática

Problema específico: Autoridadores certificadoras (Let's Encrypt, GlobalSign, etc) precisam renovar certificados automaticamente.

# 1. Criar uma Managed Identity para o processo de renovação
$identityRenewal = New-AzUserAssignedIdentity -Name "CertificateRenewal" -ResourceGroupName "meuRG"

# 2. Atribuir role para renovar certificados
New-AzRoleAssignment -ObjectId $identityRenewal.PrincipalId \
  -RoleDefinitionName "Key Vault Certificates Officer" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

# 3. Usar essa identidade na autoridade certificadora
# Configurar na integração da CA (Let's Encrypt, DigiCert, etc) para usar essa identidade
# A renovação acontecerá automaticamente com essas permissões

5️⃣ Storage Account: Criptografia com Customer-Managed Keys

O que é: Você pode usar chaves armazenadas no Key Vault para criptografar dados em Storage Accounts (blobs, files, queues, tables).

Situação atual (Access Policies):

# 1. Storage Account com Access Policy
$storageAccount = Get-AzStorageAccount -Name "meuStorage" -ResourceGroupName "meuRG"
$storage = $storageAccount.Identity.PrincipalId

# 2. Atribuir permissão (Access Policy - legado)
Set-AzKeyVaultAccessPolicy -VaultName "meuVault" \
  -ObjectId $storage \
  -PermissionsToKeys get,wrapkey,unwrapkey

Com Azure RBAC (novo):

# 1. Storage Account já tem Managed Identity habilitada
$storageAccount = Get-AzStorageAccount -Name "meuStorage" -ResourceGroupName "meuRG"
$storage = $storageAccount.Identity.PrincipalId

# 2. Atribuir role RBAC no Key Vault
New-AzRoleAssignment -ObjectId $storage \
  -RoleDefinitionName "Key Vault Crypto Service Encryption User" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

# 3. Configurar Storage Account para usar a chave
$key = Get-AzKeyVaultKey -VaultName "meuVault" -Name "minhaChave"
Set-AzStorageAccount -ResourceGroupName "meuRG" \
  -Name "meuStorage" \
  -KeyvaultEncryption \
  -KeyName "minhaChave" \
  -KeyVersion $key.Version \
  -KeyVaultUri "https://meuVault.vault.azure.net"

⚠️ O que muda:

6️⃣ Disk Encryption: Chaves de Disco Gerenciadas pelo Key Vault

O que é: Azure Disk Encryption (ADE) permite criptografar discos de VMs usando chaves no Key Vault. Requer RBAC para continuar funcionando.

Situação atual (Access Policies):

# 1. VM com Managed Identity
$vm = Get-AzVM -Name "minhaVM" -ResourceGroupName "meuRG"
$vmIdentity = $vm.Identity.PrincipalId

# 2. Access Policy para criptografia de disco (legado)
Set-AzKeyVaultAccessPolicy -VaultName "meuVault" \
  -ObjectId $vmIdentity \
  -PermissionsToKeys create,get,wrapkey,unwrapkey,decrypt,encrypt

Com Azure RBAC (novo):

# 1. VM com Managed Identity (system-assigned ou user-assigned)
$vm = Get-AzVM -Name "minhaVM" -ResourceGroupName "meuRG"
$vmIdentity = $vm.Identity.PrincipalId

# 2. Atribuir role RBAC para criptografia de disco
New-AzRoleAssignment -ObjectId $vmIdentity \
  -RoleDefinitionName "Key Vault Crypto Officer" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

# Ou para apenas ler (decrypt):
New-AzRoleAssignment -ObjectId $vmIdentity \
  -RoleDefinitionName "Key Vault Crypto User" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

Cenários de disco criptografado:

⚠️ Impacto da migração: Se seu disco está criptografado com uma chave do Key Vault e você não migrar para RBAC, a VM não conseguirá descriptografar o disco após a aposentadoria da API legada.

Resumo: Tudo que usa Key Vault com Access Policies

Serviço/Recurso Tipo de Acesso RBAC Role Necessária Se Não Migrar
Storage Account Criptografia de dados em repouso Crypto Service Encryption User ❌ Dados inacessíveis
VM Disk Encryption Criptografia de discos (OS + Data) Crypto Officer / User ❌ VM não inicia
App Gateway Certificados SSL/TLS Certificate User ❌ Sem HTTPS
WebApp Secrets e certificados Secrets User ❌ Erro HTTP 403
Azure Functions Secrets Secrets User ❌ Execução falha
Database TDE Transparent Data Encryption Crypto User ❌ DB inacessível

Passo a Passo: Migração Completa

Passo 1: Inventário - O Que Você Tem?

Primeiro, identifique todos os Key Vaults e integrações:

# Listar todos os Key Vaults
az keyvault list --query "[].{name:name, resourceGroup:resourceGroup, enableRbac:properties.enableRbacAuthorization}"

# Ver quem tem permissão em cada vault (Access Policies)
az keyvault list-deleted --query "[].{vaultName:name, accessPolicies:properties.accessPolicies}" --output table

Passo 2: Planejar a Migração

Ordem recomendada:

  1. Migrar vaults de desenvolvimento e teste primeiro
  2. Testar todas as aplicações contra novas permissões RBAC
  3. Validar certificados e renovações automáticas
  4. Apenas depois migrar produção

Passo 3: Habilitar RBAC no Key Vault

# Via PowerShell
Update-AzKeyVault -VaultName "meuVault" -ResourceGroupName "meuRG" \
  -EnableRbacAuthorization $true

# Via CLI
az keyvault update --name meuVault --resource-group meuRG \
  --enable-rbac-authorization true

# Via Terraform
resource "azurerm_key_vault" "example" {
  # ...
  enable_rbac_authorization = true
}

⚠️ Importante: Após habilitar RBAC, Access Policies deixam de ser usados. Se você tiver acesso via Access Policies, perderá acesso até atribuir RBAC.

Passo 4: Converter Access Policies para RBAC

# Exemplo: Access Policy antigo (legado)
Set-AzKeyVaultAccessPolicy -VaultName "meuVault" \
  -UserPrincipalName "usuario@empresa.com" \
  -PermissionsToSecrets get,list,set,delete

# Conversão para RBAC (novo)
$user = Get-AzADUser -UserPrincipalName "usuario@empresa.com"
New-AzRoleAssignment -ObjectId $user.Id \
  -RoleDefinitionName "Key Vault Administrator" \
  -Scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

Passo 5: Atualizar Integrações

Para cada serviço (App Gateway, WebApp, Functions), configure RBAC como mostrado nas seções anteriores.

Passo 6: Testar e Validar

# Testar acesso a um secret
az keyvault secret show --vault-name meuVault --name meuSecret

# Verificar permissões atribuídas
az role assignment list --scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.keyvault/vaults/{vaultName}"

# Monitorar logs de acesso
az monitor activity-log list --resource-group meuRG --query "[?resourceType=='Microsoft.KeyVault/vaults']"

Cuidados Importantes Durante a Migração

⚠️ Cuidado 1: Perda de Acesso Imediata

Ao habilitar RBAC, Access Policies deixam de funcionar imediatamente. Você perderá acesso se não tiver RBAC configurado antes.

⚠️ Cuidado 2: Certificados SSL/TLS

App Gateways, WAF e WebApps perderão acesso a certificados se RBAC não estiver configurado. Isso causa downtime.

⚠️ Cuidado 3: Renovação de Certificados

Certificados com renovação automática podem deixar de renovar. Configure RBAC para o processo de renovação.

⚠️ Cuidado 4: Storage Account - Dados Inacessíveis

CRÍTICO: Se seu Storage Account usa customer-managed keys (CMK) e você não migrar para RBAC, o storage deixará de acessar os dados. Todos os blobs, files, queues e tables ficarão inacessíveis. Isso não é apenas funcional - é um bloqueio completo do serviço.

⚠️ Cuidado 5: Virtual Machines - Discos Inacessíveis

CRÍTICO: Se sua VM tem Azure Disk Encryption (ADE) com chaves do Key Vault e não migrar para RBAC, a VM não iniciará. Ela ficará travada tentando descriptografar discos e nunca conseguirá. Downtime total até migração.

⚠️ Cuidado 6: Database - TDE Bloqueado

Se seu banco de dados usa Transparent Data Encryption (TDE) com chaves do Key Vault, o banco deixará de acessar dados sem RBAC configurado.

⚠️ Cuidado 7: Azure Policies e Compliance

Suas políticas de conformidade podem precisar ser atualizadas para usar RBAC em vez de Access Policies.

🚨 Cenário Mais Perigoso: Se você tem um Storage Account com CMK (customer-managed encryption) + VM com Disk Encryption + Database com TDE, todos os três ficarão inacessíveis simultaneamente sem RBAC. Isso é um cenário de perda total de dados potencial. Planeje essa migração com MÁXIMA PRIORIDADE.

Roles RBAC Comuns para Key Vault

Role Permissões Caso de Uso
Key Vault Administrator Acesso completo DevOps, SRE
Key Vault Secrets User Ler secrets apenas WebApp, Functions, App Service
Key Vault Certificate User Ler certificados App Gateway, Load Balancer
Key Vault Certificates Officer Gerenciar certificados Renovação automática, CA integrations
Key Vault Crypto User Usar chaves de criptografia Aplicações com TDE, DataBox

O Que Acontece Se Não Migrar?

❌ Cenário 1: Após 27 de Fevereiro de 2027

Todas as chamadas à API do Key Vault para versões anteriores a 2026-02-01 retornarão HTTP 410 Gone ou HTTP 429 Too Many Requests. Seu Key Vault deixará de funcionar completamente.

❌ Cenário 2: Impacto Cascata

Aplicações afetadas:

  • ❌ WebApps não conseguem ler connection strings
  • ❌ Functions param de executar
  • ❌ App Gateway/Load Balancer perdem certificados SSL → sem HTTPS
  • ❌ Certificados deixam de renovar automaticamente
  • ❌ Banco de dados com Transparent Data Encryption (TDE) fica inacessível

Impacto financeiro: Downtime potencial de horas, perda de reputação, possível perda de dados.

Checklist: Antes da Migração

  • ☐ Inventariar todos os Key Vaults e Access Policies
  • ☐ Identificar todas as aplicações que usam Key Vault
  • ☐ Testar RBAC em ambiente de desenvolvimento
  • ☐ Habilitar RBAC em vault de teste primeiro
  • ☐ Converter Access Policies para RBAC
  • ☐ Atualizar todas as integrações (App Gateway, WebApp, Functions)
  • ☐ Testar certificados e renovação automática
  • ☐ Validar logs e monitoramento
  • ☐ Documentar todas as roles e atribuições
  • ☐ Preparar rollback plan (se necessário)
  • ☐ Migrar vaults de produção
  • ☐ Monitorar por 48 horas após migração

Timeline Importante

Data Evento Ação Recomendada
Fevereiro 2026 Lançamento API 2026-02-01 COMECE AQUI - Comece testes em dev
Até Junho 2026 Período de transição Complete migração em teste/homolog
Até Janeiro 2027 Final do suporte URGENTE - Migre produção
27 Fevereiro 2027 DEADLINE - APIs antigas desligam CRÍTICO - Sistema parará se não migrado

Referências e Recursos

💡 Precisa de Ajuda? Se você é cliente Okeh ou precisa de suporte especializado na migração do Azure Key Vault para RBAC, entre em contato conosco. Temos experiência com migrações complexas envolvendo múltiplos serviços e ambientes. Podemos ajudar a planejar, testar e executar essa transição sem downtime.