將 Service Fabric 應用程式的受控識別存取權授與 Azure 資源

在應用程式可使用其受控識別來存取其他資源之前,必須先將權限授與所存取受保護 Azure 資源上的身分識別。 授與權限通常是 Azure 服務的「控制平面」上的管理動作,該服務擁有透過 Azure Resource Manager 路由傳送的受保護資源,這會強制執行任何適用的角色型存取檢查。

確切的步驟順序將取決於所存取的 Azure 資源類型,以及用來授與權限的語言/用戶端。 本文的其餘部分假設使用者指派的身分識別指派給應用程式,並包含數個一般範例以方便您使用,但其並不是本主題的詳盡參考;如需授與權限的最新指示,請參閱個別 Azure 服務的文件。

授與 Azure 儲存體的存取權

您可以使用 Service Fabric 應用程式的受控識別 (在此情況下為使用者指派),以從 Azure 儲存體 blob 中擷取資料。 將儲存體 Blob 資料讀取器角色指派給應用程式在資源群組範圍內的受控識別,以將儲存體帳戶所需的權限授與身分識別。

如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

授與 Azure Key Vault 的存取權

同樣地,存取儲存體時,您可以利用 Service Fabric 應用程式的受控識別來存取 Azure 金鑰保存庫。 在 Azure 入口網站中授與存取權的步驟類似於上面所列的步驟,且不會在此重複。 請參閱下圖以瞭解差異。

Key Vault access policy

下列範例說明如何透過範本部署來授與保存庫的存取權;將下列程式碼片段新增為範本 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/clusters/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"
                        ]
                    }
            },
        ]
        }
    }

如需詳細資訊,請參閱保存庫 - 更新存取原則

下一步