asp.net-core - 使用用户分配的托管标识 (MSI) 从本地 Service Fabric 群集访问 Key Vault
问题描述
我想通过托管服务标识 (MSI) 从我的 Service Fabric 应用程序访问 Key Vault。我已在 Azure 门户中的虚拟机规模集上启用 MSI,并授予它访问我的 Key Vault 资源的权限。这就像云中的魅力一样。但是,我的本地开发环境存在问题。
据我了解,我可以授予自己对 Key Vault 的访问权限并在 Azure CLI 中运行 az login。唉,这在本地 Service Fabric 群集中运行应用程序时不起作用。我在服务结构中使用 .net core 2.1 并得到下面提到的异常。
Azure.Identity.AuthenticationFailedException:DefaultAzureCredential 未能从包含的凭据中检索令牌。
- EnvironmentCredential 身份验证不可用。环境变量未完全配置。
- ManagedIdentityCredential 身份验证不可用。未找到托管身份端点。
- SharedTokenCacheCredential 身份验证失败:持久性检查失败。检查内部异常以获取详细信息
- 无法在 C:\Users\Default\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json 访问 Visual Studio 令牌提供程序
- VisualStudioCodeCredential 身份验证失败:指定的登录会话不存在。它可能已经被终止。
解决方案
服务可能在内置的“NetworkService”帐户下运行,该帐户无法访问 CLI 以获取凭据,因为它已在您的用户会话中运行。
尝试创建 机器级环境变量来访问保管库:
- 使用密码创建服务主体。按照此处的步骤创建服务主体并向其授予对 Key Vault 的权限。
- 将名为 AzureServicesAuthConnectionString 的环境变量设置为 RunAs=App;AppId=AppId;TenantId=TenantId;AppKey=Secret。您需要将 AppId、TenantId 和 Secret 替换为第 1 步中的实际值。
- 在本地开发环境中运行应用程序。无需更改代码。AzureServiceTokenProvider 将使用此环境变量并使用服务主体向 Azure AD 进行身份验证。
不要忘记重启,所以环境变量会添加到所有进程中。
推荐阅读
- javascript - Material Design Table 不接受 dataSource 对象
- java - 使用 Apache Beam 使用直接运行器时无法为 BigQuery 数据集设置区域
- php - 如何使用 sqlsrv_prepare 函数
- asp.net-core-signalr - 在客户端(Angular App)上获取 SignalrR ConnectionId
- javascript - 如果推送的元素不是原始元素,为什么 JavaScript Array.push 不使用变量
- php - 在 Woocommerce 中更改“无产品”消息
- c# - HTTPS POST Web 服务请求格式 - 在子节点内插入多个值
- python - 正则表达式仅用于字符串中的数字?
- symfony - Symfony 中的 Materializecss 选择不起作用
- circleci - 从拉取请求触发 CircleCI 构建