Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Obejmuje: integrację hostingu —
Client
Azure Key Vault to usługa w chmurze umożliwiająca bezpieczne przechowywanie i dostęp do tajemnic. Integracja .NET AspireAzure Key Vault umożliwia łączenie aplikacji Azure Key Vault z instancjami .NET.
Integracja hostingu
Hostowanie integracji Azure Key Vault modeluje zasób usługi Key Vault jako typ AzureKeyVaultResource. Aby uzyskać dostęp do tego typu i interfejsów API do wyrażania ich w projekcie hosta aplikacji , zainstaluj pakiet NuGet 📦Aspire.Hosting.Azure.KeyVault:
dotnet add package Aspire.Hosting.Azure.KeyVault
Aby uzyskać więcej informacji, zobacz dotnet add package lub Zarządzaj zależnościami pakietów w aplikacjach .NET.
Dodawanie zasobu Azure Key Vault
W projekcie hosta aplikacji wywołaj AddAzureKeyVault na instancji konstruktora, aby dodać zasób 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 konfiguruje połączenie w ExampleProject
o nazwie "key-vault"
.
Ważne
Domyślnie AddAzureKeyVault
konfiguruje wbudowaną rolę administratora Key Vault.
Napiwek
Podczas wywoływania AddAzureKeyVaultniejawnie wywołuje AddAzureProvisioning, co wprowadza obsługę dynamicznego generowania zasobów Azure podczas uruchamiania aplikacji. Aplikacja musi skonfigurować odpowiednią subskrypcję i lokalizację. Aby uzyskać więcej informacji, zobacz Lokalna konfiguracja: Konfiguracja.
Bicep wygenerowany przez prowizjonowanie
Jeśli jesteś nowy w korzystaniu z Bicep, jest to język specyficzny dla domeny wykorzystywany do definiowania zasobów Azure. W przypadku .NET.NET Aspirenie musisz pisać Bicep ręcznie, ponieważ interfejsy API do aprowizacji generują Bicep za Ciebie. Podczas publikowania aplikacji, wygenerowany plik Bicep zostaje wyeksportowany razem z plikiem manifestu. Po dodaniu zasobu Azure Key Vault jest generowany następujący kod Bicep:
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
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'
}
}
output vaultUri string = key_vault.properties.vaultUri
output name string = key_vault.name
Poprzedzający Bicep to moduł, który zapewnia zasób Azure Key Vault. Ponadto w osobnym module tworzone są przypisania ról dla zasobu Azure.
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
param key_vault_outputs_name string
param principalType string
param principalId string
resource key_vault 'Microsoft.KeyVault/vaults@2023-07-01' existing = {
name: key_vault_outputs_name
}
resource key_vault_KeyVaultSecretsUser 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(key_vault.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4633458b-17de-408a-b874-0445c86b69e6'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '4633458b-17de-408a-b874-0445c86b69e6')
principalType: principalType
}
scope: key_vault
}
Wygenerowany Bicep jest punktem wyjścia i ulega wpływom zmian w infrastrukturze aprowizacji w języku C#. Modyfikacje pliku Bicep, które zostaną wprowadzone bezpośrednio, będą nadpisane. Dlatego należy wprowadzać je za pośrednictwem interfejsów API aprowizowania w języku C#, aby zapewnić, że zostaną odzwierciedlone w wygenerowanych plikach.
Dostosowywanie infrastruktury aprowizacji
Wszystkie zasoby .NET AspireAzure to podklasy typu AzureProvisioningResource. Ten typ umożliwia dostosowanie wygenerowanego elementu Bicep przez zapewnienie płynnego interfejsu API do konfigurowania zasobów Azure przy użyciu interfejsu API ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>). Można na przykład skonfigurować sku
, RBAC
, tags
i więcej. W poniższym przykładzie pokazano, jak dostosować zasób 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");
});
Powyższy kod:
- Łańcuch wywołania interfejsu API ConfigureInfrastructure:
- Parametr
infra
jest wystąpieniem typu AzureResourceInfrastructure. - Zasoby możliwe do aprowizacji są pobierane przez wywołanie metody GetProvisionableResources().
- Pojedynczy zasób KeyVaultService jest właśnie pobierany.
- Właściwość
Sku
została przypisana do nowego wystąpienia KeyVaultSku. - Właściwość KeyVaultProperties.EnableRbacAuthorization jest ustawiona na wartość
true
. - Tag jest dodawany do zasobu z kluczem
ExampleKey
i wartościąExample value
.
- Parametr
Dostępnych jest wiele opcji konfiguracji umożliwiających dostosowanie zasobu usługi Key Vault. Aby uzyskać więcej informacji, zobacz Azure.Provisioning.KeyVault i Azure. Dostosowywanie konfiguracji.
Połącz się z istniejącym wystąpieniem Azure Key Vault
Być może masz istniejące Azure wystąpienie usługi Key Vault sztucznej inteligencji, z którym chcesz nawiązać połączenie. Możesz łańcuchować wywołanie, aby wskazać, że AzureKeyVaultResource jest istniejącym zasobem:
var builder = DistributedApplication.CreateBuilder(args);
var existingKeyVaultName = builder.AddParameter("existingKeyVaultName");
var existingKeyVaultResourceGroup = builder.AddParameter("existingKeyVaultResourceGroup");
var keyvault = builder.AddAzureKeyVault("ke-yvault")
.AsExisting(existingKeyVaultName, existingKeyVaultResourceGroup);
builder.AddProject<Projects.ExampleProject>()
.WithReference(keyvault);
// After adding all resources, run the app...
Ważne
Podczas wywoływania metod RunAsExisting
, PublishAsExisting
lub AsExisting
w celu pracy z zasobami, które są już obecne w subskrypcji Azure, należy dodać wartości konfiguracji do Hosta Aplikacji, aby .NET Aspire mógł je zlokalizować. Wymagane wartości konfiguracji obejmują SubscriptionId, AllowResourceGroupCreation, ResourceGroup i Location. Jeśli ich nie ustawisz, na pulpicie nawigacyjnym .NET.NET Aspire pojawią się błędy "Brak konfiguracji". Aby uzyskać więcej informacji na temat sposobu ich ustawiania, zobacz Konfiguracja.
Aby uzyskać więcej informacji na temat traktowania Azure Key Vault zasobów jako istniejących zasobów, zobacz Korzystanie z istniejących Azure zasobów.
Uwaga
Alternatywnie, zamiast reprezentować zasób Azure Key Vault, można dodać ciąg połączenia do hosta aplikacji. Takie podejście jest słabo typizowane i nie działa z przypisaniami ról ani dostosowaniami infrastruktury. Aby uzyskać więcej informacji, zobacz Dodaj istniejące zasoby Azure z parametrami połączenia.
Client integracja
Aby rozpocząć integrację klienta .NET AspireAzure Key Vault, zainstaluj pakiet NuGet 📦Aspire.Azure.Security.KeyVault w projekcie, który korzysta z klienta Azure Key Vault, czyli w projekcie aplikacji używającej klienta.
dotnet add package Aspire.Azure.Security.KeyVault
Integracja klienta zapewnia dwa sposoby dostępu do tajemnic z Azure Key Vault:
- Dodaj tajne informacje do konfiguracji aplikacji, używając wzorca
IConfiguration
lubIOptions<T>
. - Użyj
SecretClient
, aby pobierać tajemnice na żądanie.
Dodawanie sekretów do konfiguracji
W pliku Program.cs projektu, który korzysta z klienta, wywołaj metodę rozszerzenia AddAzureKeyVaultSecrets na IConfiguration, aby dodać sekrety do konfiguracji aplikacji. Metoda przyjmuje parametr nazwy połączenia.
builder.Configuration.AddAzureKeyVaultSecrets(connectionName: "key-vault");
Uwaga
Nazwa interfejsu API AddAzureKeyVaultSecrets
spowodowała nieco zamieszanie. Metoda służy do konfigurowania SecretClient
na podstawie podanej nazwy połączenia i nie jest używana do dodawania tajemnic do konfiguracji.
Napiwek
Parametr connectionName
musi być zgodny z nazwą używaną podczas dodawania zasobu Azure Key Vault w projekcie hosta aplikacji. Aby uzyskać więcej informacji, zobacz Dodaj zasób Azure Key Vault.
Następnie można pobrać wartość konfiguracji opartą na tajnych danych za pomocą normalnych interfejsów API IConfiguration, a nawet przez powiązanie z silnie typowanymi klasami zgodnie ze wzorcem opcji . Aby pobrać tajny klucz z przykładowej klasy usługi zarejestrowanej w kontenerze wstrzykiwania zależności, rozważ poniższe przykłady:
Pobierz wystąpienie IConfiguration
public class ExampleService(IConfiguration configuration)
{
// Use configuration...
private string _secretValue = configuration["SecretKey"];
}
W poprzednim przykładzie przyjęto założenie, że zarejestrowano również wystąpienie IConfiguration
na potrzeby wstrzykiwania zależności. Aby uzyskać więcej informacji, zobacz Wstrzykiwanie zależności w .NET.
Pobierz wystąpienie IOptions<T>
public class ExampleService(IOptions<SecretOptions> options)
{
// Use options...
private string _secretValue = options.Value.SecretKey;
}
W poprzednim przykładzie przyjęto założenie, że skonfigurowano klasę SecretOptions
do użycia ze wzorcem opcji. Aby uzyskać więcej informacji, zobacz wzorzec opcji w .NET.
Dodatkowe parametry interfejsu API AddAzureKeyVaultSecrets
są dostępne opcjonalnie w następujących scenariuszach:
-
Action<AzureSecurityKeyVaultSettings>? configureSettings
: aby skonfigurować niektóre lub wszystkie opcje wbudowane. -
Action<SecretClientOptions>? configureClientOptions
: aby skonfigurować funkcję SecretClientOptions w trybie inline. -
AzureKeyVaultConfigurationOptions? options
: aby skonfigurować wstawkę AzureKeyVaultConfigurationOptions.
Dodaj klienta tajnego Azure
Alternatywnie możesz użyć SecretClient bezpośrednio, aby pobrać sekrety na żądanie. Wymaga to nieco innego interfejsu API rejestracji.
W pliku Program.cs swojego projektu korzystającego z klienta wywołaj rozszerzenie AddAzureKeyVaultClient na instancji IHostApplicationBuilder, aby zarejestrować SecretClient
do użycia przez kontener wstrzykiwania zależności.
builder.AddAzureKeyVaultClient(connectionName: "key-vault");
Napiwek
Parametr connectionName
musi być zgodny z nazwą używaną podczas dodawania zasobu Azure Key Vault w projekcie hosta aplikacji. Aby uzyskać więcej informacji, zobacz Dodaj zasób Azure Key Vault.
Po dodaniu SecretClient
do buildera, można uzyskać wystąpienie SecretClient przy użyciu wstrzykiwania zależności. Na przykład aby pobrać klienta z przykładowej usługi, zdefiniuj go jako parametr konstruktora i upewnij się, że klasa ExampleService
jest zarejestrowana w kontenerze iniekcji zależności:
public class ExampleService(SecretClient client)
{
// Use client...
}
Aby uzyskać więcej informacji o wstrzykiwaniu zależności, zobacz .NETwstrzykiwanie zależności.
Dodaj klienta Azure Key Vault z kluczem
Mogą wystąpić sytuacje, w których chcesz zarejestrować wiele wystąpień SecretClient
z różnymi nazwami połączeń. Aby zarejestrować klientów z kluczem Azure Key Vault, wywołaj metodę AddKeyedAzureKeyVaultClient.
builder.AddKeyedAzureKeyVaultClient(name: "feature-toggles");
builder.AddKeyedAzureKeyVaultClient(name: "admin-portal");
Następnie można uzyskać wystąpienia SecretClient
, korzystając z wstrzykiwania zależności. Na przykład aby pobrać klienta z przykładowej usługi:
public class ExampleService(
[FromKeyedServices("feature-toggles")] SecretClient featureTogglesClient,
[FromKeyedServices("admin-portal")] SecretClient adminPortalClient)
{
// Use clients...
}
Aby uzyskać więcej informacji na temat usług z kluczami, zobacz .NET wstrzykiwanie zależności: usługi z kluczami.
Konfiguracja
Integracja .NET AspireAzure Key Vault oferuje wiele opcji konfigurowania SecretClient
na podstawie wymagań i konwencji projektu.
Korzystanie z dostawców konfiguracji
Integracja .NET AspireAzure Key Vault obsługuje Microsoft.Extensions.Configuration. Ładuje AzureSecurityKeyVaultSettings z appsettings.json lub z innych plików konfiguracyjnych przy użyciu klucza Aspire:Azure:Security:KeyVault
.
{
"Aspire": {
"Azure": {
"Security": {
"KeyVault": {
"DisableHealthChecks": true,
"DisableTracing": false,
"ClientOptions": {
"Diagnostics": {
"ApplicationId": "myapp"
}
}
}
}
}
}
}
Aby uzyskać pełny schemat integracji klienta Azure Key VaultJSON, zobacz Aspire.Azure. Security.KeyVault/ConfigurationSchema.json.
Jeśli konfiguracje zostały skonfigurowane w sekcji Aspire:Azure:Security:KeyVault
pliku appsettings.json, możesz po prostu wywołać metodę AddAzureKeyVaultSecrets
bez przekazywania żadnych parametrów.
Użyj delegatów wbudowanych
Możesz również przekazać delegata Action<AzureSecurityKeyVaultSettings>
, aby skonfigurować niektóre lub wszystkie opcje w linii, na przykład w celu ustawienia AzureSecurityKeyVaultSettings.VaultUri:
builder.AddAzureKeyVaultSecrets(
connectionName: "key-vault",
configureSettings: settings => settings.VaultUri = new Uri("KEY_VAULT_URI"));
Można również skonfigurować SecretClientOptions przy użyciu delegata Action<SecretClientOptions>
, który jest opcjonalnym parametrem metody AddAzureKeyVaultSecrets
. Aby na przykład ustawić identyfikator KeyClientOptions.DisableChallengeResourceVerification w celu zidentyfikowania klienta:
builder.AddAzureKeyVaultSecrets(
connectionName: "key-vault",
configureClientOptions: options => options.DisableChallengeResourceVerification = true))
Opcje konfiguracji
Następujące konfigurowalne opcje są udostępniane za pośrednictwem klasy AzureSecurityKeyVaultSettings:
Nazwa | Opis |
---|---|
AzureSecurityKeyVaultSettings.Credential | Poświadczenie używane do uwierzytelniania w Azure Key Vault. |
AzureSecurityKeyVaultSettings.DisableHealthChecks | Wartość logiczna wskazująca, czy sprawdzanie kondycji usługi Key Vault jest wyłączone, czy nie. |
AzureSecurityKeyVaultSettings.DisableTracing | Wartość logiczna wskazująca, czy śledzenie OpenTelemetry jest wyłączone, czy nie. |
AzureSecurityKeyVaultSettings.VaultUri | Identyfikator URI do skarbca, w którym działa klient. Jest wyświetlana jako "Nazwa DNS" w portalu Azure. |
Client kontrole stanu integracji
Domyślnie .NET.NET Aspireintegracje klienta mają kontrole stanu włączone dla wszystkich usług. Podobnie, wiele integracji hostingowych również umożliwia punkty końcowe sprawdzania kondycji. Aby uzyskać więcej informacji, zobacz:
- .NET sprawdzanie kondycji aplikacji w języku C#
- kontrole kondycji w ASP.NET Core
Integracja .NET AspireAzure Key Vault obejmuje następujące kontrole kondycji:
- Dodaje kontrolę kondycji
AzureKeyVaultSecretsHealthCheck
, która próbuje nawiązać połączenie z usługą Key Vault i wykonywać zapytania dotyczące tej usługi. - Integruje się z punktem końcowym HTTP
/health
, który określa, że wszystkie zarejestrowane kontrole kondycji muszą zostać pomyślnie zaliczone, aby aplikacja była uznana za gotową do przyjmowania ruchu.
Obserwowanie i telemetria
.NET
.NET Aspire integracje automatycznie konfigurują rejestrowanie, śledzenie i metryki, które są czasami nazywane filarami obserwowalności. Aby uzyskać więcej informacji na temat możliwości obserwacji integracji i telemetrii, zobacz omówienie integracji .NET.NET Aspire. W zależności od usługi pomocniczej niektóre integracje mogą obsługiwać tylko niektóre z tych funkcji. Na przykład niektóre integracje obsługują rejestrowanie i śledzenie, ale nie metryki. Funkcje telemetrii można również wyłączyć przy użyciu technik przedstawionych w sekcji konfiguracji
Rejestrowanie
Integracja .NET AspireAzure Key Vault używa następujących kategorii dzienników:
Azure.Core
Azure.Identity
Śledzenie
Integracja .NET AspireAzure Key Vault spowoduje wykonywanie następujących procesów śledzenia z użyciem OpenTelemetry.
Azure.Security.KeyVault.Secrets.SecretClient
Wskaźniki
Integracja .NET AspireAzure Key Vault obecnie nie obsługuje metryk domyślnie z powodu ograniczeń SDK Azure.
Zobacz też
- Azure Key Vault dokumenty
- wideo: wprowadzenie do Azure Key Vault i .NET Aspire
- Omówienie integracji .NET AspireAzure
- Omówienie integracji .NET.NET Aspire
- .NET Aspire GitHub repozytorium