无法访问Azure keyvault值

dddzy1tm  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(104)

我在试着从钥匙库里弄到钥匙的价值。我得到了这个例外。消息“ManagedIdentityCredential身份验证失败:服务请求失败。状态:503(服务不可用)内容:“service_unavailable error_description:服务不可用,因为计算机未连接到Azure。连接状态:断开连接。

string keyVaultName = Environment.GetEnvironmentVariable("keyVaultName");
        var kvUri = "https://" + keyVaultName + ".vault.azure.net";

        var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
        var secretName = "testKeyVault";
        try
        {
            var clientIdRecord = await client.GetSecretAsync(secretName);

            string KeyvaultValue = clientIdRecord.Value.Value;
            return new OkObjectResult(KeyvaultValue);

字符串
这是我的本地设置. json

{
 "IsEncrypted": false,
 "Values": {
 "AzureWebJobsStorage": "UseDevelopmentStorage=true",
 "FUNCTIONS_WORKER_RUNTIME": "dotnet",
 "keyVaultName": "DemoProjectVault"
 }
 }


谁能帮我把这个修好。

qyswt5oh

qyswt5oh1#

正如**@SiddheshDesai**在评论中提到的,您需要在Key vault访问策略中增加托管身份的功能。

**我对你的代码做了一些修改。我得到了我的钥匙库的秘密。
验证码:

using System;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Azure;
using System.Threading.Tasks;

public static class KeyVaultFunction
{
    [FunctionName("GetKeyVaultValue")]
    public static async Task<IActionResult> GetKeyVaultValue(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req)
    {
        try
        {
            string keyVaultName = Environment.GetEnvironmentVariable("keyVaultName");
            var kvUri = "https://<keyvault_name>.vault.azure.net/";

            var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
            var secretName = "<keyvault_secrete>";
            var secret = await client.GetSecretAsync(secretName);

            string keyVaultValue = secret.Value.Value;
            return new OkObjectResult(keyVaultValue);
        }
        catch (RequestFailedException ex)
        {
            return new StatusCodeResult((int)ex.Status);
        }
        catch (Exception ex)
        {
            return new StatusCodeResult(500);
        }
    }
}

字符串

输出:

成功运行如下,
x1c 0d1x的数据
通过上面的输出URL,我得到了我的密钥库secret如下:



我在Azure门户的函数应用中给托管身份赋予了权限On,如下所示:



并在Azure门户的密钥库中访问功能应用程序,如下所示,



我在钥匙库中获得了功能应用程序的访问权限,如下所示,
x1c4d 1x的
然后,我将其部署到Azure门户中的函数应用程序中,并成功部署,如下所示:



我在Azure门户的函数应用程序中运行代码,并获得了密钥库的秘密,如下所示:


相关问题