从本地开发中的 App Configuration 访问 Azure Key Vault 参考值
Access to Azure Key Vault reference value from App Configuration in development on local
我遇到了 Azure 应用程序配置服务,它能够 link 从 Azure KeyVault 秘密,通过创建一个带有 Key Vault 引用选项的新记录。
我已按照 Microsoft Doc
中所述使用 Microsoft 扩展程序进行应用程序配置
已经完成的步骤
- 通过 CMD 创建服务原则 - ```az ad sp create-for-rbac -n "http://mySP" --sdk-auth
- 也通过 CMD 向创建的服务提供商授予权限 -
az keyvault set-policy -n <your-unique-keyvault-name> --spn <clientId-of-your-service-principal> --secret-permissions delete get list set --key-permissions create decrypt delete encrypt get list unwrapKey wrapKey
在环境变量中设置客户端 ID 和密码
方法实现
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>());
}
当我尝试从至少具有一个 KV 引用的应用程序配置中获取数据时,问题就出现了。
我收到以下错误(仅在这种情况下,一个 KV 参考 linked 到应用程序配置)
Service request failed.
Status: 401 (Unauthorized)
内容:
{"error":"invalid_client","error_description":"AADSTS7000215: Invalid client secret is provided.\r\nTrace ID: \r\nCorrelation ID: \r\nTimestamp: 2020-05-27 22:59:52Z","error_codes":[7000215],"timestamp":"2020-05-27 22:59:52Z","trace_id":"","correlation_id":"","error_uri":"https://login.microsoftonline.com/error?code=7000215"}
Headers:
Cache-Control: no-store, no-cache
Pragma: no-cache
Strict-Transport-Security: REDACTED
X-Content-Type-Options: REDACTED
x-ms-request-id: REDACTED
x-ms-ests-server: REDACTED
P3P: REDACTED
Set-Cookie: REDACTED
Date: Wed, 27 May 2020 22:59:51 GMT
Content-Type: application/json; charset=utf-8
Expires: -1
Content-Length: 471
任何帮助将不胜感激:)
谢谢!
当使用 DefaultAzureCredential
时,它会首先尝试托管标识(推荐用于 Azure 上的服务),最后是需要为进程设置以下环境变量的服务主体(都在您的应用程序中)服务,以及本地开发 - 可以不同,只要服务主体 ID 具有适当的权限):
- AZURE_TENANT_ID : 租户ID
- AZURE_CLIENT_ID : 服务主体 ID
- AZURE_CLIENT_SECRET : 仅在创建服务主体后显示的服务主体机密(密码)
您还可以使用 Azure.Identity 的新预览版,它支持其他更常见且更易于在开发计算机上使用的身份验证方案,例如 Azure CLI (az login
)、Visual Studio,和Visual Studio代码。
问题是,Visual Studio 由于某种原因无法获取环境变量,所以它不会随请求一起发送,一旦我 运行 Visual Studio 作为管理员有效
我遇到了 Azure 应用程序配置服务,它能够 link 从 Azure KeyVault 秘密,通过创建一个带有 Key Vault 引用选项的新记录。
我已按照 Microsoft Doc
中所述使用 Microsoft 扩展程序进行应用程序配置已经完成的步骤
- 通过 CMD 创建服务原则 - ```az ad sp create-for-rbac -n "http://mySP" --sdk-auth
- 也通过 CMD 向创建的服务提供商授予权限 -
az keyvault set-policy -n <your-unique-keyvault-name> --spn <clientId-of-your-service-principal> --secret-permissions delete get list set --key-permissions create decrypt delete encrypt get list unwrapKey wrapKey
在环境变量中设置客户端 ID 和密码
方法实现
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>()); }
当我尝试从至少具有一个 KV 引用的应用程序配置中获取数据时,问题就出现了。 我收到以下错误(仅在这种情况下,一个 KV 参考 linked 到应用程序配置)
Service request failed. Status: 401 (Unauthorized)
内容:
{"error":"invalid_client","error_description":"AADSTS7000215: Invalid client secret is provided.\r\nTrace ID: \r\nCorrelation ID: \r\nTimestamp: 2020-05-27 22:59:52Z","error_codes":[7000215],"timestamp":"2020-05-27 22:59:52Z","trace_id":"","correlation_id":"","error_uri":"https://login.microsoftonline.com/error?code=7000215"}
Headers:
Cache-Control: no-store, no-cache
Pragma: no-cache
Strict-Transport-Security: REDACTED
X-Content-Type-Options: REDACTED
x-ms-request-id: REDACTED
x-ms-ests-server: REDACTED
P3P: REDACTED
Set-Cookie: REDACTED
Date: Wed, 27 May 2020 22:59:51 GMT
Content-Type: application/json; charset=utf-8
Expires: -1
Content-Length: 471
任何帮助将不胜感激:) 谢谢!
当使用 DefaultAzureCredential
时,它会首先尝试托管标识(推荐用于 Azure 上的服务),最后是需要为进程设置以下环境变量的服务主体(都在您的应用程序中)服务,以及本地开发 - 可以不同,只要服务主体 ID 具有适当的权限):
- AZURE_TENANT_ID : 租户ID
- AZURE_CLIENT_ID : 服务主体 ID
- AZURE_CLIENT_SECRET : 仅在创建服务主体后显示的服务主体机密(密码)
您还可以使用 Azure.Identity 的新预览版,它支持其他更常见且更易于在开发计算机上使用的身份验证方案,例如 Azure CLI (az login
)、Visual Studio,和Visual Studio代码。
问题是,Visual Studio 由于某种原因无法获取环境变量,所以它不会随请求一起发送,一旦我 运行 Visual Studio 作为管理员有效