【问题标题】:How to update secrets in KeyVault using functionApp managed identity如何使用 functionApp 托管标识更新 KeyVault 中的机密
【发布时间】:2021-08-04 02:49:34
【问题描述】:

我可以使用下面的 URI 通过 Azure 函数托管标识读取 keyvault 机密。

@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/)

我已使用 Keyvault 访问策略提供对 FA 托管身份的获取和设置机密访问权限。

如何使用托管身份更新 keyvault 中的机密。 我正在使用 Visual Studio 在 C# 中开发 FunctionApp。

【问题讨论】:

  • 您遇到的错误是什么?请张贴Minimal and Reproducible 代码。
  • 无论如何我都找不到执行此操作,我可以通过以下内容阅读:docs.microsoft.com/en-us/azure/app-service/…
  • 您在问题中提出的示例是将应用程序设置与 Keyvault 绑定。如果您需要更新 Keyvault 的功能,请使用 KeyVaultClient --- docs.microsoft.com/en-us/azure/key-vault/secrets/…
  • 谢谢!但为了避免在我的配置中存储 Keyvault 凭据,我想使用托管身份,因此寻找在 Kevault 中获取和设置机密的解决方案。
  • @SantoshJindal - KeyVaultClientSecretClient 支持托管 ID 凭据。检查this

标签: azure-functions azure-keyvault azure-managed-identity


【解决方案1】:

在此位置使用 Secrets SDK:https://docs.microsoft.com/en-us/azure/key-vault/secrets

您可以创建一个秘密客户端,并使用 SetSecret API。

这是一个使用 Node.JS 的非常基本的示例:https://github.com/udayxhegde/keyvault_managedid_node

你可以用 .NET 和 c# 做类似的事情,大致上这几行代码。

using System;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;


#in code snippets below, kvuri is your keyvault uri
#client_id is id of your managed identity
var client = new SecretClient(new Uri(kvUri), new ManagedIdentityCredential(client_id));
await client.SetSecretAsync(secretName, secretValue);

【讨论】:

  • 谢谢@udayxhedge。这在我将它部署在 functionApp 上时有效。任何关于如何在本地调试它的建议。如果使用 SecretClient client = new SecretClient(new Uri(uri), new DefaultAzureCredential())
  • 您也可以使用 DefaultAzureCredential()。如果您使用的是 SystemAssigned ManagedIdentity,则无需传递 client_id。 DefaultAzureCredential 还应该帮助您在本地进行调试,因为它将尝试其他几个凭据选项,而 AzureCliCredential 或 VisualStudioCodeCredential 是本地调试的两个不错的选项。查看上面 github repo 链接中的更新代码,我对其进行了更新以显示 ChainedTokenCredential 的示例以帮助进行本地调试,这是您的另一种选择。
  • 性能是个大问题。你知道如何克服吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 2020-07-23
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多