Azure Key Vault hemligt klientbibliotek för .NET – version 4.5.0
Azure Key Vault är en molntjänst som tillhandahåller en säker lagring av hemligheter, till exempel lösenord och databasanslutningssträngar.
Med klientbiblioteket för Azure Key Vault hemligheter kan du på ett säkert sätt lagra och kontrollera åtkomsten till token, lösenord, API-nycklar och andra hemligheter. Det här biblioteket erbjuder åtgärder för att skapa, hämta, uppdatera, ta bort, rensa, säkerhetskopiera, återställa och lista hemligheterna och dess versioner.
Källkod | Paket (NuGet) | API-referensdokumentation | Produktdokumentation | Prover | Migreringsguide
Komma igång
Installera paketet
Installera klientbiblioteket för Azure Key Vault secrets för .NET med NuGet:
dotnet add package Azure.Security.KeyVault.Secrets
Förutsättningar
- En Azure-prenumeration.
- En befintlig Azure-Key Vault. Om du behöver skapa en Azure-Key Vault kan du använda Azure Portal eller Azure CLI.
- Auktorisering till en befintlig Azure-Key Vault med antingen RBAC (rekommenderas) eller åtkomstkontroll.
Om du använder Azure CLI ersätter <your-resource-group-name>
du och <your-key-vault-name>
med dina egna unika namn:
az keyvault create --resource-group <your-resource-group-name> --name <your-key-vault-name>
Autentisera klienten
För att kunna interagera med Azure Key Vault-tjänsten måste du skapa en instans av klassen SecretClient. Du behöver en valv-URL som du kan se som "DNS-namn" i portalen och autentiseringsuppgifter för att instansiera ett klientobjekt.
Exemplen som visas nedan använder en DefaultAzureCredential
, som är lämplig för de flesta scenarier, inklusive lokala utvecklings- och produktionsmiljöer.
Dessutom rekommenderar vi att du använder en hanterad identitet för autentisering i produktionsmiljöer.
Du hittar mer information om olika sätt att autentisera och deras motsvarande typer av autentiseringsuppgifter i Azure Identity-dokumentationen .
Om du vill använda providern DefaultAzureCredential
som visas nedan eller andra leverantörer av autentiseringsuppgifter som tillhandahålls med Azure SDK måste du först installera Azure.Identity-paketet:
dotnet add package Azure.Identity
Instansiera en DefaultAzureCredential
för att skicka till klienten.
Samma instans av en tokenautentiseringsuppgift kan användas med flera klienter om de ska autentiseras med samma identitet.
// 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");
Viktiga begrepp
KeyVaultSecret
A KeyVaultSecret
är den grundläggande resursen i Azure Key Vault. Ur utvecklarperspektiv accepterar och returnerar Azure Key Vault API:er hemliga värden som strängar.
SecretClient
A SecretClient
tillhandahåller både synkrona och asynkrona åtgärder i SDK så att du kan välja en klient baserat på ett programs användningsfall.
När du har initierat en SecretClient
kan du interagera med hemligheter i Azure Key Vault.
Trådsäkerhet
Vi garanterar att alla klientinstansmetoder är trådsäkra och oberoende av varandra (riktlinje). Detta säkerställer att rekommendationen att återanvända klientinstanser alltid är säker, även över trådar.
Ytterligare begrepp
Klientalternativ | Åtkomst till svaret | Långvariga åtgärder | Hantera fel | Diagnostik | Gäckande | Klientlivslängd
Exempel
Paketet Azure.Security.KeyVault.Secrets stöder synkrona och asynkrona API:er.
Följande avsnitt innehåller flera kodfragment med hjälp av ovanståendeclient
, som omfattar några av de vanligaste uppgifterna för Azure Key Vault secret service:
Synkroniseringsexempel
- Skapa en hemlighet
- Hämta en hemlighet
- Uppdatera en befintlig hemlighet
- Ta bort en hemlighet
- Ta bort och rensa en hemlighet
- Lista hemligheter
Asynkrona exempel
- Skapa en hemlighet asynkront
- Visa en lista över hemligheter asynkront
- Ta bort en hemlighet asynkront
Skapa en hemlighet
SetSecret
skapar en KeyVaultSecret
som ska lagras i Azure Key Vault. Om det redan finns en hemlighet med samma namn skapas en ny version av hemligheten.
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);
Hämta en hemlighet
GetSecret
hämtar en hemlighet som tidigare lagrats i Azure Key Vault.
KeyVaultSecret secret = client.GetSecret("secret-name");
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
Uppdatera en befintlig hemlighet
UpdateSecretProperties
uppdaterar en hemlighet som tidigare lagrats i Azure Key Vault. Endast attributen för hemligheten uppdateras. Om du vill uppdatera värdet anropar du SecretClient.SetSecret
en hemlighet med samma namn.
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);
Ta bort en hemlighet
StartDeleteSecret
startar en tidskrävande åtgärd för att ta bort en hemlighet som tidigare lagrats i Azure Key Vault.
Du kan hämta hemligheten omedelbart utan att vänta på att åtgärden ska slutföras.
När mjuk borttagning inte är aktiverat för Azure-Key Vault tar den här åtgärden bort hemligheten permanent.
DeleteSecretOperation operation = client.StartDeleteSecret("secret-name");
DeletedSecret secret = operation.Value;
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
Ta bort och rensa en hemlighet
Du måste vänta tills den långvariga åtgärden har slutförts innan du försöker rensa eller återställa hemligheten.
Du kan göra detta genom att anropa UpdateStatus
i en loop enligt nedan:
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);
Visa en lista över hemligheter
I det här exemplet visas alla hemligheter i den angivna Azure-Key Vault. Värdet returneras inte när alla hemligheter listas. Du måste anropa SecretClient.GetSecret
för att hämta värdet.
Pageable<SecretProperties> allSecrets = client.GetPropertiesOfSecrets();
foreach (SecretProperties secretProperties in allSecrets)
{
Console.WriteLine(secretProperties.Name);
}
Skapa en hemlighet asynkront
De asynkrona API:erna är identiska med deras synkrona motsvarigheter, men returnerar med det typiska Suffixet "Async" för asynkrona metoder och returnerar ett Task
.
Det här exemplet skapar en hemlighet i Azure Key Vault med de angivna valfria argumenten.
KeyVaultSecret secret = await client.SetSecretAsync("secret-name", "secret-value");
Console.WriteLine(secret.Name);
Console.WriteLine(secret.Value);
Visa en lista över hemligheter asynkront
Att visa hemligheter förlitar sig inte på att vänta på GetPropertiesOfSecretsAsync
metoden, men returnerar ett AsyncPageable<SecretProperties>
som du kan använda med -instruktionen await foreach
:
AsyncPageable<SecretProperties> allSecrets = client.GetPropertiesOfSecretsAsync();
await foreach (SecretProperties secretProperties in allSecrets)
{
Console.WriteLine(secretProperties.Name);
}
Ta bort en hemlighet asynkront
När du tar bort en hemlighet asynkront innan du rensar den kan du vänta WaitForCompletionAsync
på -metoden för åtgärden.
Som standard loopar den här loopen på obestämd tid, men du kan avbryta den genom att skicka en 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);
Felsökning
Mer information om hur du diagnostiserar olika felscenarier finns i vår felsökningsguide .
Allmänt
När du interagerar med Azure Key Vault hemliga klientbiblioteket med hjälp av .NET SDK motsvarar fel som returneras av tjänsten samma HTTP-statuskoder som returneras för REST API-begäranden.
Om du till exempel försöker hämta en hemlighet som inte finns i azure-Key Vault returneras ett 404
fel som anger Not Found
.
try
{
KeyVaultSecret secret = client.GetSecret("some_secret");
}
catch (RequestFailedException ex)
{
Console.WriteLine(ex.ToString());
}
Du kommer att märka att ytterligare information loggas, till exempel ID för klientbegäran för åtgärden.
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
Nästa steg
Det finns flera azure-Key Vault exempel på hemligheter i klientbiblioteket på den här GitHub-lagringsplatsen. De här exemplen innehåller exempelkod för ytterligare scenarier som ofta påträffas när du arbetar med Azure Key Vault:
Sample1_HelloWorld.md – för att arbeta med Azure Key Vault, inklusive:
- Skapa en hemlighet
- Hämta en befintlig hemlighet
- Uppdatera en befintlig hemlighet
- Ta bort hemlighet
Sample2_BackupAndRestore.md – innehåller kodfragment som arbetar med Azure Key Vault hemligheter, inklusive:
- Säkerhetskopiera och återställa en hemlighet
Sample3_GetSecrets.md – exempelkod för att arbeta med Azure Key Vault hemligheter, inklusive:
- Skapa hemligheter
- Visa en lista över alla hemligheter i Key Vault
- Uppdatera hemligheter i Key Vault
- Lista versioner av en angiven hemlighet
- Ta bort hemligheter från Key Vault
- Lista borttagna hemligheter i Key Vault
Ytterligare dokumentation
- Mer omfattande dokumentation om Azure Key Vault finns i API-referensdokumentationen.
- Klientbiblioteket nycklar finns i Klientbibliotek för nycklar.
- Klientbibliotek för certifikat finns i Certifikatklientbibliotek.
Bidra
Mer information om hur du skapar, testar och bidrar till dessa bibliotek finns i CONTRIBUTING.md .
Det här projektet välkomnar bidrag och förslag. Merparten av bidragen kräver att du godkänner ett licensavtal för bidrag, där du deklarerar att du har behörighet att bevilja oss rättigheten att använda ditt bidrag, och att du dessutom uttryckligen gör så. Mer information finns på https://cla.microsoft.com.
När du skickar en pull-förfrågan avgör en CLA-robot automatiskt om du måste tillhandahålla ett licensavtal för bidrag med lämplig PR (t.ex. etikett eller kommentar). Följ bara robotens anvisningar. Du behöver bara göra detta en gång för alla repor som använder vårt licensavtal för bidrag.
Det här projektet använder sig av Microsofts uppförandekod för öppen källkod. Mer information finns i Vanliga frågor och svar om uppförandekod eller kontakt opencode@microsoft.com med ytterligare frågor eller kommentarer.
Azure SDK for .NET