Skip to main content

Azure Application Gateway – Configurar um Key Vault com RBAC para gerenciar o armazenamento de certificados

· 5 min read
Felipe Schulz
Cloud Architect

alt text 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":

alt text

Ou em um cofre existente por ir em “Access configuration” e modificando o Permission Model para 'Azure role-based access control':

alt text

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

alt text

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”:

alt text

Selecione o privilégio Key Vault Secrets User

alt text

Selecione a identidade gerenciada que receberá o privilégio:

alt text

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:

alt text

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:

alt text

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:

alt text

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