我计划在我的 Azure Function App 中使用 azure key Vault。
我可以看到我们可以通过以下两种方式在 Azure Function App 中使用密钥保管库:
a.在配置中使用引用变量
@Microsoft.KeyVault(SecretUri={copied identifier for the username secret})
b.使用.NET SDK
Azure.Security.KeyVault.Secrets
Azure.Identity
示例(使用.NET SDK):
static void Main(string[] args)
{
string secretName = "mySecret";
string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
Console.Write("Input the value of your secret > ");
string secretValue = Console.ReadLine();
Console.Write("Creating a secret in " + keyVaultName + " called '" + secretName + "' with the value '" + secretValue + "` ...");
client.SetSecret(secretName, secretValue);
Console.WriteLine(" done.");
Console.WriteLine("Forgetting your secret.");
secretValue = "";
Console.WriteLine("Your secret is '" + secretValue + "'.");
Console.WriteLine("Retrieving your secret from " + keyVaultName + ".");
KeyVaultSecret secret = client.GetSecret(secretName);
Console.WriteLine("Your secret is '" + secret.Value + "'.");
Console.Write("Deleting your secret from " + keyVaultName + " ...");
client.StartDeleteSecret(secretName);
System.Threading.Thread.Sleep(5000);
Console.WriteLine(" done.");
}
但我的问题是,我应该如何决定应该使用哪一个?
Key Vault 引用的形式为
@Microsoft.KeyVault({referenceString})
,它仅应用于 Azure 门户。虽然您提供的代码示例在门户和本地都运行良好。
对于 Key Vault 参考,您需要为您的函数应用创建系统分配的托管标识,并为此函数的 keyvault 服务原则启用“获取”权限。虽然示例使用登录用户作为凭据,但您只需为用户启用 azure keyvault 的“获取”权限。
从函数应用程序使用 KeyVault 的方式发生了很多变化。 这是一篇关于从函数应用程序中使用 KeyVault 的精彩且非常完整的文章, 更新了 .NET 8,包括如何设置基于角色的访问以及如何本地调试: