integrace .NET AspireAzure Key Vault
zahrnuje: integraci hostování a
Client integraci
Azure Key Vault je cloudová služba pro bezpečné ukládání tajných kódů a přístup k nim. Integrace .NET AspireAzure Key Vault umožňuje připojení k Azure Key Vault instancím z aplikací .NET.
Integrace hostování
Integrační hostování Azure Key Vault modeluje jako typ AzureKeyVaultResource prostředek služby Key Vault. Pokud chcete získat přístup k tomuto typu a rozhraním API pro jejich vyjádření v rámci vašeho projektu hostitele aplikace , nainstalujte balíček NuGet 📦Aspire.Hosting.Azure.KeyVault.
dotnet add package Aspire.Hosting.Azure.KeyVault
Další informace najdete v tématu dotnet add package nebo Správa závislostí balíčků v .NET aplikacích.
Přidej Azure Key Vault prostředek
V projektu hostitele aplikace zavolejte AddAzureKeyVault v instanci tvůrce a přidejte prostředek Azure Key Vault:
var builder = DistributedApplication.CreateBuilder(args);
var keyVault = builder.AddAzureKeyVault("key-vault");
builder.AddProject<Projects.ExampleProject>()
.WithReference(keyVault);
// After adding all resources, run the app...
Metoda WithReference nakonfiguruje připojení v ExampleProject
s názvem "key-vault"
.
Důležité
Ve výchozím nastavení AddAzureKeyVault
konfiguruje vestavěnou roli správce služby Key Vault .
Spropitné
Když voláte AddAzureKeyVault, implicitně volá AddAzureProvisioning, což přidává podporu pro generování Azure prostředků dynamicky během spouštění aplikace. Aplikace musí nakonfigurovat příslušné předplatné a umístění. Pro více informací si přečtěte Místní zřizování: Konfigurace.
Vygenerované přidělování Bicep
Pokud jste nováčkem v Bicep, jedná se o specifický jazyk pro danou oblast k definování Azure prostředků. S .NET.NET Aspire nemusíte psát Bicep ručně, protože provisionovací API generují Bicep za vás. Když publikujete aplikaci, vygenerovaný soubor Bicep je součástí výstupu společně se souborem manifestu. Když přidáte prostředek Azure Key Vault, vygeneruje se následující Bicep:
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
param principalType string
param principalId string
resource key_vault 'Microsoft.KeyVault/vaults@2023-07-01' = {
name: take('keyvault-${uniqueString(resourceGroup().id)}', 24)
location: location
properties: {
tenantId: tenant().tenantId
sku: {
family: 'A'
name: 'standard'
}
enableRbacAuthorization: true
}
tags: {
'aspire-resource-name': 'key-vault'
}
}
resource key_vault_KeyVaultAdministrator 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(key_vault.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '00482a5a-887f-4fb3-b363-3b7fe8e74483'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '00482a5a-887f-4fb3-b363-3b7fe8e74483')
principalType: principalType
}
scope: key_vault
}
output vaultUri string = key_vault.properties.vaultUri
Předchozí modul Bicep je modul, který zřídí prostředek Azure Key Vault s následujícími výchozími hodnotami.
-
location
: Umístění skupiny prostředků. -
principalId
: Hlavní ID uživatele nebo služby 'principálu'. -
principalType
: Hlavní typ uživatele nebo služby principál. -
key_vault
: Prostředek Azure Key Vault:-
name
: Jedinečný název pro Azure Key Vault. -
properties
: Vlastnosti Azure Key Vault:-
tenantId
: ID nájemníka Azure Key Vault. -
sku
: Skladová položka Azure Key Vault:-
family
: Rodina SKU. -
name
: Název skladové položky.
-
-
enableRbacAuthorization
: Logická hodnota, která označuje, jestli má Azure Key Vault povolenou autorizaci řízení přístupu na základě role (RBAC).
-
-
tags
: Značky Azure Key Vault.
-
-
key_vault_KeyVaultAdministrator
: Přiřazení role správce Azure Key Vault:-
name
: Jedinečný název pro přiřazení role. -
properties
: Vlastnosti přiřazení role:-
principalId
: Hlavní ID uživatele nebo servisního objektu. -
roleDefinitionId
: ID definice role správce Azure Key Vault. -
principalType
: Hlavní typ uživatele nebo služebního objektu.
-
-
scope
: Rozsah přiřazení role.
-
-
output
: Identifikátor URI Azure Key Vault.
Vygenerovaný Bicep je výchozím bodem a můžete ho přizpůsobit tak, aby splňoval vaše konkrétní požadavky.
Přizpůsobení infrastruktury poskytování
Všechny resursy .NET AspireAzure jsou podtřídami typu AzureProvisioningResource. Tento typ umožňuje přizpůsobení vygenerovaného Bicep poskytnutím plynulého API pro konfiguraci prostředků Azure pomocí rozhraní ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>). Můžete například nakonfigurovat sku
, RBAC
, tags
atd. Následující příklad ukazuje, jak přizpůsobit zdroj Azure Key Vault:
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");
});
Předchozí kód:
- Zřetězení volání k rozhraní API ConfigureInfrastructure:
- Parametr
infra
je instance typu AzureResourceInfrastructure. - Přidělitelné prostředky jsou načteny voláním metody GetProvisionableResources().
- Jeden zdroj KeyVaultService se načte.
- Vlastnost
Sku
je nastavena na novou instanci KeyVaultSku. - Vlastnost KeyVaultProperties.EnableRbacAuthorization je nastavena na
true
. - Ke zdroji je přidána značka s klíčem
ExampleKey
a hodnotouExample value
.
- Parametr
K dispozici je mnoho dalších možností konfigurace pro přizpůsobení prostředku služby Key Vault. Další informace najdete v tématu Azure.Provisioning.KeyVault a Azure. Přizpůsobení při zřizování.
Připojení k existující instanci Azure Key Vault
Možná máte existující instanci Azure Key Vault, ke které se chcete připojit. Místo vytváření nového prostředku Azure Key Vault můžete přidat připojovací řetězec do hostitelského prostředí aplikace. Pokud chcete přidat připojení k existujícímu prostředku Azure Key Vault, zavolejte metodu AddConnectionString:
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...
Poznámka:
Připojovací řetězce se používají k reprezentaci široké škály informací o připojení, včetně databázových připojení, zprostředkovatelů zpráv, identifikátorů URI koncových bodů a dalších služeb. V .NET.NET Aspire terminologii se výraz "připojovací řetězec" používá k reprezentaci jakéhokoli druhu informací o připojení.
Připojovací řetězec se konfiguruje v konfiguraci hostitele aplikace, obvykle v části Tajné kódy uživatelův části ConnectionStrings
. Hostitel aplikace injektuje tento připojovací řetězec jako proměnnou prostředí například do všech závislých prostředků:
{
"ConnectionStrings": {
"key-vault": "https://{account_name}.vault.azure.net/"
}
}
Závislý prostředek může přistupovat k vloženému připojovacímu řetězci voláním metody GetConnectionString a předáním názvu připojení jako parametru, v tomto případě "key-vault"
. API rozhraní GetConnectionString
je zkratka pro IConfiguration.GetSection("ConnectionStrings")[name]
.
Client integrace
Chcete-li začít s integrací klienta .NET AspireAzure Key Vault, nainstalujte balíček NuGet 📦Aspire.Azure.Security.KeyVault do projektu, který klienta aktivně spotřebovává, což je projekt aplikace používající klienta Azure Key Vault.
dotnet add package Aspire.Azure.Security.KeyVault
Integrace klienta poskytuje dva způsoby přístupu k tajným kódům z Azure Key Vault:
- Přidejte tajné kódy do konfigurace aplikace pomocí
IConfiguration
nebo vzoruIOptions<T>
. - K načtení tajných kódů na vyžádání použijte
SecretClient
.
Přidání tajných kódů do konfigurace
V souboru Program.cs ve vašem projektu, který využívá klienta, zavolejte metodu rozšíření AddAzureKeyVaultSecrets na IConfiguration a přidejte tajemství jako součást konfigurace vaší aplikace. Metoda přebírá parametr názvu připojení.
builder.Configuration.AddAzureKeyVaultSecrets(connectionName: "key-vault");
Poznámka:
Název rozhraní API AddAzureKeyVaultSecrets
způsobil trochu nejasnosti. Metoda se používá ke konfiguraci SecretClient
na základě daného názvu připojení a se nepoužívá k přidání tajných kódů do konfigurace.
Spropitné
Parametr connectionName
se musí shodovat s názvem použitým při přidávání prostředku Azure Key Vault do hostitelského projektu aplikace. Další informace naleznete v části Přidání Azure Key Vault prostředků.
Poté můžete načíst hodnotu konfigurace založenou na tajných klíčích prostřednictvím běžných rozhraní API IConfiguration nebo dokonce pomocí připojení k typově silným třídám se vzorem možností . Pokud chcete načíst tajemství z ukázkové třídy služby zaregistrované v kontejneru injektáže závislostí, zvažte následující fragmenty kódu.
Načtení instance IConfiguration
public class ExampleService(IConfiguration configuration)
{
// Use configuration...
private string _secretValue = configuration["SecretKey"];
}
Předchozí příklad předpokládá, že jste také zaregistrovali instanci IConfiguration
pro injektáž závislostí. Další informace naleznete v tématu Injektáž závislostí v .NET.
Načtení instance IOptions<T>
public class ExampleService(IOptions<SecretOptions> options)
{
// Use options...
private string _secretValue = options.Value.SecretKey;
}
Předchozí příklad předpokládá, že jste nakonfigurovali třídu SecretOptions
pro použití se vzorem možností. Další informace naleznete v části Možnosti vzoru v .NET.
Další parametry rozhraní API AddAzureKeyVaultSecrets
jsou volitelně k dispozici pro následující scénáře:
-
Action<AzureSecurityKeyVaultSettings>? configureSettings
: Chcete-li nastavit některé nebo všechny možnosti přímo v textu. -
Action<SecretClientOptions>? configureClientOptions
: Nastavit SecretClientOptions inline. -
AzureKeyVaultConfigurationOptions? options
: Nakonfigurovat AzureKeyVaultConfigurationOptions vloženě.
Přidejte tajného klienta Azure
Případně můžete použít SecretClient přímo k načtení tajných kódů na vyžádání. To vyžaduje trochu jiné rozhraní API pro registraci.
V souboru Program.cs projektu, který využívá klienta, zavolejte rozšíření AddAzureKeyVaultClient instance IHostApplicationBuilder a zaregistrujte SecretClient
pro použití prostřednictvím kontejneru injektáže závislostí.
builder.AddAzureKeyVaultClient(connectionName: "key-vault");
Spropitné
Parametr connectionName
se musí shodovat s názvem použitým při přidávání prostředku Azure Key Vault do hostitelského projektu aplikace. Další informace naleznete v části Přidání Azure Key Vault prostředků.
Po přidání SecretClient
do tvůrce můžete získat instanci SecretClient pomocí injektáže závislostí. Pokud například chcete získat klienta z příkladové služby, definujte ho jako parametr konstruktoru a ujistěte se, že je třída ExampleService
zaregistrovaná v kontejneru injektáži závislostí.
public class ExampleService(SecretClient client)
{
// Use client...
}
Další informace o injektáži závislostí najdete v tématu .NET injektáž závislostí.
Přidejte klienta Azure Key Vault s klíčem
Mohou nastat situace, kdy chcete zaregistrovat více instancí SecretClient
s různými názvy připojení. Pokud chcete zaregistrovat klíčované klienty Azure Key Vault, zavolejte metodu AddKeyedAzureKeyVaultClient:
builder.AddKeyedAzureKeyVaultClient(name: "feature-toggles");
builder.AddKeyedAzureKeyVaultClient(name: "admin-portal");
Potom můžete získat instance SecretClient
pomocí dependency injection. Například pro získání klienta z ukázkové služby:
public class ExampleService(
[FromKeyedServices("feature-toggles")] SecretClient featureTogglesClient,
[FromKeyedServices("admin-portal")] SecretClient adminPortalClient)
{
// Use clients...
}
Další informace o klíčových službách najdete v tématu .NET injektáž závislostí: klíčové služby.
Konfigurace
Integrace .NET AspireAzure Key Vault poskytuje několik možností konfigurace SecretClient
na základě požadavků a konvencí projektu.
Použití zprostředkovatelů konfigurace
Integrace .NET AspireAzure Key Vault podporuje Microsoft.Extensions.Configuration. Načte AzureSecurityKeyVaultSettings z appsettings.json nebo jiných konfiguračních souborů pomocí klíče Aspire:Azure:Security:KeyVault
.
{
"Aspire": {
"Azure": {
"Security": {
"KeyVault": {
"DisableHealthChecks": true,
"DisableTracing": false,
"ClientOptions": {
"Diagnostics": {
"ApplicationId": "myapp"
}
}
}
}
}
}
}
Kompletní schéma integrace klienta Azure Key VaultJSON naleznete viz Aspire.Azure. Security.KeyVault/ConfigurationSchema.json.
Pokud jste nastavili konfigurace v části Aspire:Azure:Security:KeyVault
souboru appsettings.json, stačí zavolat metodu AddAzureKeyVaultSecrets
bez předání parametrů.
Použití vložených delegátů
Můžete také předat delegáta Action<AzureSecurityKeyVaultSettings>
k nastavení některých nebo všech možností in-line, například pro nastavení AzureSecurityKeyVaultSettings.VaultUri:
builder.AddAzureKeyVaultSecrets(
connectionName: "key-vault",
configureSettings: settings => settings.VaultUri = new Uri("KEY_VAULT_URI"));
Můžete také nastavit SecretClientOptions pomocí Action<SecretClientOptions>
delegáta, což je volitelný parametr metody AddAzureKeyVaultSecrets
. Pokud chcete například nastavit ID KeyClientOptions.DisableChallengeResourceVerification pro identifikaci klienta:
builder.AddAzureKeyVaultSecrets(
connectionName: "key-vault",
configureClientOptions: options => options.DisableChallengeResourceVerification = true))
Možnosti konfigurace
Prostřednictvím třídy AzureSecurityKeyVaultSettings jsou zpřístupněny následující konfigurovatelné možnosti:
Jméno | Popis |
---|---|
AzureSecurityKeyVaultSettings.Credential | Přihlašovací údaje použité pro autentizaci k Azure Key Vault. |
AzureSecurityKeyVaultSettings.DisableHealthChecks | Logická hodnota označující, jestli je kontrola stavu služby Key Vault zakázaná nebo ne. |
AzureSecurityKeyVaultSettings.DisableTracing | Logická hodnota označující, jestli je trasování OpenTelemetry zakázané nebo ne. |
AzureSecurityKeyVaultSettings.VaultUri | Identifikátor URI trezoru, na kterém klient pracuje. Na portálu Azure se zobrazí jako název DNS. |
Client testy stavu integrace
Ve výchozím nastavení mají .NET.NET Aspireklientské integracekontroly stavu povoleny pro všechny služby. Podobně mnoho hosting integrací také umožňuje koncové body kontroly stavu. Další informace najdete tady:
Integrace .NET AspireAzure Key Vault zahrnuje následující kontroly stavu:
- Přidá kontrolu stavu
AzureKeyVaultSecretsHealthCheck
, která se pokusí připojit ke službě Key Vault a dotazovat se na ni. - Integruje se s koncovým bodem HTTP
/health
, který určuje, že všechny registrované zdravotní kontroly musí být úspěšné, aby byla aplikace považována za připravenou pro přijímání provozu.
Pozorovatelnost a telemetrie
.NET .NET Aspire integrace automaticky nastaví konfigurace protokolování, trasování a metrik, které se někdy označují jako pilíře pozorovatelnosti. Další informace o pozorovatelnosti a telemetrii integrace najdete v přehledu integrace .NET.NET Aspire. V závislosti na zálohovací službě můžou některé integrace podporovat pouze některé z těchto funkcí. Například některé integrace podporují protokolování a trasování, ale ne metriky. Funkce telemetrie je také možné zakázat pomocí technik uvedených v části Konfigurace.
Protokolování
Integrace .NET AspireAzure Key Vault používá následující kategorie protokolů:
Azure.Core
Azure.Identity
Trasování
Integrace .NET AspireAzure Key Vault bude pomocí OpenTelemetryemitovat následující aktivity trasování:
Azure.Security.KeyVault.Secrets.SecretClient
Metriky
Integrace .NET AspireAzure Key Vault v současné době nepodporuje metriky ve výchozím nastavení z důvodu omezení sady Azure SDK.
Viz také
- Azure Key Vault dokumenty
- Video: Úvod do Azure Key Vault a .NET Aspire
- Přehled integrace .NET AspireAzure
- Přehled integrace .NET.NET Aspire
- .NET Aspire GitHub úložiště