Gerenciando Segredos e Certificados com o Azure Key Vault

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:

  1. Assinatura Azure Ativa: Uma assinatura Azure para criar e gerenciar recursos.
  2. Acesso Administrativo: Uma conta com a função de Proprietário ou Colaborador na assinatura Azure, ou uma função personalizada com permissões para criar e gerenciar Key Vaults.
  3. Azure CLI ou Azure PowerShell: Ferramentas de linha de comando instaladas e configuradas para interagir com o Azure.
  4. 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.

  1. Abra seu terminal ou PowerShell e faça login no Azure: bash az login
  2. Crie um grupo de recursos (se ainda não tiver um): bash az group create --name RG-KeyVault-Artigos --location eastus

  3. 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.

  1. Adicione um segredo chamado DatabasePassword com um valor de exemplo: bash az keyvault secret set --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!"

  2. 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.

  1. 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)"

  2. 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.

  1. 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, use az ad user show --id <user-principal-name> --query id -o tsv.
  2. 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.

5. Integrando com um Azure App Service (Exemplo)

Vamos demonstrar como uma aplicação pode consumir um segredo do Key Vault.

  1. 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
  2. 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

  3. Conceda permissão à identidade gerenciada do App Service para acessar o segredo no Key Vault. Use o principalId obtido 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 User ao principalId da identidade gerenciada.
  4. 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/)"

  5. Agora, sua aplicação (ex: ASP.NET Core, Node.js) pode ler o segredo DatabasePassword como 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

  1. 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.
  2. 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

  1. 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.

  1. No portal do Azure, navegue até o seu Key Vault (kv-artigos-seguranca-01).
  2. No painel de navegação esquerdo, selecione Logs de atividades.
  3. 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 ID ou principalId correto 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