Gerenciando Segredos e Certificados com o Azure Key Vault
14/08/2024
Este artigo técnico e educativo tem como objetivo guiar analistas de segurança, administradores de TI e engenheiros de sistemas na utilização do Azure Key Vault para gerenciar de forma segura segredos (como senhas, chaves de API, strings de conexão) e certificados (SSL/TLS). O Azure Key Vault é um serviço de nuvem que oferece uma solução centralizada e segura para armazenar e acessar esses itens críticos, eliminando a necessidade de incorporá-los diretamente no código ou em arquivos de configuração, o que é uma prática de segurança deficiente [1].
Introdução
No desenvolvimento e operação de aplicações modernas, a gestão de segredos e certificados é um desafio constante. Credenciais de banco de dados, chaves de API de serviços de terceiros, chaves de criptografia e certificados SSL/TLS são ativos sensíveis que, se comprometidos, podem levar a violações de dados graves. Armazená-los de forma insegura, como em arquivos de texto simples, variáveis de ambiente ou diretamente no código-fonte, representa um risco significativo. O Azure Key Vault foi projetado para resolver esses problemas, fornecendo um repositório seguro baseado em hardware (HSM - Hardware Security Module) para proteger esses ativos, controlando rigorosamente o acesso e simplificando o gerenciamento do ciclo de vida [2].
Este guia prático abordará a criação de um Azure Key Vault, a adição e recuperação de segredos e certificados, a configuração de políticas de acesso e a integração com outros serviços Azure, como o Azure App Service. Serão fornecidas instruções passo a passo, exemplos de comandos Azure CLI e métodos de validação para que o leitor possa implementar um gerenciamento seguro de segredos e certificados, fortalecendo a postura de segurança de suas aplicações e infraestrutura na nuvem.
Por que o Azure Key Vault é crucial?
- Armazenamento Seguro: Protege segredos e chaves de criptografia usando módulos de segurança de hardware (HSMs) validados por FIPS 140-2 Nível 2.
- Controle de Acesso Centralizado: Permite gerenciar permissões de acesso a segredos e certificados de forma granular, usando o controle de acesso baseado em função (RBAC) do Azure ou políticas de acesso do Key Vault.
- Gerenciamento do Ciclo de Vida: Facilita a rotação de segredos e certificados, a expiração automática e a notificação de eventos.
- Redução de Riscos: Elimina a necessidade de armazenar credenciais em código ou arquivos de configuração, minimizando o risco de vazamento.
- Monitoramento e Auditoria: Registra todas as operações realizadas no Key Vault, fornecendo trilhas de auditoria para conformidade e investigações de segurança.
- Integração Simplificada: Integra-se facilmente com outros serviços Azure, como Azure App Service, Azure Functions, Azure Virtual Machines e Azure DevOps.
Pré-requisitos
Para utilizar o Azure Key Vault, você precisará dos seguintes itens:
- Assinatura Azure Ativa: Uma assinatura Azure para criar e gerenciar recursos.
- Acesso Administrativo: Uma conta com a função de
ProprietárioouColaboradorna assinatura Azure, ou uma função personalizada com permissões para criar e gerenciar Key Vaults. - Azure CLI ou Azure PowerShell: Ferramentas de linha de comando instaladas e configuradas para interagir com o Azure.
- Opcional: Visual Studio Code: Para desenvolvimento e testes de integração.
Passo a Passo: Gerenciando Segredos e Certificados com o Azure Key Vault
Vamos criar um Key Vault, adicionar um segredo e um certificado, e configurar o acesso.
1. Criando um Azure Key Vault
Vamos criar um Key Vault usando o Azure CLI. Você também pode usar o portal do Azure.
- Abra seu terminal ou PowerShell e faça login no Azure:
bash az login -
Crie um grupo de recursos (se ainda não tiver um):
bash az group create --name RG-KeyVault-Artigos --location eastus -
Crie o Azure Key Vault. Escolha um nome exclusivo globalmente para o seu Key Vault.
bash az keyvault create --name kv-artigos-seguranca-01 --resource-group RG-KeyVault-Artigos --location eastus --enabled-for-template-deployment true--enabled-for-template-deployment true: Permite que o Key Vault seja usado para implantações de modelos, útil para automação.
2. Adicionando um Segredo ao Key Vault
Vamos adicionar uma senha de banco de dados como um segredo.
-
Adicione um segredo chamado
DatabasePasswordcom um valor de exemplo:bash az keyvault secret set --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!" -
Recupere o segredo para verificar se foi armazenado corretamente:
bash az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv
3. Adicionando um Certificado ao Key Vault
Vamos adicionar um certificado autoassinado para fins de demonstração. Em produção, você usaria certificados de uma CA confiável.
-
Crie um certificado autoassinado no Key Vault:
bash az keyvault certificate create --vault-name kv-artigos-seguranca-01 --name MyWebAppCert --policy "$(az keyvault certificate get-default-policy)" -
Verifique os detalhes do certificado:
bash az keyvault certificate show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert
4. Configurando Políticas de Acesso
Para permitir que aplicações ou usuários acessem os segredos e certificados, você precisa configurar políticas de acesso. Vamos usar o controle de acesso baseado em função (RBAC) do Azure.
- Obtenha o
ID do Objeto(Object ID) da aplicação ou do usuário que precisará de acesso. Para uma aplicação (Service Principal), você pode obtê-lo após registrá-la no Azure AD. Para um usuário, useaz ad user show --id <user-principal-name> --query id -o tsv. - Atribua uma função ao seu Key Vault. Por exemplo, para permitir que uma aplicação leia segredos:
bash # Exemplo: Atribuir a função 'Key Vault Secrets User' a um Service Principal az role assignment create --role "Key Vault Secrets User" --assignee-object-id <Object ID da Aplicação/Usuário> --scope /subscriptions/<Sua Subscription ID>/resourceGroups/RG-KeyVault-Artigos/providers/Microsoft.KeyVault/vaults/kv-artigos-seguranca-01- Dica: Para certificados, você pode usar a função
Key Vault Certificate User.
- Dica: Para certificados, você pode usar a função
5. Integrando com um Azure App Service (Exemplo)
Vamos demonstrar como uma aplicação pode consumir um segredo do Key Vault.
- Crie um Azure App Service (se ainda não tiver um):
bash az appservice plan create --name AppServicePlan-Artigos --resource-group RG-KeyVault-Artigos --sku B1 --is-linux az webapp create --resource-group RG-KeyVault-Artigos --plan AppServicePlan-Artigos --name webapp-artigos-seguranca-01 -
Habilite a identidade gerenciada para o App Service. Isso permite que o App Service se autentique no Azure Key Vault sem credenciais explícitas.
bash az webapp identity assign --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 -
Conceda permissão à identidade gerenciada do App Service para acessar o segredo no Key Vault. Use o
principalIdobtido no passo anterior.bash az keyvault set-policy --name kv-artigos-seguranca-01 --object-id <principalId da Identidade Gerenciada> --secret-permissions get list- Dica: Para usar o RBAC, atribua a função
Key Vault Secrets UseraoprincipalIdda identidade gerenciada.
- Dica: Para usar o RBAC, atribua a função
-
Configure uma referência de segredo no App Service. Isso permite que a aplicação acesse o segredo como uma variável de ambiente.
bash az webapp config appsettings set --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 --settings DatabasePassword="@Microsoft.KeyVault(SecretUri=https://kv-artigos-seguranca-01.vault.azure.net/secrets/DatabasePassword/)" -
Agora, sua aplicação (ex: ASP.NET Core, Node.js) pode ler o segredo
DatabasePasswordcomo uma variável de ambiente normal, e o Azure App Service se encarregará de recuperá-lo do Key Vault de forma segura.
Validação e Teste
Validar o gerenciamento de segredos e certificados envolve verificar se o acesso é concedido apenas a entidades autorizadas e se os segredos podem ser recuperados corretamente.
1. Testando o Acesso a Segredos via Azure CLI
-
Tente acessar o segredo com uma conta que não tenha permissões:
bash az login # Faça login com uma conta sem permissões az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv- Resultado Esperado: O comando deve falhar com um erro de
AuthorizationFailed.
- Resultado Esperado: O comando deve falhar com um erro de
-
Tente acessar o segredo com uma conta que tenha permissões (ex: a conta que criou o Key Vault ou a identidade gerenciada do App Service, se você estiver testando de dentro da aplicação).
bash az login # Faça login com uma conta com permissões az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv- Resultado Esperado: O comando deve retornar o valor do segredo.
2. Testando o Acesso a Certificados
- Verifique se o certificado pode ser listado e recuperado por uma entidade autorizada.
bash az keyvault certificate list --vault-name kv-artigos-seguranca-01 az keyvault certificate show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert- Resultado Esperado: Os comandos devem retornar os detalhes do certificado.
3. Verificando Logs de Auditoria do Key Vault
Todas as operações no Key Vault são logadas e podem ser auditadas.
- No portal do Azure, navegue até o seu Key Vault (
kv-artigos-seguranca-01). - No painel de navegação esquerdo, selecione Logs de atividades.
- Você verá um registro de todas as operações realizadas, incluindo a criação de segredos, certificados e tentativas de acesso.
Dicas de Segurança e Melhores Práticas
- Princípio do Privilégio Mínimo: Conceda apenas as permissões necessárias (get, list, set, delete) para segredos e certificados. Evite conceder permissões excessivas.
- Rotação Regular de Segredos: Implemente um processo para rotacionar segredos e certificados regularmente para reduzir o risco de comprometimento.
- Identidades Gerenciadas: Use Identidades Gerenciadas para recursos Azure (Managed Identities) sempre que possível para autenticar-se no Key Vault, eliminando a necessidade de gerenciar credenciais em seu código.
- Políticas de Acesso Granulares: Utilize políticas de acesso do Key Vault ou RBAC do Azure para controlar quem pode acessar o quê. Prefira RBAC para um controle mais refinado.
- Monitoramento e Alertas: Configure alertas para atividades suspeitas no Key Vault, como tentativas de acesso falhas ou exclusões de segredos.
- Soft Delete e Purge Protection: Habilite o soft delete e a proteção contra purga no Key Vault para evitar a perda acidental ou maliciosa de segredos e certificados.
- Backup Regular: Embora o Key Vault seja altamente disponível, considere fazer backup de seus segredos e certificados, especialmente para cenários de recuperação de desastres.
- Segredos com Expiração: Defina datas de expiração para segredos e certificados para forçar a rotação e evitar o uso de credenciais antigas.
Troubleshooting Comum
- Erro de Autorização (403 Forbidden): Verifique as políticas de acesso do Key Vault ou as atribuições de função RBAC para a entidade que está tentando acessar. Certifique-se de que o
Object IDouprincipalIdcorreto foi usado. - Segredo/Certificado não encontrado: Verifique o nome do segredo/certificado e o nome do Key Vault. Certifique-se de que o segredo/certificado existe e não foi excluído ou expirou.
- Problemas com Identidades Gerenciadas: Verifique se a identidade gerenciada foi habilitada para o recurso Azure e se as permissões corretas foram concedidas no Key Vault.
- Latência na Recuperação de Segredos: Em alguns casos, pode haver uma pequena latência na recuperação de segredos. Certifique-se de que sua aplicação está lidando com isso de forma assíncrona.
- Erros de Conectividade: Verifique as configurações de rede do seu aplicativo ou máquina virtual. Certifique-se de que não há firewalls ou grupos de segurança de rede bloqueando o acesso ao Key Vault.
Conclusão
O Azure Key Vault é um serviço fundamental para qualquer organização que busca proteger seus ativos digitais mais sensíveis na nuvem. Ao centralizar o gerenciamento de segredos e certificados em um repositório seguro e altamente disponível, ele simplifica a conformidade, reduz o risco de violações de dados e melhora a postura de segurança geral. A implementação eficaz do Azure Key Vault, combinada com as melhores práticas de segurança e automação, permite que desenvolvedores e operadores se concentrem na inovação, sabendo que suas credenciais e chaves estão protegidas. Com este guia prático, os profissionais de segurança estarão aptos a utilizar o Azure Key Vault para gerenciar segredos e certificados de forma segura e eficiente, garantindo a integridade e a confidencialidade de suas aplicações e dados no Azure.
Referências:
[1] Microsoft Learn. O que é o Azure Key Vault?. Disponível em: https://learn.microsoft.com/pt-br/azure/key-vault/general/overview [2] Microsoft Learn. Melhores práticas para gerenciamento de segredos no Azure Key Vault. Disponível em: https://learn.microsoft.com/pt-br/azure/key-vault/secrets/secrets-best-practices [3] Microsoft Learn. Sobre os certificados do Azure Key Vault. Disponível em: https://learn.microsoft.com/pt-br/azure/key-vault/certificates/about-certificates