Azure Application Gateway – Configurar um Key Vault com RBAC para gerenciar o armazenamento de certificados
Imagem gerada por IA(que não sabe escrever direito 🙃, dá um desconto pra ela)
Se você precisa configurar um Application Gateway para buscar certificados em um Key Vault com RBAC, nesse post você verá passo-a-passo para isso.
Controlar o acesso a certificados e segredos (como chaves de criptorgrafia, cadeias de conexão de banco de dados...) é fundamental, para evitar o acesso não autorizado, vazamento de informações confidenciais e comprometimento de informações, bem como o raio de impacto (blast radius) que uma informação comprometida poderá causar.
É tido como uma boa prática inicialmente separar os cofres por ambiente (desenvolvimento, homologação e produção), aplicar políticas de segurança de rede, como uso de Private Links ou restringir as redes ou IP’s de origem com o uso do firewall do Key Vault. Porém dentro de cada cofre em cada ambiente, você poderá habilitar o acesso aos segredos por RBAC, e assim ter um controle granular, pois você poderá especificar qual segredo (seja o certificado, chave criptográfica ou senha) que aquela identidade necessita ter acesso, não exibindo os demais segredos armazenados no cofre, aplicando assim o POLP (Princípio do Privilégio Mínimo).
Ao utilizar o Application Gateway com o Key Vault, você poderá continuar tendo a terminação TLs, sem precisar carregar manualmente o certificado a cada nova atualização/renovação. As instâncias do Application Gateway irão recuperar o certificado do Key Vault e os instalam localmente para terminação TLS.
As instâncias sondam o Key Vault em intervalos de quatro horas para recuperar uma versão renovada do certificado, se existir. Se um certificado atualizado for encontrado, o certificado TLS/SSL associado ao ouvinte HTTPS será girado automaticamente.
Mas chega de papo, e vamos colocar a mão na massa. Você só vai precisar de:
- Tesoura sem ponta
- Cola bastão
Brincadeira, piada ruim...
Recursos que você irá precisar
- Application Gateway (No nosso caso “appgw-poc”)
- Key Vault ("kv-pot-rbac")
- Managed Identity: ("mi-poc")
Crie esses 3 recursos, caso você não tenha ainda.
No momento da criação de um cofre (ou Key Vault), certifique-se que está configurado para utilizar RBAC, na aba "Access Configuration":
Ou em um cofre existente por ir em “Access configuration” e modificando o Permission Model para 'Azure role-based access control':
RBAC no KeyVault
Para efeitos de demonstração, neste cofre temos 2 certificados. O objetivo aqui é mostrar a granularidade no acesso que você pode dar aos certificados quando você usa o RBAC.
Note que apesar de nós (como usuários) termos o privilégio de Key Vault Administrator
nesse cofre e conseguirmos listar (ou ver) os dois certificados, iremos dar acesso somente ao certificado que o Application Gateway precisa ter acesso (no nosso caso cert-pot-rbac-appgw
) . Então ele só irá ver o que cabe a ele e não verá o outro certificado, que é para outro propósito (e que não desejamos que ele tenha acesso):
Concedendo acesso a Managed Identity no Key Vault
Clique na opção “Access control (IAM)” do cofre e depois em “Add” e depois em “Add role assignment”:
Selecione o privilégio Key Vault Secrets User
Selecione a identidade gerenciada que receberá o privilégio:
Clique em Next e depois em “Review + Assign”.
Agora precisamos obter o valor da ID da Managed Identity, que você precisará para associar essa identidade ao Application Gateway. Vá na sua Managed Identity e clique em Properties, e copie o ID dela:
Após isso, você deverá rodar o seguinte script do Azure PowerShell, colocando as variáveis com o seu ambiente (isso é válido nesse cenário específico do Application Gateway, pois você não consegue associar a Managed Identity ao Application Gateway pelo Portal do Azure).
Uma vez que a identidade gerenciada tem acesso ao Key Vault, nesse script nós especificamos que o Application Gateway irá ter acesso apenas ao certificado que especificarmos na variável $CertName :
#Altere as variáveis, repita para cada certificado e Key Vault o qual deseja atribuir o privilégio
$VaultAgw = "Nome do Cofre"
$CertName = "Nome do Certificado"
$IdMI = "ID da Identidade Gerenciada"
$AppGWName = "Nome do Application Gateway"
$RGAppGW = "RG do Application Gateway"
$appgw = Get-AzApplicationGateway -Name $AppGWName -ResourceGroupName $RGAppGW
Set-AzApplicationGatewayIdentity -ApplicationGateway $appgw -UserAssignedIdentityId $IdMI
$secret = Get-AzKeyVaultSecret -VaultName $VaultAgw -Name $CertName
$secretId = $secret.Id.Replace($secret.Version, "")
# Remova o 'secret version' para que o Application Gateway utilize a ultima versão disponivel em cada sondagem
Add-AzApplicationGatewaySslCertificate -KeyVaultSecretId $secretId -ApplicationGateway $appgw -Name $secret.Name
Set-AzApplicationGateway -ApplicationGateway $appgw
No nosso caso ficou assim:
Após executar o script no Azure PowerShell, vá no Application Gateway e utilize esse certificado na lista suspensa na configuração do Listener HTTPS:
Veja que somente para aquele certificado (“cert-pot-rbac-appgw”) que associamos a Managed Identity que aparece listado. Assim o Application Gateway só usará (e só "verá") o certificado o qual é ele tenha necessidade de acessar.
Com este procedimento, é possível utilizar o Application Gateway e Key Vault para armazenar seguramente os seus certificados, e conferindo acesso somente aos segredos que são necessários para aquele recurso
Referências adicionais
Visão geral da segurança do Azure Key Vault | Microsoft Learn
Terminação TLS com certificados do Azure Key Vault | Microsoft Learn