我有一个在 azure 中运行的容器应用服务,它运行良好。
但是,如果我想在本地运行此容器,它会失败,因为它无法通过身份验证以读取 azure 中的密钥保管库。
.ConfigureAppConfiguration((context, config) =>
{
var builtConfig = config.Build();
string SecretUri = $"https://{builtConfig["KeyVaultName"]}.vault.azure.net/";
var secretClient = new SecretClient(new Uri(SecretUri), new DefaultAzureCredential(new DefaultAzureCredentialOptions { ExcludeSharedTokenCacheCredential = true }));
config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
})
在 azure 中运行时,DefaultAzureCredential 将从应用服务继承其权限,并且工作正常。
但是,如果我想在本地运行容器以在 azure 之外进行测试,它不知道要使用什么权限。 我该如何处理?我可以以某种方式告诉容器使用什么权限而不对容器进行开发更改吗?
答案 0 :(得分:0)
在 Visual Studio 中进行开发时,我通常将默认的 Azure Key Vault 开发凭据存储在本地用户设置中。然后我将与环境变量相同的凭据放在 Azure 应用服务中。如果凭据名称相同,那么它将在两个地方都有效。
您可以通过在 Visual Studio 中右键单击项目来访问本地用户机密
有关详细信息,请参阅 documentation。
答案 1 :(得分:0)
DefaultAzureCredential
将按顺序尝试几种凭证类型,如显示 here,因此如果不设置环境变量并使用 SharedTokenCacheCredential
排除 ExcludeSharedTokenCacheCredential = true
,它将使用 VisualStudioCredential
进行身份验证,即您登录 VS 的用户帐户。
要使其在本地工作,您需要将您的用户帐户添加到具有正确权限的密钥库的 Access Policies
,请遵循此 doc。 (或者如果在keyvault的Access policies
刀片中选择Azure role-based access control
,需要RBAC角色Key Vault Administrator
,按照这个doc添加。)添加后,工作正常。