【发布时间】:2022-01-09 22:59:55
【问题描述】:
我有一个将部署到 azure 的 azure 函数应用。在这个应用程序中,我有一些秘密存储在 Key Vault 中,我需要使用 Azure Managed Identity。我的一个类中有以下方法可以检索存储在 KeyVault 上的机密。
public static string GetSecretValue(string secretkey)
{
string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var secretclient = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
return secretclient.GetSecret(secretkey).Value.Value;
}
我有一个环境变量,用于存储我的 Key Vault 名称,如代码所示。我需要检查我的步骤是否正确,以便在生产/部署到 Azure 期间使用 Azure Managed Identity 检索存储在 KeyVault 中的 5 个机密的值,并确保一切正常(请注意,在本地运行时一切正常)。
到目前为止,我所做的如下:
1- 为 Azure Function App 启用托管标识
2- 授予 Azure Function 访问 KeyVault 的权限(选择它作为用户主体)
3- 根据上述方法在 Visual Studio 中配置 Azure Key Vault
我的问题是为了使用 Azure Managed Identities,我是否在上面的代码或步骤中遗漏了某些内容?我应该在 Azure 上的应用程序设置中添加任何其他内容还是不需要添加?我可以保持环境变量的显示方式还是应该将其存储在 Azure 上的其他位置?
【问题讨论】:
-
如果它在本地正常工作,这意味着您的代码或多或少是正确的(因为
DefaultAzureCredential将使用浏览器登录来获取凭据,并且您提到它可以工作)。您能否将屏幕截图粘贴到您的问题中,详细说明您分配给托管身份的主体的权限?此外,您可能希望使用 Application Insights 或其他一些记录器记录该值,以便查看那里是否存在有效值?
标签: c# .net azure azure-keyvault