在Azure Function中访问Azure Key Vault机密

时间:2019-10-14 21:08:32

标签: azure azure-functions azure-keyvault

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

我将系统分配的托管身份添加到我的Function App中,然后能够在Key Vault访问策略中选择我的App。我给了它如下所示的权限:

Permissions for function app

(我在此尝试不同的组合)

我还提供了有关提到的密钥库的新应用程序设置。

reference for key vault

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

logging.info(os.environ)

当我添加另一个应用程序设置时,只需使用纯文本,它就可以很好地工作。 对于任何想法,我将不胜感激。

3 个答案:

答案 0 :(得分: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");
            }

        }
    }
}

答案 1 :(得分:1)

我不知道您想通过os.environ获得什么。我测试了功能可以为我工作。

如果您已经在应用程序设置中设置了键值,则可以使用Environment.GetEnvironmentVariable("secrest name", EnvironmentVariableTarget.Process)来实现该功能。

enter image description here

enter image description here

答案 2 :(得分:0)

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

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

enter image description here

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

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