Azure App Config、Key Vault 和托管服务标识 (.NET Core 3.1)
Azure App Config, Key Vault & Managed Service Identity (.NET Core 3.1)
我有一个简单的应用程序服务设置为 use/test Azure 应用程序配置
- Azure App Config 包含 2 个非 KeyVault 条目和 1 个 Key Vault 引用条目
- Key Vault 设置了适当的访问策略,允许 Get/List 的秘密进入 Azure App Config 的托管服务标识
我遵循了 sample application,所以 CreateHostBuilder 看起来像:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(settings["ConnectionStrings:AppConfig"]);
})
.UseStartup<Startup>());
当 deploying/running 应用程序时,如果没有指向 KeyVault 的 Azure 应用程序配置条目,则行为成功。
当我在 Azure App Config 中添加一个指向 KeyVault 的条目时,应用程序将无法启动(HTTP 错误 500.30 - ANCM 进程中启动失败),日志显示此异常:
异常信息:Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException:未配置密钥保管库凭据,也找不到匹配的秘密客户端。错误代码:,Key:TestConnectionString,标签:,Etag:6ezsqW96CsAet7Ym5H4DedsLTkI, 秘密标识符:https://testkeyvault.vault.azure.net/secrets/TestSecret
---> System.UnauthorizedAccessException: 未配置密钥保管库凭据,也找不到匹配的秘密客户端。
很明显有些东西没有得到正确保护,但我已经检查了很多次并且 Key Vault 有一个访问策略授予 Get/List Azure App Config 身份的秘密。
我还在主机构建器中尝试了 ConfigureKeyVault 选项,即
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
{
options.Connect(settings["ConnectionStrings:AppConfig"])
.ConfigureKeyVault(kv =>
{
kv.SetCredential(new DefaultAzureCredential());
});
});
})
.UseStartup<Startup>());
Key Vault 上的访问策略向 Azure App Config 身份授予 Get/List 机密是所有需要完成的事情,还是我错过了什么? (我也尝试过向应用服务授予访问策略,但没有成功)。
对于密钥保管库引用,应用程序需要设置对应用程序配置和密钥保管库的身份验证。这两个服务不直接通信,因此应用配置不需要对 Key Vault 的任何访问权限。使用 ConfigureKeyVault
的代码片段是正确的。它指定 DefaultAzureCredential
用于对 Key Vault 进行身份验证以解析 Key Vault 引用。
为了让托管在 Azure App Service 中的应用程序能够从 Key Vault 访问机密,您可以在 App Service 上启用托管身份并在 Key Vault 中授予它 GET 和 LIST 权限。
对于开发环境,these 指令可用于创建服务主体、授予权限并设置适当的环境变量以供 DefaultAzureCredential
使用。
我有一个简单的应用程序服务设置为 use/test Azure 应用程序配置
- Azure App Config 包含 2 个非 KeyVault 条目和 1 个 Key Vault 引用条目
- Key Vault 设置了适当的访问策略,允许 Get/List 的秘密进入 Azure App Config 的托管服务标识
我遵循了 sample application,所以 CreateHostBuilder 看起来像:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(settings["ConnectionStrings:AppConfig"]);
})
.UseStartup<Startup>());
当 deploying/running 应用程序时,如果没有指向 KeyVault 的 Azure 应用程序配置条目,则行为成功。
当我在 Azure App Config 中添加一个指向 KeyVault 的条目时,应用程序将无法启动(HTTP 错误 500.30 - ANCM 进程中启动失败),日志显示此异常:
异常信息:Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException:未配置密钥保管库凭据,也找不到匹配的秘密客户端。错误代码:,Key:TestConnectionString,标签:,Etag:6ezsqW96CsAet7Ym5H4DedsLTkI, 秘密标识符:https://testkeyvault.vault.azure.net/secrets/TestSecret ---> System.UnauthorizedAccessException: 未配置密钥保管库凭据,也找不到匹配的秘密客户端。
很明显有些东西没有得到正确保护,但我已经检查了很多次并且 Key Vault 有一个访问策略授予 Get/List Azure App Config 身份的秘密。
我还在主机构建器中尝试了 ConfigureKeyVault 选项,即
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
{
options.Connect(settings["ConnectionStrings:AppConfig"])
.ConfigureKeyVault(kv =>
{
kv.SetCredential(new DefaultAzureCredential());
});
});
})
.UseStartup<Startup>());
Key Vault 上的访问策略向 Azure App Config 身份授予 Get/List 机密是所有需要完成的事情,还是我错过了什么? (我也尝试过向应用服务授予访问策略,但没有成功)。
对于密钥保管库引用,应用程序需要设置对应用程序配置和密钥保管库的身份验证。这两个服务不直接通信,因此应用配置不需要对 Key Vault 的任何访问权限。使用 ConfigureKeyVault
的代码片段是正确的。它指定 DefaultAzureCredential
用于对 Key Vault 进行身份验证以解析 Key Vault 引用。
为了让托管在 Azure App Service 中的应用程序能够从 Key Vault 访问机密,您可以在 App Service 上启用托管身份并在 Key Vault 中授予它 GET 和 LIST 权限。
对于开发环境,these 指令可用于创建服务主体、授予权限并设置适当的环境变量以供 DefaultAzureCredential
使用。