Azure Key Vault is een cloudservice voor het veilig opslaan en openen van geheimen. Met de .NET AspireAzure Key Vault-integratie kunt u vanuit uw Azure Key Vault toepassingen verbinding maken met .NET exemplaren.
Hostingintegratie
De Azure Key Vault-hosting integreert Key Vault-bronnen als het AzureKeyVaultResource-type. Als u toegang wilt krijgen tot dit type en API's om ze te gebruiken binnen uw app host project, installeert u de 📦Aspire.Hosting.Azure.KeyVault NuGet-pakket.
Roep in uw app-hostproject AddAzureKeyVault aan op het builder-exemplaar om een Azure Key Vault resource toe te voegen:
var builder = DistributedApplication.CreateBuilder(args);
var keyVault = builder.AddAzureKeyVault("key-vault");
builder.AddProject<Projects.ExampleProject>()
.WithReference(keyVault);
// After adding all resources, run the app...
De methode WithReference configureert een verbinding in de ExampleProject met de naam "key-vault".
Belangrijk
Standaard configureert AddAzureKeyVault een ingebouwde rol van Key Vault-beheerder.
Tip
Wanneer u AddAzureKeyVaultaanroept, wordt impliciet AddAzureProvisioningaangeroepen, waardoor ondersteuning wordt toegevoegd voor het dynamisch genereren van Azure resources tijdens het opstarten van de app. De app moet het juiste abonnement en de juiste locatie configureren. Zie Lokale inrichting: Configuratievoor meer informatie.
Gegenereerde implementatie Bicep
Als je nieuw bent met Bicep, is dit een domeinspecifieke taal voor het definiëren van Azure-bronnen. Met .NET.NET Aspirehoeft u bicep niet handmatig te schrijven, in plaats daarvan genereren de inrichtings-API's Bicep voor u. Wanneer u uw app publiceert, wordt de gegenereerde Bicep samen met het manifestbestand weergegeven. Wanneer u een Azure Key Vault resource toevoegt, wordt de volgende Bicep gegenereerd:
De voorgaande Bicep is een module die een Azure Key Vault resource in richt met de volgende standaardwaarden:
location: de locatie van de resourcegroep.
principalId: De hoofdid van de gebruiker of serviceprincipal.
principalType: het principal-type van de gebruiker of service-principal.
key_vault: de Azure Key Vault-bron
name: Een unieke naam voor de Azure Key Vault.
properties: de eigenschappen van de Azure Key Vault:
tenantId: de huurder-ID van de Azure Key Vault.
sku: de Azure Key Vault-SKU:
family: de SKU-familie.
name: de SKU-naam.
enableRbacAuthorization: een Booleaanse waarde die aangeeft of de Azure Key Vault RBAC-autorisatie (op rollen gebaseerd toegangsbeheer) heeft ingeschakeld.
tags: de Azure Key Vault tags.
key_vault_KeyVaultAdministrator: de roltoewijzing van de Azure Key Vault beheerder:
name: een unieke naam voor de roltoewijzing.
properties: de eigenschappen van de roltoewijzing:
principalId: de principal-id van de gebruiker of service-principal.
roleDefinitionId: de roldefinitie-id van de Azure Key Vault-beheerdersrol.
principalType: Het hoofdtype van de gebruiker of service-principal.
scope: De omvang van een roltoewijzing.
output: de Azure Key Vault-URI.
De gegenereerde Bicep is een uitgangspunt en kan worden aangepast aan uw specifieke vereisten.
Voorzieningsinfrastructuur personaliseren
Alle .NET AspireAzure resources zijn subklassen van het AzureProvisioningResource type. Met dit type kunt u de gegenereerde Bicep aanpassen door een vloeiende API te gebruiken om de Azure-resources te configureren met behulp van de ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>)-API. U kunt bijvoorbeeld de sku, RBAC, tagsen meer configureren. In het volgende voorbeeld ziet u hoe u de Azure Key Vault resource kunt aanpassen:
builder.AddAzureKeyVault("key-vault")
.ConfigureInfrastructure(infra =>
{
var keyVault = infra.GetProvisionableResources()
.OfType<KeyVaultService>()
.Single();
keyVault.Properties.Sku = new()
{
Family = KeyVaultSkuFamily.A,
Name = KeyVaultSkuName.Premium,
};
keyVault.Properties.EnableRbacAuthorization = true;
keyVault.Tags.Add("ExampleKey", "Example value");
});
Verbinding maken met een bestaand Azure Key Vault-exemplaar
Mogelijk hebt u een bestaand Azure Key Vault exemplaar waarmee u verbinding wilt maken. In plaats van een nieuwe Azure Key Vault resource weer te geven, kunt u een verbindingsreeks toevoegen aan de app-host. Als u een verbinding wilt toevoegen aan een bestaande Azure Key Vault-resource, roept u de methode AddConnectionString aan:
var builder = DistributedApplication.CreateBuilder(args);
var keyVault = builder.AddConnectionString("key-vault");
builder.AddProject<Projects.WebApplication>("web")
.WithReference(keyVault);
// After adding all resources, run the app...
Notitie
Verbindingsreeksen worden gebruikt om een breed scala aan verbindingsgegevens weer te geven, waaronder databaseverbindingen, berichtbrokers, eindpunt-URI's en andere services. In .NET.NET Aspire nomenclatuur wordt de term "verbindingsreeks" gebruikt om alle soorten verbindingsgegevens weer te geven.
De verbindingsreeks is geconfigureerd in de configuratie van de app-host, meestal onder gebruikersgeheimen, onder de sectie ConnectionStrings. De app-host injecteert deze verbindingsreeks als een omgevingsvariabele in alle afhankelijke resources, bijvoorbeeld:
De afhankelijke resource heeft toegang tot de geïnjecteerde verbindingsreeks door de methode GetConnectionString aan te roepen en de verbindingsnaam door te geven als de parameter, in dit geval "key-vault". De GetConnectionString-API is een afkorting voor IConfiguration.GetSection("ConnectionStrings")[name].
Client integratie
Installeer de 📦AspireAzure.Security.KeyVault NuGet-pakket in het client-consumerende project, dat wil zeggen het project voor de toepassing die gebruikmaakt van de Azure Key Vault-client, om aan de slag te gaan met de .NET AspireAzure Key Vault-clientintegratie.
De clientintegratie biedt twee manieren om toegang te krijgen tot geheimen vanuit Azure Key Vault:
Voeg geheimen toe aan de app-configuratie met behulp van de IConfiguration of het IOptions<T> patroon.
Gebruik een SecretClient om geheimen op aanvraag op te halen.
Geheimen toevoegen aan configuratie
Roep in het Program.cs bestand van het clientintensieve project de AddAzureKeyVaultSecrets-extensiemethode aan op de IConfiguration om de geheimen toe te voegen als onderdeel van de configuratie van uw app. De methode gebruikt een verbindingsnaamparameter.
De AddAzureKeyVaultSecrets API-naam heeft enige verwarring veroorzaakt. De methode wordt gebruikt om de SecretClient te configureren op basis van de opgegeven verbindingsnaam en deze niet wordt gebruikt om geheimen toe te voegen aan de configuratie.
Tip
De parameter connectionName moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de Azure Key Vault resource in het app-hostproject. Zie voor meer informatie Azure Key Vault bron toevoegen.
Vervolgens kunt u een configuratiewaarde op basis van een geheim ophalen via de normale IConfiguration API's, of zelfs door te binden aan sterk getypte klassen met het optiespatroon . Als u een geheim wilt ophalen uit een voorbeeldserviceklasse die is geregistreerd bij de container voor afhankelijkheidsinjectie, kunt u de volgende codefragmenten overwegen:
IConfiguration exemplaar ophalen
public class ExampleService(IConfiguration configuration)
{
// Use configuration...
private string _secretValue = configuration["SecretKey"];
}
In het voorgaande voorbeeld wordt ervan uitgegaan dat u ook het exemplaar IConfiguration voor dependency injection hebt geregistreerd. Zie Afhankelijkheidsinjectie in .NETvoor meer informatie.
IOptions<T> exemplaar ophalen
public class ExampleService(IOptions<SecretOptions> options)
{
// Use options...
private string _secretValue = options.Value.SecretKey;
}
In het voorgaande voorbeeld wordt ervan uitgegaan dat u een SecretOptions-klasse hebt geconfigureerd voor gebruik met het optiespatroon. Zie Options-patroon in .NETvoor meer informatie.
Aanvullende AddAzureKeyVaultSecrets API-parameters zijn optioneel beschikbaar voor de volgende scenario's:
Action<AzureSecurityKeyVaultSettings>? configureSettings: als u enkele of alle opties inline wilt instellen.
Action<SecretClientOptions>? configureClientOptions: De SecretClientOptions inline instellen.
U kunt de SecretClient ook rechtstreeks gebruiken om de geheimen op aanvraag op te halen. Hiervoor is een iets andere registratie-API vereist.
Roep in het Program.cs bestand van het clientgebruikte project de AddAzureKeyVaultClient-extensie aan op het IHostApplicationBuilder-exemplaar om een SecretClient te registreren voor gebruik via de afhankelijkheidsinjectiecontainer.
De parameter connectionName moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de Azure Key Vault resource in het app-hostproject. Zie voor meer informatie Azure Key Vault bron toevoegen.
Nadat u de SecretClient aan de builder hebt toegevoegd, kunt u de SecretClient instantie verkrijgen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de client wilt ophalen uit een voorbeeldservice, definieert u deze als een constructorparameter en zorgt u ervoor dat de klasse ExampleService is geregistreerd bij de container voor afhankelijkheidsinjectie:
public class ExampleService(SecretClient client)
{
// Use client...
}
Voor meer informatie over afhankelijkheidsinjectie, zie .NET.
Keyed Azure Key Vault-client toevoegen
Er kunnen situaties zijn waarin u meerdere SecretClient exemplaren met verschillende verbindingsnamen wilt registreren. Om kliënten met sleutel Azure Key Vault te registreren, roept u de methode AddKeyedAzureKeyVaultClient op.
Vervolgens kunt u de SecretClient instanties ophalen via afhankelijkheidsinjectie. Als u bijvoorbeeld de client wilt ophalen uit een voorbeeldservice:
public class ExampleService(
[FromKeyedServices("feature-toggles")] SecretClient featureTogglesClient,
[FromKeyedServices("admin-portal")] SecretClient adminPortalClient)
{
// Use clients...
}
De .NET AspireAzure Key Vault-integratie biedt meerdere opties voor het configureren van de SecretClient op basis van de vereisten en conventies van uw project.
Als u uw configuraties hebt ingesteld in de sectie Aspire:Azure:Security:KeyVault van uw appsettings.json-bestand, kunt u de methode AddAzureKeyVaultSecrets aanroepen zonder parameters door te geven.
Gebruik inline delegates
U kunt ook de Action<AzureSecurityKeyVaultSettings> delegate doorgeven om enkele of alle opties direct in te stellen, bijvoorbeeld om de AzureSecurityKeyVaultSettings.VaultUriin te stellen:
builder.AddAzureKeyVaultSecrets(
connectionName: "key-vault",
configureSettings: settings => settings.VaultUri = new Uri("KEY_VAULT_URI"));
U kunt de SecretClientOptions ook instellen met behulp van Action<SecretClientOptions> gemachtigde. Dit is een optionele parameter van de AddAzureKeyVaultSecrets-methode. Als u bijvoorbeeld de KeyClientOptions.DisableChallengeResourceVerification-id wilt instellen om de client te identificeren:
Een URI naar de kluis waarop de client werkt. Wordt weergegeven als 'DNS-naam' in de Azure-portal.
Gezondheidscontroles voor Client-integratie
.NET
.NET Aspire
clientintegraties hebben standaard gezondheidscontroles ingeschakeld voor alle diensten. Evenzo, schakelen veel .NET.NET Aspirehostingintegraties ook eindpunten voor gezondheidscontrole in. Zie voor meer informatie:
De .NET AspireAzure Key Vault-integratie bevat de volgende statuscontroles:
Hiermee voegt u de AzureKeyVaultSecretsHealthCheck statuscontrole toe, waarmee verbinding wordt gemaakt met de Key Vault en er query's op wordt uitgevoerd
Kan worden geïntegreerd met het /health HTTP-eindpunt, waarbij alle geregistreerde gezondheidscontroles moeten slagen voordat de app als gereed wordt beschouwd om verkeer te accepteren.
Waarneembaarheid en telemetrie
.NET
.NET Aspire integraties configureren automatisch logging-, tracing- en metrische configuraties, die ook wel bekend zijn als de pijlers van waarneembaarheid. Zie .NET.NET Aspire overzicht van integratieintegratiesvoor meer informatie over de waarneembaarheid en telemetrie van integraties. Afhankelijk van de back-upservice ondersteunen sommige integraties mogelijk slechts enkele van deze functies. Sommige integraties ondersteunen bijvoorbeeld logboekregistratie en tracering, maar geen metrische gegevens. Telemetriefuncties kunnen ook worden uitgeschakeld met behulp van de technieken die worden weergegeven in de sectie Configuratie.
Loggen
De .NET AspireAzure Key Vault-integratie maakt gebruik van de volgende logboekcategorieën:
Azure.Core
Azure.Identity
Traceren
De .NET AspireAzure Key Vault-integratie verzendt de volgende traceringsactiviteiten met behulp van OpenTelemetry:
Azure.Security.KeyVault.Secrets.SecretClient
Statistieken
De .NET AspireAzure Key Vault-integratie biedt momenteel geen ondersteuning voor metrische gegevens vanwege beperkingen met de Azure SDK.
De bron voor deze inhoud vindt u op GitHub, waar u ook problemen en pull-aanvragen kunt maken en controleren. Bekijk onze gids voor inzenders voor meer informatie.
.NET Aspire-feedback
.NET Aspire is een open source project. Selecteer een koppeling om feedback te geven:
Ontdek hoe u een instantie van Azure Key Vault kunt maken waarin u de waarden van geheimen kunt opslaan en hoe u beveiligde toegang tot de kluis kunt inschakelen.
Demonstreer de functies van Microsoft Entra ID om identiteitsoplossingen te moderniseren, hybride oplossingen te implementeren en identiteitsbeheer te implementeren.