.NET Aspire Azure Key Vault integração
Inclui: integração de alojamento e
Client integração
Azure Key Vault é um serviço de nuvem para armazenar e acessar segredos com segurança. A integração .NET AspireAzure Key Vault permite conectar-se a instâncias Azure Key Vault a partir das suas aplicações .NET.
Integração de hospedagem
A integração de hospedagem Azure Key Vault modela um recurso do Cofre da Chave como o tipo AzureKeyVaultResource. Para aceder a este tipo e às APIs para expressá-los na sua aplicação anfitriã do projeto , instale o pacote NuGet 📦Aspire.Hosting.Azure.KeyVault:
- .NET CLI
- PackageReference
dotnet add package Aspire.Hosting.Azure.KeyVault
Para obter mais informações, consulte dotnet add package ou Gerir dependências de pacotes em aplicações .NET.
Adicionar Azure Key Vault recurso
Em seu projeto de host de aplicativo, chame AddAzureKeyVault na instância do construtor para adicionar um recurso 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...
O método WithReference configura uma conexão no ExampleProject
chamado "key-vault"
.
Importante
Por padrão, o AddAzureKeyVault
configura a função embutida de Administrador do Cofre de Chaves do .
Dica
Quando você chama AddAzureKeyVault, ele chama implicitamente AddAzureProvisioning, que adiciona suporte para gerar recursos de Azure dinamicamente durante a inicialização do aplicativo. O aplicativo deve configurar a assinatura e o local apropriados. Para obter mais informações, consulte Provisionamento local: Configuração.
Provisionamento automatizado com Bicep
Se és novo no Bicep, é uma linguagem de domínio específico para a definição de recursos Azure. Com .NET.NET Aspire, você não precisa escrever Bicep manualmente, em vez disso, as APIs de provisionamento geram Bicep para você. Ao publicares a tua aplicação, o Bicep gerado é exibido juntamente com o ficheiro de manifesto. Quando você adiciona um recurso Azure Key Vault, o seguinte Bicep é gerado:
@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
O Bicep anterior é um módulo que provisiona um recurso Azure Key Vault com os seguintes padrões:
-
location
: A localização do grupo de recursos. -
principalId
: O ID principal do usuário ou entidade de serviço. -
principalType
: O tipo principal do usuário ou entidade de serviço. -
key_vault
: O recurso Azure Key Vault:-
name
: Um nome exclusivo para o Azure Key Vault. -
properties
: As Azure Key Vault propriedades:-
tenantId
: O ID do locatário do Azure Key Vault. -
sku
: Azure Key Vault SKU:-
family
: A família SKU. -
name
: O nome SKU.
-
-
enableRbacAuthorization
: Um valor booleano que indica se o Azure Key Vault tem autorização RBAC (controle de acesso baseado em função) habilitada.
-
-
tags
: As Azure Key Vault etiquetas.
-
-
key_vault_KeyVaultAdministrator
: A atribuição da função de administrador Azure Key Vault:-
name
: Um nome exclusivo para a atribuição de função. -
properties
: As propriedades da atribuição de função:-
principalId
: O ID principal do usuário ou entidade de serviço. -
roleDefinitionId
: O ID de definição de função da função de administrador do Azure Key Vault. -
principalType
: O tipo principal do usuário ou entidade de serviço.
-
-
scope
: O escopo da atribuição de função.
-
-
output
: O Azure Key Vault URI.
O Bíceps gerado é um ponto de partida e pode ser personalizado para atender às suas necessidades específicas.
Personalizar a infraestrutura de provisionamento
Todos os recursos .NET AspireAzure são subclasses do tipo AzureProvisioningResource. Esse tipo permite a personalização do Bicep gerado ao fornecer uma API fluente para configurar os recursos Azure através da API ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>). Por exemplo, você pode configurar o sku
, RBAC
, tags
e muito mais. O exemplo a seguir demonstra como personalizar o recurso 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");
});
O código anterior:
- Encadeia uma chamada para a API ConfigureInfrastructure:
- O parâmetro
infra
é uma instância do tipo AzureResourceInfrastructure. - Os recursos provisionáveis são recuperados chamando o método GetProvisionableResources().
- O recurso único KeyVaultService é recuperado.
- A propriedade
Sku
é atribuída a uma nova instância KeyVaultSku. - A propriedade KeyVaultProperties.EnableRbacAuthorization está definida como
true
. - Uma tag é adicionada ao recurso com uma chave de
ExampleKey
e um valor deExample value
.
- O parâmetro
Há muito mais opções de configuração disponíveis para personalizar o recurso Key Vault. Para obter mais informações, consulte Azure.Provisioning.KeyVault e Azure. Personalização de provisionamento.
Conectar-se a uma instância de Azure Key Vault existente
Você pode ter uma instância de Azure Key Vault existente à qual deseja se conectar. Em vez de representar um novo recurso Azure Key Vault, você pode adicionar uma cadeia de conexão ao host do aplicativo. Para adicionar uma conexão a um recurso Azure Key Vault existente, chame o método 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...
Observação
As cadeias de conexão são usadas para representar uma ampla gama de informações de conexão, incluindo conexões de banco de dados, agentes de mensagens, URIs de ponto de extremidade e outros serviços. Na nomenclatura .NET.NET Aspire, o termo "cadeia de conexão" é usado para representar qualquer tipo de informação de conexão.
A cadeia de conexão é configurada na configuração do host da aplicação, normalmente sob a seção Segredos do Utilizador, na secção ConnectionStrings
. O host do aplicativo injeta essa cadeia de conexão como uma variável de ambiente em todos os recursos dependentes, por exemplo:
{
"ConnectionStrings": {
"key-vault": "https://{account_name}.vault.azure.net/"
}
}
O recurso dependente pode acessar a cadeia de conexão injetada chamando o método GetConnectionString e passando o nome da conexão como parâmetro, neste caso "key-vault"
. A API GetConnectionString
é uma abreviação de IConfiguration.GetSection("ConnectionStrings")[name]
.
Client integração
Para começar com a integração do cliente .NET AspireAzure Key Vault, instale o pacote NuGet 📦Aspire.Azure.Security.KeyVault no projeto que consome o cliente, ou seja, o projeto da aplicação que usa o cliente Azure Key Vault.
- .NET CLI
- PackageReference
dotnet add package Aspire.Azure.Security.KeyVault
A integração do cliente fornece duas maneiras de aceder a informações confidenciais de Azure Key Vault:
- Adicione segredos à configuração do aplicativo, usando o padrão
IConfiguration
ouIOptions<T>
. - Utilize um
SecretClient
para recuperar segredos a pedido.
Adicionar segredos à configuração
No arquivo Program.cs do seu projeto cliente, chame o método de extensão AddAzureKeyVaultSecrets em IConfiguration para adicionar os segredos como parte da configuração da sua aplicação. O método usa um parâmetro de nome de conexão.
builder.Configuration.AddAzureKeyVaultSecrets(connectionName: "key-vault");
Observação
O nome AddAzureKeyVaultSecrets
API causou um pouco de confusão. O método é usado para configurar o SecretClient
com base no nome de conexão fornecido, e não é usado para adicionar segredos à configuração.
Dica
O parâmetro connectionName
deve corresponder ao nome usado ao adicionar o recurso Azure Key Vault no projeto de host do aplicativo. Para obter mais informações, consulte Adicionar Azure Key Vault recurso.
Em seguida, você pode recuperar um valor de configuração baseado em segredo por meio das APIs de IConfiguration normais ou até mesmo vinculando-se a classes fortemente tipadas com o padrão de opções . Para recuperar um segredo de uma classe de serviço de exemplo que foi registada no contêiner de injeção de dependência, considere os seguintes trechos:
Recuperar a instância IConfiguration
public class ExampleService(IConfiguration configuration)
{
// Use configuration...
private string _secretValue = configuration["SecretKey"];
}
O exemplo anterior pressupõe que você também registrou a instância de IConfiguration
para injeção de dependência. Para obter mais informações, consulte Injeção de dependência no .NET.
Recuperar instância IOptions<T>
public class ExampleService(IOptions<SecretOptions> options)
{
// Use options...
private string _secretValue = options.Value.SecretKey;
}
O exemplo anterior pressupõe que você configurou uma classe SecretOptions
para uso com o padrão options. Para obter mais informações, consulte o padrão de Opções em .NET.
Parâmetros adicionais da API AddAzureKeyVaultSecrets
estão disponíveis opcionalmente para os seguintes cenários:
-
Action<AzureSecurityKeyVaultSettings>? configureSettings
: Para configurar algumas ou todas as opções em linha. -
Action<SecretClientOptions>? configureClientOptions
: Para configurar o SecretClientOptions em linha. -
AzureKeyVaultConfigurationOptions? options
: Para configurar o AzureKeyVaultConfigurationOptions em linha.
Adicionar um cliente Azure Secret
Como alternativa, você pode usar o SecretClient diretamente para recuperar os segredos sob demanda. Isso requer uma API de registro ligeiramente diferente.
No arquivo Program.cs do seu projeto cliente, chame a extensão AddAzureKeyVaultClient na instância IHostApplicationBuilder para registar um SecretClient
através do contentor de injeção de dependência.
builder.AddAzureKeyVaultClient(connectionName: "key-vault");
Dica
O parâmetro connectionName
deve corresponder ao nome usado ao adicionar o recurso Azure Key Vault no projeto de host do aplicativo. Para obter mais informações, consulte Adicionar Azure Key Vault recurso.
Depois de adicionar o SecretClient
ao construtor, você pode obter a instância SecretClient usando a injeção de dependência. Por exemplo, para recuperar o cliente de um serviço de exemplo, defina-o como um parâmetro do construtor e verifique se a classe ExampleService
está registrada no contêiner de injeção de dependência:
public class ExampleService(SecretClient client)
{
// Use client...
}
Para obter mais informações sobre injeção de dependência, consulte .NET injeção de dependência.
Adicionar cliente Azure Key Vault com chave
Pode haver situações em que você queira registrar várias instâncias de SecretClient
com nomes de conexão diferentes. Para registrar clientes Azure Key Vault chaveados, chame o método AddKeyedAzureKeyVaultClient:
builder.AddKeyedAzureKeyVaultClient(name: "feature-toggles");
builder.AddKeyedAzureKeyVaultClient(name: "admin-portal");
Em seguida, pode-se recuperar as instâncias SecretClient
usando a injeção de dependência. Por exemplo, para recuperar o cliente de um serviço de exemplo:
public class ExampleService(
[FromKeyedServices("feature-toggles")] SecretClient featureTogglesClient,
[FromKeyedServices("admin-portal")] SecretClient adminPortalClient)
{
// Use clients...
}
Para obter mais informações sobre serviços identificados por chave, consulte a seção .NET sobre injeção de dependência: Serviços identificados por chave.
Configuração
A integração .NET AspireAzure Key Vault fornece várias opções para configurar o SecretClient
com base nos requisitos e convenções do seu projeto.
Usar provedores de configuração
A integração .NET AspireAzure Key Vault suporta Microsoft.Extensions.Configuration. Carrega o AzureSecurityKeyVaultSettings de appsettings.json ou outros ficheiros de configuração usando a chave Aspire:Azure:Security:KeyVault
.
{
"Aspire": {
"Azure": {
"Security": {
"KeyVault": {
"DisableHealthChecks": true,
"DisableTracing": false,
"ClientOptions": {
"Diagnostics": {
"ApplicationId": "myapp"
}
}
}
}
}
}
}
Para obter o esquema completo de integração JSONAzure Key Vault cliente, consulte Aspire.Azure. Security.KeyVault/ConfigurationSchema.json.
Se você configurou suas configurações na seção Aspire:Azure:Security:KeyVault
do seu arquivo appsettings.json, você pode simplesmente chamar o método AddAzureKeyVaultSecrets
sem passar nenhum parâmetro.
Usar delegados embutidos
Você também pode passar o Action<AzureSecurityKeyVaultSettings>
delegate para configurar algumas ou todas as opções de forma imediata, por exemplo, para definir o AzureSecurityKeyVaultSettings.VaultUri:
builder.AddAzureKeyVaultSecrets(
connectionName: "key-vault",
configureSettings: settings => settings.VaultUri = new Uri("KEY_VAULT_URI"));
Você também pode configurar o SecretClientOptions usando o delegate Action<SecretClientOptions>
, que é um parâmetro opcional do método AddAzureKeyVaultSecrets
. Por exemplo, para definir o ID de KeyClientOptions.DisableChallengeResourceVerification para identificar o cliente:
builder.AddAzureKeyVaultSecrets(
connectionName: "key-vault",
configureClientOptions: options => options.DisableChallengeResourceVerification = true))
Opções de configuração
As seguintes opções configuráveis são expostas através da classe AzureSecurityKeyVaultSettings:
Nome | Descrição |
---|---|
AzureSecurityKeyVaultSettings.Credential | A credencial usada para se autenticar com o Azure Key Vault. |
AzureSecurityKeyVaultSettings.DisableHealthChecks | Um valor booleano que indica se a verificação de integridade do Cofre da Chave está desabilitada ou não. |
AzureSecurityKeyVaultSettings.DisableTracing | Um valor booleano que indica se o rastreamento de OpenTelemetry está desabilitado ou não. |
AzureSecurityKeyVaultSettings.VaultUri | Uma URI para o cofre no qual o cliente opera. Aparece como "Nome DNS" no portal Azure. |
Client verificações de saúde de integração
Por padrão, .NET.NET Aspireintegrações de cliente têm verificações de saúde habilitadas para todos os serviços. Da mesma forma, muitas .NET.NET Aspireintegrações de hospedagem também habilitam endpoints de verificação de saúde. Para mais informações, consulte:
A integração .NET AspireAzure Key Vault inclui as seguintes verificações de integridade:
- Adiciona a verificação de integridade
AzureKeyVaultSecretsHealthCheck
, que procura conectar-se e consultar o Key Vault. - Integra-se com o endpoint HTTP
/health
, que especifica que todas as verificações de integridade registadas devem passar para que a aplicação seja considerada pronta para aceitar tráfego.
Observabilidade e telemetria
.NET .NET Aspire integrações configuram automaticamente as configurações de Logging, Trace e Metrics, que às vezes são conhecidas como os pilares da observabilidade. Para obter mais informações sobre observabilidade e telemetria de integração, consulte Visão geral de integrações .NET.NET Aspire. Dependendo do serviço de suporte, algumas integrações podem suportar apenas alguns desses recursos. Por exemplo, algumas integrações suportam registro em log e rastreamento, mas não métricas. Os recursos de telemetria também podem ser desativados usando as técnicas apresentadas na seção de configuração.
Registo
A integração .NET AspireAzure Key Vault usa as seguintes categorias de log:
Azure.Core
Azure.Identity
Rastreio
A integração .NET AspireAzure Key Vault emitirá as seguintes atividades de rastreio utilizando OpenTelemetry:
Azure.Security.KeyVault.Secrets.SecretClient
Métricas
A integração de .NET AspireAzure Key Vault atualmente não oferece suporte a métricas por padrão devido a limitações com o Azure SDK.
Ver também
- Azure Key Vault docs
- Vídeo: Introdução ao Azure Key Vault e .NET Aspire
- Visão geral das integrações .NET AspireAzure
- Visão geral das integrações .NET.NET Aspire
- .NET Aspire GitHub repo