使用密钥保管库中的连接字符串运行dotnet EF迁移时,Azure devops管道错误



这里有很多类似于我的问题,但似乎没有一个能帮助解决问题,因此出现了一个新问题。我正在连接到一个密钥保管库,该保管库使用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任务,运行"dotnet ef迁移脚本"错误是";Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:参数:连接字符串:[未指定连接字符串]">

我已确保MI在应用程序服务中打开,在AD中有应用程序注册,并且该服务已被授予密钥保管库的权限,管道运行的服务连接也有权访问保管库。

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

我们将非常感谢您的帮助。

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

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

最新更新