Biblioteca cliente secreta de Azure Key Vault para .NET: versión 4.5.0
Azure Key Vault es un servicio en la nube que proporciona un almacenamiento seguro de secretos, como contraseñas y cadenas de conexión de base de datos.
La biblioteca cliente de secretos de Azure Key Vault permite almacenar y controlar de forma segura el acceso a tokens, contraseñas, claves de API y otros secretos. Esta biblioteca ofrece operaciones para crear, recuperar, actualizar, eliminar, purgar, realizar copias de seguridad, restaurar y enumerar los secretos y sus versiones.
Código | fuente Paquete (NuGet) | Documentación | de referencia de API | Documentación del productoMuestras | Guía de migración
Introducción
Instalar el paquete
Instale la biblioteca cliente de secretos de Azure Key Vault para .NET con NuGet:
dotnet add package Azure.Security.KeyVault.Secrets
Prerequisites
- Una suscripción de Azure.
- Una Key Vault de Azure existente. Si necesita crear una Key Vault de Azure, puede usar Azure Portal o la CLI de Azure.
- Autorización a una instancia de Azure Key Vault existente mediante RBAC (recomendado) o control de acceso.
Si usa la CLI de Azure, reemplace <your-resource-group-name>
y <your-key-vault-name>
por sus propios nombres únicos:
az keyvault create --resource-group <your-resource-group-name> --name <your-key-vault-name>
Autenticar el cliente
Para interactuar con el servicio azure Key Vault, deberá crear una instancia de la clase SecretClient. Necesita una dirección URL del almacén, que puede ver como "Nombre DNS" en el portal y credenciales para crear instancias de un objeto de cliente.
Los ejemplos que se muestran a continuación usan , DefaultAzureCredential
que es adecuado para la mayoría de los escenarios, incluidos los entornos de desarrollo y producción locales.
Además, se recomienda usar una identidad administrada para la autenticación en entornos de producción.
Puede encontrar más información sobre las distintas formas de autenticación y sus tipos de credenciales correspondientes en la documentación de Azure Identity .
Para usar el DefaultAzureCredential
proveedor que se muestra a continuación u otros proveedores de credenciales proporcionados con el SDK de Azure, primero debe instalar el paquete Azure.Identity:
dotnet add package Azure.Identity
Cree una instancia de para DefaultAzureCredential
pasar al cliente.
La misma instancia de una credencial de token se puede usar con varios clientes si se autenticarán con la misma identidad.
// Create a new secret client using the default credential from Azure.Identity using environment variables previously set,
// including AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID.
var client = new SecretClient(vaultUri: new Uri(vaultUrl), credential: new DefaultAzureCredential());
// Create a new secret using the secret client.
KeyVaultSecret secret = client.SetSecret("secret-name", "secret-value");
// Retrieve a secret using the secret client.
secret = client.GetSecret("secret-name");
Conceptos clave
KeyVaultSecret
Un KeyVaultSecret
es el recurso fundamental dentro de Azure Key Vault. Desde la perspectiva de un desarrollador, las API de Azure Key Vault aceptan y devuelven valores secretos como cadenas.
SecretClient
A SecretClient
proporciona operaciones sincrónicas y asincrónicas en el SDK que permiten seleccionar un cliente en función del caso de uso de una aplicación.
Una vez que haya inicializado un SecretClient
, puede interactuar con secretos en Azure Key Vault.
Seguridad para subprocesos
Garantizamos que todos los métodos de instancia de cliente son seguros para subprocesos e independientes entre sí (instrucciones). Esto garantiza que la recomendación de reutilizar instancias de cliente siempre es segura, incluso entre subprocesos.
Conceptos adicionales
Opciones | de cliente Acceso a la respuesta | Operaciones | de larga duraciónControl de errores | Diagnóstico | Burla | Duración del cliente
Ejemplos
El paquete Azure.Security.KeyVault.Secrets admite API sincrónicas y asincrónicas.
En la sección siguiente se proporcionan varios fragmentos de código con el client
creado anteriormente, que abarcan algunas de las tareas relacionadas con el servicio secreto de Azure Key Vault más comunes:
Ejemplos de sincronización
- Crear un secreto
- Recuperación de un secreto
- Actualizar un secreto existente
- Eliminar un secreto
- Eliminar y purgar un secreto
- Enumerar secretos
Ejemplos asincrónicos
- Creación de un secreto de forma asincrónica
- Enumeración de secretos de forma asincrónica
- Eliminar un secreto de forma asincrónica
Crear un secreto
SetSecret
crea un objeto KeyVaultSecret
que se va a almacenar en la Key Vault de Azure. Si ya existe un secreto con el mismo nombre, se crea una nueva versión del secreto.
KeyVaultSecret secret = client.SetSecret("secret-name", "secret-value");
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
Console.WriteLine(secret.Properties.Version);
Console.WriteLine(secret.Properties.Enabled);
Recuperación de un secreto
GetSecret
recupera un secreto almacenado previamente en la Key Vault de Azure.
KeyVaultSecret secret = client.GetSecret("secret-name");
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
Actualizar un secreto existente
UpdateSecretProperties
actualiza un secreto previamente almacenado en azure Key Vault. Solo se actualizan los atributos del secreto. Para actualizar el valor, llame a SecretClient.SetSecret
en un secreto con el mismo nombre.
KeyVaultSecret secret = client.GetSecret("secret-name");
// Clients may specify the content type of a secret to assist in interpreting the secret data when its retrieved.
secret.Properties.ContentType = "text/plain";
// You can specify additional application-specific metadata in the form of tags.
secret.Properties.Tags["foo"] = "updated tag";
SecretProperties updatedSecretProperties = client.UpdateSecretProperties(secret.Properties);
Console.WriteLine(updatedSecretProperties.Name);
Console.WriteLine(updatedSecretProperties.Version);
Console.WriteLine(updatedSecretProperties.ContentType);
eliminar un secreto
StartDeleteSecret
inicia una operación de ejecución prolongada para eliminar un secreto previamente almacenado en azure Key Vault.
Puede recuperar el secreto inmediatamente sin esperar a que se complete la operación.
Cuando la eliminación temporal no está habilitada para azure Key Vault, esta operación elimina permanentemente el secreto.
DeleteSecretOperation operation = client.StartDeleteSecret("secret-name");
DeletedSecret secret = operation.Value;
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
Eliminar y purgar un secreto
Tendrá que esperar a que se complete la operación de larga duración antes de intentar purgar o recuperar el secreto.
Para ello, llame a UpdateStatus
en un bucle, como se muestra a continuación:
DeleteSecretOperation operation = client.StartDeleteSecret("secret-name");
// You only need to wait for completion if you want to purge or recover the secret.
// You should call `UpdateStatus` in another thread or after doing additional work like pumping messages.
while (!operation.HasCompleted)
{
Thread.Sleep(2000);
operation.UpdateStatus();
}
DeletedSecret secret = operation.Value;
client.PurgeDeletedSecret(secret.Name);
Enumeración de secretos
En este ejemplo se enumeran todos los secretos de la Key Vault de Azure especificada. El valor no se devuelve al enumerar todos los secretos. Deberá llamar SecretClient.GetSecret
a para recuperar el valor.
Pageable<SecretProperties> allSecrets = client.GetPropertiesOfSecrets();
foreach (SecretProperties secretProperties in allSecrets)
{
Console.WriteLine(secretProperties.Name);
}
Creación de un secreto de forma asincrónica
Las API asincrónicas son idénticas a sus homólogos sincrónicos, pero devuelven con el sufijo "asincrónico" típico para los métodos asincrónicos y devuelven .Task
En este ejemplo se crea un secreto en azure Key Vault con los argumentos opcionales especificados.
KeyVaultSecret secret = await client.SetSecretAsync("secret-name", "secret-value");
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
Enumeración de secretos de forma asincrónica
Enumerar secretos no se basa en esperar el GetPropertiesOfSecretsAsync
método , pero devuelve un AsyncPageable<SecretProperties>
valor que puede usar con la await foreach
instrucción :
AsyncPageable<SecretProperties> allSecrets = client.GetPropertiesOfSecretsAsync();
await foreach (SecretProperties secretProperties in allSecrets)
{
Console.WriteLine(secretProperties.Name);
}
Eliminar un secreto de forma asincrónica
Al eliminar un secreto de forma asincrónica antes de purgarlo, puede esperar al WaitForCompletionAsync
método en la operación.
De forma predeterminada, este bucle se realiza indefinidamente, pero puede cancelarlo pasando un CancellationToken
.
DeleteSecretOperation operation = await client.StartDeleteSecretAsync("secret-name");
// You only need to wait for completion if you want to purge or recover the secret.
await operation.WaitForCompletionAsync();
DeletedSecret secret = operation.Value;
await client.PurgeDeletedSecretAsync(secret.Name);
Solución de problemas
Consulte nuestra guía de solución de problemas para obtener más información sobre cómo diagnosticar varios escenarios de error.
General
Al interactuar con la biblioteca cliente secreta de Azure Key Vault mediante el SDK de .NET, los errores devueltos por el servicio corresponden a los mismos códigos de estado HTTP devueltos para las solicitudes de la API REST.
Por ejemplo, si intenta recuperar un secreto que no existe en azure Key Vault, se devuelve un 404
error que indica Not Found
.
try
{
KeyVaultSecret secret = client.GetSecret("some_secret");
}
catch (RequestFailedException ex)
{
Console.WriteLine(ex.ToString());
}
Observará que se registra información adicional, como el identificador de solicitud de cliente de la operación.
Message:
Azure.RequestFailedException : Service request failed.
Status: 404 (Not Found)
Content:
{"error":{"code":"SecretNotFound","message":"Secret not found: some_secret"}}
Headers:
Cache-Control: no-cache
Pragma: no-cache
Server: Microsoft-IIS/10.0
x-ms-keyvault-region: westus
x-ms-request-id: 625f870e-10ea-41e5-8380-282e5cf768f2
x-ms-keyvault-service-version: 1.1.0.866
x-ms-keyvault-network-info: addr=131.107.174.199;act_addr_fam=InterNetwork;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Strict-Transport-Security: max-age=31536000;includeSubDomains
X-Content-Type-Options: nosniff
Date: Tue, 18 Jun 2019 16:02:11 GMT
Content-Length: 75
Content-Type: application/json; charset=utf-8
Expires: -1
Pasos siguientes
Hay varios ejemplos de biblioteca cliente de secretos de Azure Key Vault disponibles en este repositorio de GitHub. Estos ejemplos proporcionan código de ejemplo para escenarios adicionales que se suelen encontrar al trabajar con Azure Key Vault:
Sample1_HelloWorld.md: para trabajar con Azure Key Vault, entre los que se incluyen:
- Crear un secreto
- Obtención de un secreto existente
- Actualizar un secreto existente
- Eliminar un secreto
Sample2_BackupAndRestore.md: contiene los fragmentos de código que funcionan con secretos de Azure Key Vault, entre los que se incluyen:
- Copia de seguridad y recuperación de un secreto
Sample3_GetSecrets.md: código de ejemplo para trabajar con secretos de Azure Key Vault, entre los que se incluyen:
- Crear secretos
- Enumeración de todos los secretos de la Key Vault
- Actualización de secretos en el Key Vault
- Enumeración de versiones de un secreto especificado
- Eliminación de secretos del Key Vault
- Enumeración de secretos eliminados en el Key Vault
Documentación adicional
- Para obtener documentación más amplia sobre Azure Key Vault, consulte la documentación de referencia de api.
- Para la biblioteca cliente de claves, consulte Biblioteca cliente de claves.
- Para la biblioteca cliente de certificados, consulte Biblioteca cliente de certificados.
Contribuir
Consulte el CONTRIBUTING.md para obtener más información sobre la compilación, las pruebas y la contribución a estas bibliotecas.
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más detalles, visite https://cla.microsoft.com.
Cuando se envía una solicitud de incorporación de cambios, un bot de CLA determinará de forma automática si tiene que aportar un CLA y completar la PR adecuadamente (por ejemplo, la etiqueta, el comentario). Solo siga las instrucciones que le dará el bot. Solo será necesario que lo haga una vez en todos los repositorios con nuestro CLA.
Este proyecto ha adoptado el Código de conducta de Microsoft Open Source. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.
Azure SDK for .NET