运行 dotnet EF 使用来自 keyvault 的连接字符串进行迁移时出现 Azure devops 管道错误

Azure devops pipeline error when running dotnet EF migrations using a connection string from the keyvault

这里有很多类似我的问题,但其中 none 似乎有助于解决问题,因此提出了一个新问题。 我正在连接到一个密钥库,其中 returns 数据库连接字符串在 Program.cs 文件

中的 .net web api 应用程序中使用以下代码
var kVUri = $"https://{config["azureKeyVault:vault"]}.vault.azure.net/";

var azureServiceTokenProvider = new AzureServiceTokenProvider();

var keyVaultClient = new KeyVaultClient(
    new KeyVaultClient.AuthenticationCallback(
        azureServiceTokenProvider.KeyVaultTokenCallback)
);

configurationBuilder.AddAzureKeyVault(kVUri, keyVaultClient, new DefaultKeyVaultSecretManager());

上面的代码在本地运行良好,因为我可以访问 keyvault,但是当将代码部署到构建时,dotnet ef 迁移任务失败。 这是一个 cmdline 任务,运行ning“dotnet ef 迁移脚本 ...” 错误是“Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:参数:连接字符串:[未指定连接字符串]”

我已确保 MI 在应用服务中打开,在 AD 中有一个应用注册,并且此服务已被授予对 Key Vault 的权限,管道 运行 的服务连接s on 也有对保险库的权限。

当使用 clientId 和密码完成与 keyvault 的连接时,EF 迁移用于 运行。 我读到我需要添加 RunAs=app 但这似乎是如果我使用 cli 调用 servicetokenprovider,在这种情况下我不是,如果它确实需要进入管道,不确定它需要去哪里。

我们将不胜感激。

根据评论总结供其他社区参考:

运行 Az CLI 会话中使用服务主体进行身份验证的命令,服务主体应该被分配访问密钥库的权限。