Azure功能w/用户分配的托管身份从密钥库中检索机密在本地工作,但在Azure门户中失败



我创建了一个Azure函数,该函数使用用户分配的托管身份从Azure密钥库中检索机密。当我在VisualStudio中测试时,代码在本地工作,但当我发布到云中时失败。我已在Azure中创建了一个"托管身份"资源,并为该托管身份添加了"密钥库参与者"角色分配。在我的Azure功能中的"设置">身份>用户分配我已添加对托管标识的引用。由于代码在本地工作,并使用我的凭据向密钥库进行身份验证,我认为我在Azure门户网站上的设置中遗漏了一些内容。如有任何指导,我们将不胜感激。当我跟随MS文档到达发球台时,我被难住了。

以下是我在Azure门户中测试该功能时收到的错误。HTTP响应代码:500内部服务器错误执行"功能1"(失败,Id=XXXXXXXXXX,持续时间=19ms(服务请求失败。状态:400(错误请求(标题:日期:2021年11月22日星期一22:02:56 GMT内容长度:

我正在使用Azure.Identity进行身份验证,如下所示:应用程序身份验证到Azure.Intity迁移指南

public static class TestManagedIdentity
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
string secret = String.Empty;
string secretName = data.SecretName;
azureKeyVaultURI = "https://MyKeyVault.vault.azure.net";
var client = new SecretClient(new URI(azureKeuVaultURI), new DefaultAzureCredential());
var secret = client.GetSecret(secretName).Value;
log.LogInformation($"My secret value is {secret}");
return new OkObjectResult("Success!");
}
}

我解决了这个问题。我缺少对Azure托管身份客户端ID的引用。用以下内容更新了代码。

var client = new SecretClient(new Uri(azureKeyVaultURI), new DefaultAzureCredential( new DefaultAzureCredentialOptions { ManagedIdentityClientId = clientId }));

最新更新