如何为现有 Azure Service Fabric 集群启用用户分配的托管标识并连接到 Azure Key Vault 以读取机密?

How to enable User Assigned Managed Identity to existing Azure Service Fabric Cluster & Connect to Azure Key Vault to read secrets?

有一个现有的 Azure 服务结构实例,除了我们的应用程序之外,它还托管多个应用程序。目前托管在 Azure 服务结构上的应用程序正在使用使用证书的 Azure AD 应用程序连接到 Keyvault。

想要通过使用托管标识连接到 Azure Key Vault 来升级。但是启用系统分配的托管身份不是一个选项,因为目标 Azure 服务结构实例不仅仅专用于我们的应用程序,而是一个共享环境,它也托管其他项目的多个应用程序。

所以其他选项是启用用户分配的托管标识。

但是,如何通过 Power-shell 或其他最简单的方式在现有 Azure 服务结构实例上启用用户分配的托管标识?

现有 Azure 服务结构实例上的应用程序如何以编程方式 (c#) 向 Azure Key Vault 实例验证自身以访问其机密?

how to enable User Assigned Managed Identity on existing Azure service fabric instance via Power-shell or other easiest way?

如果想在service fabric中使用user-assigned MSI,有两种方式:

  1. Azure Service Fabric 集群托管在虚拟机规模集上,因此您可以利用 VMSS 的 MSI,参考文献here, via powershell or portal

  2. Enable the Managed Identity Token Service on the cluster firstly, then deploy Service Fabric application with a User-Assigned Managed Identity,目前只能通过ARM模板获取。

How application on existing Azure service fabric instance authenticate itself to Azure Key Vault instance programmatically (c#) to access its secrets?

要访问 azure keyvault secret,您可以使用 ManagedIdentityCredential of Azure.Identity to auth, make sure you have already added the MSI to the access policy of the keyvault

var client = new SecretClient(vaultUri: new Uri(keyVaultUrl), credential: new ManagedIdentityCredential());
KeyVaultSecret secret = client.SetSecret("secret-name", "secret-value");
secret = client.GetSecret("secret-name");

查看示例 here and here