为 Service Fabric 应用程序授予对 Service Fabric 群集上的 Azure 资源的访问权限

在应用程序可以使用其托管标识访问其他资源之前,必须为该标识授予对所要访问的受保护 Azure 资源的权限。 授予权限通常是 Azure 服务的“控制平面”中的一项管理操作,该服务拥有通过 Azure 资源管理器路由的受保护资源。 它会强制实施任何适用的基于角色的访问检查。

具体的步骤顺序取决于要访问的 Azure 资源的类型,以及用于授予权限的语言和客户端。 本文假定用户分配的标识分配给应用程序,并包含多个示例。 有关授予权限的最新信息,请参阅相应 Azure 服务的文档。

授予对 Azure 存储访问权限

可使用 Service Fabric 应用程序的托管标识(在本例中为用户分配的标识)来检索 Azure 存储 Blob 中的数据。 在 Azure 门户中使用以下步骤为标识授予所需的权限:

  1. 导航到您的存储帐户。
  2. 选择左侧面板中的“访问控制(IAM)”链接。
  3. (可选)检查现有访问权限:在“查找”控件中选择系统分配的托管标识或用户分配的托管标识。 从随后的结果列表中选择相应的标识。
  4. 选择页面顶部的“添加”>“添加角色分配”,为应用程序的标识添加新的角色分配。
  5. 在“角色”下,从下拉列表中,选择“存储 Blob 数据读取器”。
  6. 在下一个下拉列表中,在“将访问权限分配给”下,选择“用户分配的托管标识”。
  7. 接下来,确保“订阅”下拉列表中列出了正确的订阅,然后将“资源组”设置为“所有资源组”。
  8. 在“选择”下,选择对应于 Service Fabric 应用程序的 UAI,然后选择“保存”。

对系统分配的 Service Fabric 托管标识的支持不包括 Azure 门户中的集成。 如果应用程序使用系统分配的标识,请查找应用程序的标识的客户端 ID,然后重复上述步骤,但在“查找”控件中选择“Microsoft Entra 用户、组或服务主体”选项

授予对 Azure Key Vault 的访问权限

与访问存储类似,可以利用 Service Fabric 应用程序的托管标识来访问 Azure Key Vault。 在 Azure 门户中授予访问权限的步骤类似于上面所列的步骤。 有关差异,请参考下图。

Screenshot shows the Key Vault with Access policies selected.

以下示例演示如何使用模板部署授予对保管库的访问权限。 在模板的 resources 元素下,将下面的代码片段添加为另一个条目。 此示例演示如何为用户分配的标识类型和系统分配的标识类型分别授予访问权限。 请选择适用的一个。

    # under 'variables':
  "variables": {
        "userAssignedIdentityResourceId" : "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]",
    }
    # under 'resources':
    {
        "type": "Microsoft.KeyVault/vaults/accessPolicies",
        "name": "[concat(parameters('keyVaultName'), '/add')]",
        "apiVersion": "2018-02-14",
        "properties": {
            "accessPolicies": [
                {
                    "tenantId": "[reference(variables('userAssignedIdentityResourceId'), '2018-11-30').tenantId]",
                    "objectId": "[reference(variables('userAssignedIdentityResourceId'), '2018-11-30').principalId]",
                    "dependsOn": [
                        "[variables('userAssignedIdentityResourceId')]"
                    ],
                    "permissions": {
                        "keys":         ["get", "list"],
                        "secrets":      ["get", "list"],
                        "certificates": ["get", "list"]
                    }
                }
            ]
        }
    },

对于系统分配的托管标识:

    # under 'variables':
  "variables": {
        "sfAppSystemAssignedIdentityResourceId": "[concat(resourceId('Microsoft.ServiceFabric/managedClusters/applications/', parameters('clusterName'), parameters('applicationName')), '/providers/Microsoft.ManagedIdentity/Identities/default')]"
    }
    # under 'resources':
    {
        "type": "Microsoft.KeyVault/vaults/accessPolicies",
        "name": "[concat(parameters('keyVaultName'), '/add')]",
        "apiVersion": "2018-02-14",
        "properties": {
            "accessPolicies": [
            {
                    "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
                    "tenantId": "[reference(variables('sfAppSystemAssignedIdentityResourceId'), '2018-11-30').tenantId]",
                    "objectId": "[reference(variables('sfAppSystemAssignedIdentityResourceId'), '2018-11-30').principalId]",
                    "dependsOn": [
                        "[variables('sfAppSystemAssignedIdentityResourceId')]"
                    ],
                    "permissions": {
                        "secrets": [
                            "get",
                            "list"
                        ],
                        "certificates": 
                        [
                            "get", 
                            "list"
                        ]
                    }
            },
        ]
        }
    }

有关详细信息,请参阅保管库 - 更新访问策略

后续步骤