entity-framework-core - 使用 keyvault 中的连接字符串运行 dotnet EF 迁移时出现 Azure devops 管道错误
问题描述
这里有很多类似于我的问题,但似乎没有一个有助于解决问题,因此是一个新问题。我正在连接到一个密钥库,它使用 Program.cs 文件中的 .net Web api 应用程序中的以下代码返回 db 连接字符串
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());
上面的代码在本地工作得很好,因为我可以访问密钥库,但是当将代码部署到构建时,dotnet ef 迁移的任务失败了。这是一个 cmdline 任务,正在运行“dotnet ef migrations script ...”错误是“Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:参数:连接字符串:[未指定连接字符串]”
我已经确保在应用服务中打开了 MI,在 AD 中有一个应用注册,并且该服务已被授予对 Key Vault 的权限,运行管道的服务连接也具有对 Vault 的权限。
当使用 clientId 和 secret 完成与 keyvault 的连接时,EF 迁移用于运行。我读到我需要添加 RunAs=app 但这似乎是如果我使用 cli 调用 servicetokenprovider,在这种情况下我不是,如果它确实需要进入管道,不确定它需要去哪里。
一些帮助将不胜感激。
解决方案
从评论中总结以供其他社区参考:
在使用服务主体进行身份验证的 Az CLI 会话中运行命令,并且应该为服务主体分配对 keyvault 的访问权限。
推荐阅读
- mongodb - 如何从特定操作系统过滤 mongodb 上的进程
- python - 使用 Pandas 推荐阅读大型文本文件?
- python - 将 pandas DataFrame 转换为 excel 工作表时删除标题中的默认格式
- azure - 使用历史模式在 Azure 应用服务上部署 Vue CLI
- gtk - 无法构建 Conda 包:conda-builder gitlab-ci 环境中缺少 gtkdocize
- google-cloud-platform - 用于服务器到服务器应用程序的 Google OAuth 2.0
- architecture - 微服务新出口的边界——如何拆分?
- javascript - 更改变量脚本
- angular - 如何获取对 Angular 2 组件样式列表的引用/如何在组件内动态加载 CSS
- css - 我可以使用 CSS order 属性指定相对于当前订单位置的订单值吗?