在 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
我正在 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