Azure 使用MSI从本地服务结构群集访问密钥保险库

Azure 使用MSI从本地服务结构群集访问密钥保险库,azure,azure-service-fabric,azure-keyvault,azure-managed-identity,Azure,Azure Service Fabric,Azure Keyvault,Azure Managed Identity,我想通过托管服务标识(MSI)从我的Service Fabric应用程序访问密钥库。我已在Azure门户中设置的虚拟机规模上启用MSI,并授予它访问我的密钥库资源的权限。这就像云端的魅力。然而,我的本地开发环境有问题 据我所知,我可以授予自己访问密钥库的权限,并在Azure CLI中运行az login。唉,在本地服务结构集群中运行应用程序时,这不起作用。我假设这是因为本地集群在网络服务帐户下运行 如何使用MSI从本地群集访问密钥库?托管服务标识主要关注Azure上运行的资源。我们没有办法支持本

我想通过托管服务标识(MSI)从我的Service Fabric应用程序访问密钥库。我已在Azure门户中设置的虚拟机规模上启用MSI,并授予它访问我的密钥库资源的权限。这就像云端的魅力。然而,我的本地开发环境有问题

据我所知,我可以授予自己访问密钥库的权限,并在Azure CLI中运行
az login
。唉,在本地服务结构集群中运行应用程序时,这不起作用。我假设这是因为本地集群在网络服务帐户下运行


如何使用MSI从本地群集访问密钥库?

托管服务标识主要关注Azure上运行的资源。我们没有办法支持本地开发环境

谢谢,
-Arturo

我假设您正在使用获取令牌,使用MSI对密钥库进行身份验证,这在Azure上起作用。如果是这样,您可以在本地开发环境中运行相同的代码。库将自动切换到Azure上使用MSI。您可以找到文档

注意:当开发在当前用户下运行的应用程序(例如应用程序服务)时,MSI场景的本地开发要容易得多。在这种情况下,您可以使用Azure CLI/Visual Studio帐户进行本地开发。您不需要创建单独的服务主体。Azure CLI/Visual Studio不适用于服务结构本地开发,因为本地群集在网络服务帐户下运行

对于服务结构方案,请执行以下步骤:

  • 创建服务主体并授予对密钥库的访问权。 你有两个选择。证书是更好的w.r.t安全性,但稍难做到

    选项1:。确保您提供了网络服务帐户或用于在本地运行结构访问证书的任何帐户。关于如何提供访问权限

    备选案文2:

  • 创建一个名为“AzureServicesAuthConnectionString”的环境变量。 关于为服务结构创建环境变量

    如果使用证书,请将“AzureServicesAuthConnectionString”设置为

    RunAs=App;AppId={AppId};TenantId={TenantId};证书打印= {指纹};CertificateStoreLocation={LocalMachine或CurrentUser}

    如果使用密码,请将“AzureServicesAuthConnectionString”设置为

    RunAs=App;AppId={AppId};TenantId={TenantId};AppKey={ClientSecret}


  • 如果以上步骤不起作用,请发布您得到的错误

    好的,但这并不是一个令人满意的答案。我宁愿做什么呢?我已经做了一些研究,基于你之前发布的链接,但现在删除了。我发现MSI仅限于Azure中的资源,但使用AppAuthentication预览API,我应该能够通过其他方式访问密钥库。Visual Studio和Azure CLI身份验证似乎都不适用于本地服务结构群集。文档说,它应该通过使用服务主体来工作。但到目前为止,我还没有成功设置它。服务主体是否适用于本地服务结构环境?你有更多关于如何设置的细节吗?谢谢你的回答。这正是我一直试图设置的。我不知道如何在ServiceFabric中创建环境变量。所以这可能是我错过的拼图。我稍后会尝试。我现在已经尝试了这个建议的解决方案,而且效果很好。我只想强调一下,对于Tennanti,我使用了Azure active Directory的目录ID。谢谢你,瓦伦:)我面临着一个类似的问题,我无法从网络服务帐户的服务结构集群中点击密钥保险库。我在ApplicationManifest.xml下添加了NetworkService的主要用户。为ResourceType证书和GrantRights=“Full”添加了SecurityAccessPolicys。最后把他们和秘密证书联系起来。我遗漏了什么吗?我仍然从密钥保管库客户端收到“拒绝访问”异常。如果我在单元测试中运行测试代码,我不会失败,因为所需的证书已安装在本地计算机上。您在Azure Active Directory中设置了吗?如果没有,您可以在Azure门户中导航到广告并注册新应用程序。创建后,打开它并将您的证书上载到其中。然后,您需要授予应用程序访问密钥库的权限。转到密钥Vault资源并打开访问控制。将应用程序添加为参与者。然后打开访问策略并在其中添加应用程序。@AdityaGaykar,请使用AzureServiceTokenProvider的PrincipalUsed属性检查用于身份验证的内容。这应该表明正在使用证书,而不是集成的windows身份验证(网络服务帐户)。PrincipalUser.CertificateThumbprint应使用证书的指纹。