Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Key Vault proporciona una manera de almacenar credenciales y otros secretos con mayor seguridad. Pero el código debe autenticarse en Key Vault para recuperarlos. Las identidades administradas para Azure recursos resuelven este problema al proporcionar a los servicios de Azure una identidad administrada automáticamente en Microsoft Entra ID. El código usa esta identidad para autenticarse en cualquier servicio que admita la autenticación Microsoft Entra, incluida la Key Vault, sin insertar credenciales en el código.
En este tutorial, creará e implementará una aplicación web de Azure en Azure App Service y, a continuación, usará una identidad administrada para autenticar la aplicación en un almacén de claves mediante la biblioteca cliente secreta de Azure Key Vault para .NET y el CLI de Azure. Se aplican los mismos principios si usa otro idioma, Azure PowerShell o el portal de Azure.
Para más información sobre las aplicaciones web y la implementación de App Service, consulte:
- Información general de App Service
- Crear una aplicación web de ASP.NET Core en Azure App Service
- Implementación de archivos en App Service
Prerrequisitos
Para completar este tutorial, necesita lo siguiente:
- Una suscripción Azure. Cree una cuenta gratuita.
- El SDK de .NET 8.0 o una versión posterior.
- El CLI de Azure o Azure PowerShell.
- Azure Key Vault. Puede crear un almacén de claves mediante el portal Azure, el CLI de Azure o Azure PowerShell.
- Un "Key Vault" secreto. Puede crear un secreto mediante el portal Azure, PowerShell o el CLI de Azure.
Si ya tiene una aplicación web implementada en Azure App Service, vaya a Configurar la aplicación web para conectarse a Key Vault y Modificar la aplicación para acceder a la key vault.
Creación de una aplicación .NET Core
En este paso, configure el proyecto de .NET local.
En una ventana de terminal, cree un directorio denominado akvwebapp y cambie a él:
mkdir akvwebapp
cd akvwebapp
Cree una aplicación web de .NET mediante el comando web dotnet new:
dotnet new web
Ejecute la aplicación localmente para ver cómo se ve antes de implementarla en Azure:
dotnet run
En un explorador web, abra la aplicación en http://localhost:5000. Verá el mensaje "Hola mundo!" de la aplicación de ejemplo.
Para obtener más información sobre cómo crear aplicaciones web, consulte Creación de una aplicación web de ASP.NET Core en Azure App Service.
Implementación de la aplicación en Azure
En este paso, implemente la aplicación .NET en Azure App Service mediante la implementación zip. La implementación mediante ZIP es el mecanismo de implementación basado en paquetes recomendado para App Service. Para la entrega continua desde el control de código fuente, use Acciones de GitHub o Azure DevOps Pipelines en su lugar.
Creación de un grupo de recursos
Cree un grupo de recursos que contenga el almacén de claves y la aplicación web con az group create:
az group create --name "<resource-group>" --location "EastUS"
Creación de un plan de App Service
Cree un plan de App Service mediante az appservice plan create. En el ejemplo siguiente se crea un plan denominado myAppServicePlan en el nivel gratis (FREE):
az appservice plan create --name myAppServicePlan --resource-group <resource-group> --sku FREE
Creación de una aplicación web
Cree una aplicación web de Azure en el plan myAppServicePlan.
Importante
Al igual que un almacén de claves, una aplicación web Azure debe tener un nombre único global. Reemplace por <webapp-name> el nombre de la aplicación web.
az webapp create --resource-group "<resource-group>" --plan "myAppServicePlan" --name "<webapp-name>"
Vaya a la nueva aplicación para confirmar que se está ejecutando:
https://<webapp-name>.azurewebsites.net
Verá la página predeterminada para una nueva aplicación web Azure.
Implemente su aplicación local con despliegue ZIP
En el directorio del akvwebapp proyecto, compile el proyecto y cree un archivo ZIP de implementación:
dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..
Sugerencia
En Windows sin zip, use PowerShell: Compress-Archive -Path .\publish\* -DestinationPath .\akvwebapp.zip.
Implemente el archivo ZIP en la aplicación web mediante az webapp deploy:
az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip
Actualice la aplicación implementada en el explorador web:
https://<webapp-name>.azurewebsites.net
Verá el mismo mensaje "Hola mundo!" que vio en http://localhost:5000.
Configuración de la aplicación web para conectarse a Key Vault
En esta sección, habilitarás la aplicación web para que acceda a Key Vault y actualizarás el código de tu aplicación para recuperar un secreto.
Creación y asignación de acceso a una identidad administrada
Use una identidad administrada para autenticar la aplicación web en Key Vault. Una identidad administrada elimina la necesidad de administrar las credenciales en el código.
Cree la identidad de la aplicación mediante az webapp identity assign:
az webapp identity assign --name "<webapp-name>" --resource-group "<resource-group>"
El comando devuelve un fragmento de código JSON similar al siguiente:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Para obtener permisos para la bóveda de claves a través del Control de Acceso Basado en Roles (RBAC), asigne un rol a su "Nombre Principal de Usuario" (UPN) utilizando el comando de CLI de Azure az role assignment create.
az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
Reemplace <upn>, <subscription-id> y <vault-name> con sus valores reales. Si usó otro nombre de grupo de recursos, reemplace también "myResourceGroup". El UPN normalmente tendrá el formato de una dirección de correo electrónico (por ejemplo, username@domain.com).
Modificación de la aplicación para acceder al almacén de claves
En este tutorial se usa la biblioteca cliente secreta de Azure Key Vault. También puede usar la biblioteca cliente de certificados Azure Key Vault o la biblioteca cliente de claves de Azure Key Vault.
Instalación de los paquetes
En la ventana del terminal, instale la biblioteca cliente secreta de Azure Key Vault y la biblioteca cliente de Azure Identity:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
Actualización del código
Abra Program.cs en su proyecto akvwebapp.
Agregue estas using directivas en la parte superior del archivo:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Añade las siguientes líneas antes de la llamada app.MapGet, actualizando <vault-name> con el nombre de tu Key Vault. Este código usa DefaultAzureCredential para autenticarse en Key Vault a través de la identidad administrada de la aplicación web. Para obtener más información, consulte la guía del desarrollador. El código también configura un retroceso exponencial para los reintentos en caso de que Key Vault esté limitado. Para obtener más información sobre los límites de transacción, consulte las directrices sobre limitación de Azure Key Vault.
SecretClientOptions options = new SecretClientOptions()
{
Retry =
{
Delay= TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential
}
};
var client = new SecretClient(new Uri("https://<vault-name>.vault.azure.net/"), new DefaultAzureCredential(), options);
KeyVaultSecret secret = client.GetSecret("<secret-name>");
string secretValue = secret.Value;
Actualice la línea app.MapGet("/", () => "Hola mundo!"); a:
app.MapGet("/", () => secretValue);
Guarde los cambios.
Nueva implementación de la aplicación web
Recompile el paquete de implementación y vuelva a implementar:
dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..
az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip
Ir a la aplicación web completada
https://<webapp-name>.azurewebsites.net
Donde antes veía «Hola mundo!», ahora ve el valor de su secreto.