Usar Azure Key Vault para proteger secretos en tiempo de producción
Sugerencia
Este contenido es un extracto del libro electrónico, ".NET Microservices Architecture for Containerized .NET Applications" (Arquitectura de microservicios de .NET para aplicaciones de .NET contenedorizadas), disponible en Documentación de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
Los secretos almacenados como variables de entorno o almacenados por la herramienta Administrador de secretos todavía se almacenan localmente y se descifran en el equipo. Una opción más segura para almacenar secretos es Azure Key Vault, que proporciona una ubicación central y segura para almacenar claves y secretos.
El paquete Azure.Extensions.AspNetCore.Configuration.Secrets permite que una aplicación ASP.NET Core lea información de configuración de Azure Key Vault. Siga estos pasos para empezar a usar secretos de Azure Key Vault:
Registre la aplicación como una aplicación de Azure AD. (el acceso a los almacenes de claves se administra mediante Azure AD). Puede hacerlo a través del portal de administración de Azure.\
Como alternativa, si quiere que la aplicación se autentique mediante un certificado en lugar de hacerlo con una contraseña o un secreto de cliente, puede usar el cmdlet de PowerShell New-AzADApplication. El certificado que registre en Azure Key Vault solo necesita su clave pública La aplicación usará la clave privada.
Conceda a la aplicación registrada acceso al almacén de claves creando una entidad de servicio. Puede hacerlo usando los siguientes comandos de PowerShell:
$sp = New-AzADServicePrincipal -ApplicationId "<Application ID guid>" Set-AzKeyVaultAccessPolicy -VaultName "<VaultName>" -ServicePrincipalName $sp.ServicePrincipalNames[0] -PermissionsToSecrets all -ResourceGroupName "<KeyVault Resource Group>"
Incluya el almacén de claves como origen de configuración en la aplicación mediante la llamada al método de extensión AzureKeyVaultConfigurationExtensions.AddAzureKeyVault cuando cree una instancia de IConfigurationRoot.
Tenga en cuenta que, al llamar a AddAzureKeyVault
necesitará el Id. de la aplicación registrada y a la que se concedió acceso al almacén de claves en los pasos anteriores. O bien, primero puede ejecutar el comando de la CLI de Azure az login
y, después, usar una sobrecarga de AddAzureKeyVault
que toma un objeto DefaultAzureCredential en lugar del cliente.
Importante
Le recomendamos que registre Azure Key Vault como el último proveedor de configuración para que pueda invalidar los valores de configuración de proveedores anteriores.
Recursos adicionales
Using Azure Key Vault to protect application secrets (Usar Azure Key Vault para proteger secretos de aplicaciones)
https://learn.microsoft.com/azure/architecture/multitenant-identitySafe storage of app secrets during development (Almacenamiento seguro de secretos de aplicación durante el desarrollo)
https://learn.microsoft.com/aspnet/core/security/app-secretsConfiguring data protection (Configuración de la protección de datos)
https://learn.microsoft.com/aspnet/core/security/data-protection/configuration/overviewAdministración y duración de las claves de protección de datos en ASP.NET Core
https://learn.microsoft.com/aspnet/core/security/data-protection/configuration/default-settings