Gestión de secretos y certificados con Azure Key Vault

Gestión de secretos y certificados con Azure Key Vault

14/08/2024

Este artículo técnico y educativo tiene como objetivo guiar a los analistas de seguridad, administradores de TI e ingenieros de sistemas en el uso de Azure Key Vault para administrar de forma segura secretos (como contraseñas, claves API, cadenas de conexión) y certificados (SSL/TLS). Azure Key Vault es un servicio en la nube que proporciona una solución centralizada y segura para almacenar y acceder a estos elementos críticos, eliminando la necesidad de incrustarlos directamente en código o archivos de configuración, lo cual es una mala práctica de seguridad [1].

Introducción

En el desarrollo y operación de aplicaciones modernas, la gestión de secretos y certificados es un desafío constante. Las credenciales de bases de datos, las claves API de servicios de terceros, las claves de cifrado y los certificados SSL/TLS son activos confidenciales que, si se ven comprometidos, podrían provocar violaciones graves de datos. Almacenarlos de forma insegura, como en archivos de texto sin formato, variables de entorno o directamente en el código fuente, plantea un riesgo importante. Azure Key Vault fue diseñado para resolver estos problemas proporcionando un repositorio seguro basado en hardware (HSM) para proteger estos activos, controlando estrictamente el acceso y simplificando la administración del ciclo de vida [2].

Esta guía práctica cubrirá la creación de Azure Key Vault, la adición y recuperación de secretos y certificados, la configuración de políticas de acceso y la integración con otros servicios de Azure, como Azure App Service. Se proporcionarán instrucciones paso a paso, ejemplos de comandos CLI de Azure y métodos de validación para que el lector pueda implementar una gestión segura de secretos y certificados, fortaleciendo la postura de seguridad de sus aplicaciones e infraestructura en la nube.

¿Por qué es crucial Azure Key Vault?

  • Almacenamiento seguro: Protege secretos y claves de cifrado utilizando módulos de seguridad de hardware (HSM) validados FIPS 140-2 Nivel 2.
  • Control de acceso centralizado: le permite administrar los permisos de acceso a secretos y certificados a un nivel granular mediante el control de acceso basado en roles (RBAC) de Azure o políticas de acceso de Key Vault.
  • Gerenciamento do Ciclo de Vida: Facilita la rotación de secretos y certificados, la expiración automática y la notificación de eventos.
  • Reducción de riesgos: Elimina la necesidad de almacenar credenciales en código o archivos de configuración, minimizando el riesgo de fugas.
  • Monitoreo y auditoría: registra todas las operaciones realizadas en Key Vault, proporcionando pistas de auditoría para investigaciones de cumplimiento y seguridad.
  • Integración simplificada: se integra fácilmente con otros servicios de Azure, como Azure App Service, Azure Functions, Azure Virtual Machines y Azure DevOps.

Requisitos previos

Para utilizar Azure Key Vault, necesitará los siguientes elementos:

  1. Suscripción activa de Azure: una suscripción de Azure para crear y administrar recursos.
  2. Acceso administrativo: una cuenta con el rol "Propietario" o "Colaborador" en la suscripción de Azure, o un rol personalizado con permisos para crear y administrar Key Vaults.
  3. Azure CLI o Azure PowerShell: herramientas de línea de comandos instaladas y configuradas para interactuar con Azure.
  4. Opcional: Visual Studio Code: Para desarrollo y pruebas de integración.

Paso a paso: administrar secretos y certificados con Azure Key Vault

Creemos un Key Vault, agreguemos un secreto y un certificado, y configuremos el acceso.

1. Creación de una bóveda de claves de Azure

Creemos un Key Vault mediante la CLI de Azure. También puede utilizar el portal de Azure.

  1. Abra su terminal o PowerShell e inicie sesión en Azure: golpecito inicio de sesión az
  2. Cree un grupo de recursos (si aún no tiene uno): golpecito az grupo crear --nombre RG-KeyVault-Artigos --ubicación esteus

  3. Cree el almacén de claves de Azure. Elija un nombre globalmente único para su Key Vault. golpecito 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 utilizar Key Vault para implementaciones de plantillas, lo que resulta útil para la automatización.

2. Agregar un secreto a Key Vault

Agreguemos una contraseña de base de datos como secreta.el.

  1. Agregue un secreto llamado DatabasePassword con un valor de ejemplo: golpecito az keyvault secret set --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!"

  2. Recupere el secreto para verificar que se almacenó correctamente: golpecito az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv

3. Agregar un certificado a Key Vault

Agreguemos un certificado autofirmado con fines de demostración. En producción, utilizaría certificados de una CA confiable.

  1. Cree un certificado autofirmado en Key Vault: golpecito az keyvault certificado crear --vault-name kv-artigos-seguranca-01 --name MyWebAppCert --policy "$(az keyvault certificado get-default-policy)"

  2. Verifique los detalles del certificado: golpecito az keyvault certificado mostrar --vault-name kv-artigos-seguranca-01 --name MyWebAppCert

4. Configuración de políticas de acceso

Para permitir que las aplicaciones o los usuarios accedan a secretos y certificados, debe configurar políticas de acceso. Utilicemos el control de acceso basado en roles (RBAC) de Azure.

  1. Obtenga el "ID de objeto" de la aplicación o usuario que necesitará acceso. Para una aplicación (principal de servicio), puede obtenerla después de registrarla en Azure AD. Para un usuario, utilice az ad user show --id <nombre-principal-usuario> --query id -o tsv.
  2. Asigne una función a su Key Vault. Por ejemplo, para permitir que una aplicación lea secretos: golpecito # Ejemplo: asignar el rol "Usuario de secretos de Key Vault" a una entidad de servicio az asignación de roles crear --role "Usuario de secretos de Key Vault" --assignee-object-id <Aplicación de objeto/ID de usuario> --scope /subscriptions/<Su ID de suscripción>/resourceGroups/RG-KeyVault-Artigos/providers/Microsoft.KeyVault/vaults/kv-artigos-seguranca-01
    • Consejo: Para los certificados, puede utilizar la función "Usuario de certificado de Key Vault".

5. Integración con un servicio de aplicaciones de Azure (ejemplo)

Demostremos cómo una aplicación puede consumir un secreto de Key Vault.

  1. Cree un servicio de aplicaciones de Azure (si aún no tiene uno): golpecito az appservice plan crear --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 la identidad administrada para App Service. Esto permite que App Service se autentique en Azure Key Vault sin credenciales explícitas. golpecito az asignación de identidad de aplicación web --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01

  3. Conceda permiso de identidad administrada de App Service para acceder al secreto en Key Vault. Utilice el principalId obtenido en el paso anterior. golpecito az keyvault set-policy --name kv-artigos-seguranca-01 --object-id <principalManaged IdentityId> --secret-permissions obtener lista

    • Consejo: Para usar RBAC, asigne la función "Usuario de secretos de Key Vault" al "principalId" de la identidad administrada.
  4. Configure una referencia secreta en App Service. Esto permite que la aplicación acceda al secreto como una variable de entorno. golpecito 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. Ahora, su aplicación (por ejemplo, ASP.NET Core, Node.js) puede leer el secreto DatabasePassword como una variable de entorno normal, y Azure App Service se encargará de recuperarlo de Key Vault de forma segura.

Validación y pruebas

La validación de la gestión de secretos y certificados implica verificar que el acceso se conceda sólo a entidades autorizadas y que los secretos se puedan recuperar correctamente.

1. Prueba de acceso a secretos a través de la CLI de Azure

  1. Intente acceder al secreto con una cuenta que no tenga permisos: golpecito az login # Iniciar sesión con una cuenta sin permisos az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv

    • Resultado esperado: el comando debería fallar con un error "AuthorizationFailed".
  2. Intente acceder al secreto con una cuenta que tenga permisos (por ejemplo, la cuenta que creó la Clave Vault o la identidad administrada de App Service si realiza la prueba desde dentro de la aplicación). golpecito az login # Inicie sesión con una cuenta con permisos az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv

    • Resultado esperado: el comando debe devolver el valor secreto.

2. Prueba de acceso al certificado

  1. Verifique que una entidad autorizada pueda enumerar y recuperar el certificado. golpecito Lista de certificados de az keyvault --vault-name kv-artigos-seguranca-01 az keyvault certificado mostrar --vault-name kv-artigos-seguranca-01 --name MyWebAppCert
    • Resultado esperado: los comandos deben devolver detalles del certificado.

3. Comprobación de los registros de auditoría de Key Vault

Todas las operaciones en Key Vault se registran y se pueden auditar.

  1. En Azure Portal, navegue hasta su Key Vault (kv-articles-seguranca-01).
  2. En el panel de navegación izquierdo, seleccione Registros de actividad.
  3. Verá un registro de todas las operaciones realizadas, incluida la creación de secretos, certificados e intentos de acceso.

Consejos de seguridad y mejores prácticas

  • Principio de privilegio mínimo: Otorgue solo los permisos necesarios (obtener, enumerar, configurar, eliminar) a secretos y certificados. Evite otorgar permisos excesivos.
  • Rotación regular de secretos: implemente un proceso para rotar secretos y certificados periódicamente para reducir el riesgo de compromiso.
  • Identidades administradas: use identidades administradas para recursos de Azure (Identidades administradas) siempre que sea posible para autenticarse en Key Vault, lo que elimina la necesidad de administrar credenciales en su código.
  • Políticas de acceso granular: utilice políticas de acceso de Key Vault o Azure RBAC para controlar quién puede acceder a qué. Prefiera RBAC para un control más preciso.
  • Monitoreo y alertas: configure alertas para actividades sospechosas en Key Vault, como intentos fallidos de acceso o eliminaciones secretas.
  • Protección de eliminación y eliminación temporal: habilite la protección de eliminación y eliminación temporal en Key Vault para evitar la pérdida accidental o maliciosa de secretos y certificados.
  • Copia de seguridad periódica: aunque Key Vault tiene alta disponibilidad, considere realizar una copia de seguridad de sus secretos y certificados, especialmente para escenarios de recuperación ante desastres.
  • Secretos que caducan: establezca fechas de vencimiento para secretos y certificados para forzar la rotación y evitar el uso de credenciales antiguas.

Solución de problemas comunes

  • Error de autorización (403 prohibido): verifique las políticas de acceso de Key Vault o las asignaciones de roles RBAC para la entidad que intenta acceder. Asegúrese de que se utilice el Object ID o principalId correcto.
  • Secreto/certificado no encontrado: verifique el nombre del secreto/certificado y el nombre de Key Vault. Asegúrese de que el secreto/certificado exista y no se haya eliminado ni haya caducado.
  • Problemas con identidades administradas: verifique que la identidad administrada se haya habilitado para el recurso de Azure y que se hayan otorgado los permisos correctos en Key Vault.
  • Latencia en la recuperación de secretos: en algunos casos, puede haber una pequeña latencia en la recuperación de secretos. Asegúrese de que su aplicación maneje esto de forma asincrónica.
  • Errores de conectividad: Verifique la configuración de red de su aplicación o máquina virtual. Asegúrese de que no haya firewalls ni grupos de seguridad de red que bloqueen el acceso a Key Vault.

Conclusión

Azure Key Vault es un servicio fundamental para cualquier organización que busque proteger sus activos digitales más confidenciales en la nube. Al centralizar la gestión de secretos y certificados en un repositorio seguro y de alta disponibilidad, se simplifica el cumplimiento, se reduce el riesgo de filtraciones de datos y se mejora la postura general de seguridad. La implementación eficaz de Azure Key Vault, combinada con las mejores prácticas de seguridad y automatización, permite a los desarrolladores y operadores centrarse en la innovación, sabiendo que sus credenciales y claves están protegidas. Con esta guía práctica, los profesionales de la seguridad podrán utilizar Azure Key Vault para gestionar secretos y certificados de forma segura y eficiente, garantizando la integridad y confidencialidad de sus aplicaciones y datos en Azure.


Referencias:

[1]Microsoft Aprender. ¿Qué es Azure Key Vault?. Disponible en: https://learn.microsoft.com/pt-br/azure/key-vault/general/overview [2] Microsoft aprende. Prácticas recomendadas para administrar secretos en Azure Key Vault. Disponible en: https://learn.microsoft.com/pt-br/azure/key-vault/secrets/secrets-best-practices [3] Microsoft aprende. Acerca de los certificados de Azure Key Vault. Disponible en: https://learn.microsoft.com/pt-br/azure/key-vault/certificates/about-certificates