[英]How to access key vault from azure app service
我有以下方法连接到我的代码中的密钥库:
public static class ConfigurationBuilderExtension
{
public static IConfigurationBuilder AddKeyVaultconfiguration(this IConfigurationBuilder builder)
{
var config = builder.Build();
string name = config["KeyVault:Name"];
string clientId = config["KeyVault:ClientId"];
string clientSecret = config["KeyVault:ClientSecret"];
Verify.NotNullOrEmpty(name, nameof(name));
Verify.NotNullOrEmpty(name, nameof(clientId));
Verify.NotNullOrEmpty(name, nameof(clientSecret));
builder.AddAzureKeyVault($"https://{name}.vault.azure.net/", clientId, clientSecret);
return builder;
}
}
要在本地运行它,我只需将用户机密添加到项目中:
{
"KeyVault": {
"Name": "brajzorekeyvault",
"ClientId": "xxxx",
"ClientSecret": "xxxx"
}
}
这在本地有效。
但是,当我将其发布到 Azure 中的应用程序服务时,如何使用这种方法? 我必须以某种方式注入名称、clientId 和 clientSecret? 但我不知道这样做的最佳实践方法是什么? 我应该在 Azure devops 中创建一个由这些值组成的变量组,然后在管道中使用它们吗?
当我们在 Azure 中使用 PAAS(大多数资源是 Azure 中的 PAAS,如 App 服务和 KeyVault)时。大多数时候,我们不需要编写代码或编写非常少的代码来访问它们,例如在这种情况下。 无需提供任何详细信息(如连接字符串或其他详细信息)即可访问应用服务中的密钥保管库,只需在 azure 门户中进行少量配置并直接从密钥保管库中获取机密。
在 Azure 中,它们是同一资源组中的资源,只需将应用服务的 object id 添加到 keyvault“访问策略”即可相互通信或进行身份验证或授权。 所有令人头疼的问题都在 azure 的验证上。 这是非常简单、安全和良好的做法。
步骤如下
为您的 Web 应用程序/应用程序服务启用托管服务标识
一种。 Select Azure Web 应用程序/应用程序服务中左侧菜单中的“身份”。
b. 在“系统分配”选项卡中,将“状态”切换更改为“打开”。
c。几秒钟后,Object ID 将可用,然后复制“对象 ID”。
授权 Web App/App Service 访问您的 Key Vault
一种。 Select 来自“Key Vault”屏幕的“访问策略”。
b. 单击“添加访问策略”。
c。提供“获取”和“列表”权限。
d. 在“Select a Principal”选项中,指定您之前为 Azure Web App/App Service 复制的“对象 ID”的值。
e. 粘贴、搜索,然后从列表中搜索 select。
F。 单击“添加”。
G。 单击“保存”以保留更改并完成该过程。
Provide Permissions
Copy object Id
阅读 .NET Core 中的 Azure Key Vault Secrets
一种。 安装 NuGet 包
您可以通过以下两种方式之一安装这些软件包:通过集成到 Visual Studio 2019 IDE 中的 NuGet Package 管理器,或通过在 Package 管理器控制台中运行以下命令:
安装包 Microsoft.Extensions.Azure 和安装包 Azure.Security.KeyVault.Secrets
Note:- In My case, I did not need to install these packages.
b. 从 AzureKeyVault 访问机密
appsettings.Development.json
{
"SecretName": "xyz"
}
appsettings.OtherEnv.json
"KeyVault": {
"VaultUri": "https://yourkeyvaulturl.vault.azure.net/"
}
public class KeyVaultManagement
{
private readonly IConfiguration _config;
public KeyVaultManagement(IConfiguration config)
{
_config= config;
}
public SecretClient SecretClient
{
get
{
return new SecretClient(
new Uri($"{this._config["KeyVault:VaultUri"]}"),
new DefaultAzureCredential()) ;
}
}
}
.ConfigureAppConfiguration((context, config) =>
{
var builtConfig = config.Build();
if (!context.HostingEnvironment.IsDevelopment())
{
config.AddAzureKeyVault(new KeyVaultManagement(builtConfig).SecretClient, new KeyVaultSecretManager());
}
});
var valueofSecret = configuration["SecretName"];
configuration is IConfiguration
如果您的应用程序不是应用程序服务或它是在 .NET 框架中开发的
然后使用证书实现 KEYVAULT
安装相同的 Nuget 包
在 Program.cs 中编写以下代码。 可能需要添加 package 或命名空间才能使用证书类
.ConfigureAppConfiguration((context, config) =>
{
var root = config.Build();
var KeyVaultName = root["KeyVaultName"];
var Uri = new Uri($"https://{KeyVaultName}.vault.azure.net/");
var x509Certifcate = CertifcateHelper.GetCertificate(root["Thumprint"],"KeyVaultCertificate");
config.AddAzureKeyVault(Uri , new ClientCertificateCredential(root["ClientTenantId"], root["ClientAppId"], x509Certifcate));
});
appsettings.Development.json
{
"KeyVaultName": "keyvalutname",
"ClientTenantId": "Get from azure and paste here",
"ClientAppId": "Get from azure and paste here",
"Thumbprint": "Get from keyvalut certificate in azure and paste here";
}
var valueofSecret = configuration["SecretName"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.