我正在使用事件网格事件触发的python构建Azure函数,该事件应该能够从Kay Vault收集秘密。
我将系统分配的托管身份添加到我的Function App中,然后能够在Key Vault访问策略中选择我的App。我给了它如下所示的权限:
(我在此尝试不同的组合)
我还提供了有关提到的密钥库的新应用程序设置。
不幸的是,当我尝试从代码中检查此值时,我无法获得此值。
logging.info(os.environ)
当我添加另一个应用程序设置时,只需使用纯文本,它就可以很好地工作。 对于任何想法,我将不胜感激。
答案 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)
来实现该功能。
答案 2 :(得分:0)
经过数小时的测试,我找到了解决此问题的正确方法。
如果Key Vault参考出现问题,请确保用于Azure Function的App Function是基于正确的托管计划的。
“消费计划”上的功能无法使用Key Vault参考。 “应用服务计划”中的相同代码可以正常工作。
https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references