我想通过托管服务标识(MSI)从我的Service Fabric应用程序访问密钥保管库。我已在Azure门户中设置的虚拟机规模上启用了MSI,并使其可以访问我的Key Vault资源。这就像云中的魅力一样。但是,我在本地开发环境方面遇到了问题。
据我了解,我可以授予自己访问密钥保管库的权限,并在Azure CLI中运行Task.Delay()
。唉,在本地Service Fabric集群中运行应用程序时,这不起作用。我认为这是因为本地群集在NETWORK SERVICE帐户下运行。
如何使用MSI从本地群集访问密钥保管库?
答案 0 :(得分:1)
我假设您正在使用Microsoft.Azure.Services.AppAuthentication library获取使用MSI对密钥保管库进行身份验证的令牌,而这正在使用Azure。如果是这样,您可以在本地开发环境中运行相同的确切代码。该库将自动切换到在Azure上使用MSI。您可以找到文档here
注意:在开发在当前用户下运行的应用程序时,MSI场景的本地开发会更容易,例如:应用服务。在这种情况下,您可以使用Azure CLI / Visual Studio帐户进行本地开发。您无需创建单独的服务主体。 Azure CLI / Visual Studio不适用于Service Fabric本地开发,因为本地群集在网络服务帐户下运行。
对于Service Fabric方案,请按以下步骤操作:
创建服务主体并授予Key Vault访问权限。 你有两个选择。证书是更好的安全性,但稍微难以做到。
选项1:Create a service principal with a certificate。确保您提供网络服务帐户或用于运行光纤网的本地访问证书的任何帐户。 Refer for details关于如何提供访问权限。
OR
创建一个名为“AzureServicesAuthConnectionString”的环境变量。 Refer this为服务结构创建环境变量。
如果使用证书,请设置" AzureServicesAuthConnectionString"到
运行方式=应用;的AppId = {的AppId}; TenantId = {TenantId}; CertificateThumbprint = {Thumbprint}; CertificateStoreLocation = {LocalMachine或CurrentUser}
如果使用密码,请设置" AzureServicesAuthConnectionString"到
运行方式=应用;的AppId = {的AppId}; TenantId = {TenantId};的AppKey = {ClientSecret}
如果上述步骤不起作用,请发布您收到的错误。
答案 1 :(得分:0)
托管服务标识专注于在Azure上运行的资源。我们没有办法支持本地开发环境。
谢谢, -Arturo