在 Azure Function 中访问 Azure Key Vault 机密

Access Azure Key Vault secret in Azure Function

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

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

(我尝试了不同的组合)

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

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

logging.info(os.environ)

当我添加另一个应用程序设置时,仅使用明文就可以很好地工作。 我将不胜感激任何想法还有什么可以做的。

您可以使用以下助手来获取值

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");
            }

        }
    }
}

我不知道你想用 os.environ 得到什么。我用函数测试它对我有用。

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

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

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

'Consumption Plan' 上的函数无法使用 Key Vault Reference。 'App Service Plan' 上的相同代码工作正常。

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