将 Azure Managed Identity 用于部署到 Azure 的应用程序?

Using Azure Managed Identity for app deployed to Azure?

我有一个将部署到 azure 的 azure 函数应用程序。在此应用程序中,我有一些存储在 Key Vault 中的机密,我需要使用 Azure Managed Identity 使用这些机密。我的 类 之一有以下方法,它检索存储在 KeyVault 上的秘密。

public static string GetSecretValue(string secretkey)
        {
            string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
            var kvUri = "https://" + keyVaultName + ".vault.azure.net";
            var secretclient = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
            return secretclient.GetSecret(secretkey).Value.Value;
        }

我有一个环境变量,用于存储我的密钥保管库名称,如代码中所示。我需要的是检查我的步骤是否正确,以便使用 Azure Managed Identity 检索 production/deployment 期间存储在 KeyVault 中的 5 个秘密的值到 Azure,并确保一切正常(请注意,当 运行 在本地一切正常。

到目前为止我所做的如下:

1- 为 Azure Function App 启用托管标识

2- 授予 Azure 功能(选择它作为用户主体)访问 KeyVault 的权限

3- 根据上面显示的方法在 Visual Studio 中配置了 Azure Key Vault

我的问题是,为了使用 Azure Managed Identities,我是否在上面的代码或步骤中遗漏了什么?我应该在 Azure 的应用程序设置中添加任何其他内容还是没有必要?我可以按照显示的方式保留环境变量,还是应该将其存储在 Azure 的其他地方?

我已经在我的环境中进行了测试。

您需要为每个机密添加具有以下值的应用程序设置:

@Microsoft.KeyVault(SecretUri=https://my-key-vault.vault.azure.net/secrets/secretName/secretVersion)

您可以从secret当前版本的secret标识符中找到secret Uri:

我使用下面的代码行调用了秘密:

var secretValue = Environment.GetEnvironmentVariable("secret1", EnvironmentVariableTarget.Process);  

我能够成功获取密钥保管库机密