【问题标题】:Access Azure Key Vault secret in Azure Function在 Azure Function 中访问 Azure Key Vault 机密
【发布时间】:2020-02-11 12:14:47
【问题描述】:

我正在用事件网格事件触发的 python 中构建 Azure 函数,它应该能够从 Kay Vault 收集秘密。

我将系统分配的托管标识添加到我的 Function App,然后我能够在 Key Vault 访问策略中选择我的应用程序。我给了它如下权限:

(我在这一次尝试了不同的组合)

我还参考提到的密钥保管库提供了新的应用程序设置。

不幸的是,当我尝试从代码中检查这个值时,我无法得到这个。

logging.info(os.environ)

当我添加另一个应用程序设置时,只需使用纯文本就可以了。 如果您有任何想法,我将不胜感激。

【问题讨论】:

  • 您使用了哪些组合?请尝试获取和列出秘密权限。

标签: azure azure-functions azure-keyvault


【解决方案1】:

您可以使用以下帮助器获取值

namespace AccessKeyVault
{
    public static class GetKeyVaultValues
    {
        [FunctionName("GetKeyVaultValues")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            string linkKeyVaultUrl = $"https://keyVaultname.vault.azure.net/secrets/";
            string keyvaultKey = $"KeyVaultKey";
            var secretURL = linkKeyVaultUrl + keyvaultKey;

            //Get token from managed service principal
            var azureServiceTokenProvider = new AzureServiceTokenProvider();
            var kvClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
            try
            {
                var clientIdRecord = await kvClient.GetSecretAsync(secretURL).ConfigureAwait(false);

                string KeyvaultValue = clientIdRecord.Value;

                return req.CreateErrorResponse(HttpStatusCode.OK, "Key vault secret value is  :  " + KeyvaultValue);
            }
            catch (System.Exception ex)
            {

               return req.CreateResponse(HttpStatusCode.BadRequest, "Key vault value request is not successfull");
            }

        }
    }
}

【讨论】:

  • 我正在使用python,我想在python中构建这个函数。
【解决方案2】:

我不知道你想用os.environ 得到什么。我用函数测试它可以为我工作。

如果你已经在appsettings中设置了key-value的检索功能,你可以使用Environment.GetEnvironmentVariable("secrest name", EnvironmentVariableTarget.Process)来实现它。

【讨论】:

  • os.environ 是列出所有环境变量的python方法。
  • 所以你可以使用os.environ["setting-name"]来检索它。
  • 我用 os.getenv('setting-name') 做到了,它返回 None
  • os.environ["setting-name"] 呢?
  • 我用os.environ["setting-name"] 测试,它有效。 Test pic
【解决方案3】:

经过数小时的测试,我找到了解决这个问题的正确方法。

如果 Key Vault Reference 出现问题,请确保用于 Azure Function 的 App Function 基于正确的托管计划。

“消费计划”上的功能无法使用 Key Vault Reference。 “应用服务计划”上的相同代码可以正常工作。

https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2019-06-09
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2020-12-19
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多