Azure Data Factory 的受控識別

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用

本文可協助您了解受控識別 (先前稱為受控服務識別/MSI),及其在 Azure Data Factory 中的運作方式。

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

概觀

受控識別可免除管理認證的需求。 受控身分識別可為服務執行個體提供身分識別,以便在連線至支援 Microsoft Entra 驗證的資源時使用。 例如,該服務可使用受控識別來存取 Azure Key Vault 之類的資源,讓資料管理員能夠安全地儲存認證或存取儲存體帳戶。 該服務可使用受控識別來取得 Microsoft Entra 權杖。

受控識別有兩種支援的類型:

  • 系統指派:您可以直接在服務執行個體上啟用受控識別。 當您在建立服務期間允許系統指派的受控身分識別時,將會在 Microsoft Entra 中建立與該服務執行個體生命週期繫結的身分識別。 根據設計,只有該 Azure 資源可以使用此身分識別,自 Microsoft Entra ID 要求權杖。 因此,當刪除資源時,Azure 會自動為您刪除身分識別。
  • 使用者指派:您也可以建立受控識別,作為獨立的 Azure 資源。 您可以建立使用者指派的受控識別,並將其指派給資料處理站的一或多個執行個體。 在使用者指派的受控識別中,會分開管理身分識別與加以使用的資源。

受控識別提供下列優點:

  • 在 Azure Key Vault 中儲存認證,在此情況下,受控識別會用於 Azure Key Vault 驗證。
  • 使用受控識別驗證存取資料存放區或計算,包括 Azure Blob 儲存體、Azure 資料總管、Azure Data Lake Storage Gen1、Azure Data Lake Storage Gen2、Azure SQL Database、Azure SQL 受控執行個體、Azure Synapse Analytics、REST、Databricks 活動、Web 活動等等。 如需詳細資訊,請參閱連接器和活動的相關文章。
  • 受控識別也可用來透過儲存在 Azure Key Vault 中的客戶自控金鑰來加密/解密資料和中繼資料,以提供雙重加密。

系統指派的受控識別

注意

基於回溯相容性,系統指派的受控識別在文件中的其他位置以及 Data Factory Studio 中也被稱為「受控識別」。 我們在參考時將明確提及「使用者指派的受控識別」。

產生系統指派的受控識別

系統指派的受控識別會以下列方式產生:

  • 透過 Azure 入口網站或 PowerShell 建立資料處理站時,一律會自動建立受控識別。
  • 透過 SDK 建立資料處理站時,只有您在用於建立的處理站物件中指定 "Identity = new FactoryIdentity()" 時,才會建立受控識別。請參閱 .NET 快速入門 - 建立資料處理站中的範例。
  • 透過 REST API 建立資料處理站時,只有您在要求本文中指定 "identity" 區段時,才會建立受控識別。 請參閱 REST 快速入門 - 建立資料處理站中的範例。

如果您發現服務執行個體未依照擷取受控識別指示建立與受控識別的關聯,您可以用程式設計方式透過身分識別啟動器加以更新,而明確產生一個:

注意

  • 受控識別不可修改。 更新已有受控識別的服務執行個體並不會有任何影響,且受控識別會保持不變。
  • 如果您更新了已有受控識別的服務執行個體,但未在處理站物件中指定 "identity" 參數,或未在 REST 要求本文中指定 "identity" 區段,您將會收到錯誤。
  • 當您刪除服務執行個體時,相關聯的受控識別將會一併刪除。

使用 PowerShell 產生系統指派的受控識別

呼叫 Set-AzDataFactoryV2 命令後,您會看到新產生的 [身分識別] 欄位:

PS C:\> Set-AzDataFactoryV2 -ResourceGroupName <resourceGroupName> -Name <dataFactoryName> -Location <region>

DataFactoryName   : ADFV2DemoFactory
DataFactoryId     : /subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/ADFV2DemoFactory
ResourceGroupName : <resourceGroupName>
Location          : East US
Tags              : {}
Identity          : Microsoft.Azure.Management.DataFactory.Models.FactoryIdentity
ProvisioningState : Succeeded

使用 REST API 產生系統指派的受控識別

注意

如果您嘗試更新已有受控識別的服務執行個體,但未在處理站物件中指定 identity 參數,或未在 REST 要求本文中提供身分識別區段,您將會收到錯誤。

在要求本文中以 "identity" 區段呼叫下方的 API:

PATCH https://management.azure.com/subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<data factory name>?api-version=2018-06-01

要求本文:新增 "identity": { "type": "SystemAssigned" }。

{
    "name": "<dataFactoryName>",
    "location": "<region>",
    "properties": {},
    "identity": {
        "type": "SystemAssigned"
    }
}

回應:系統會自動建立受控識別,並據以填入 "identity" 區段。

{
    "name": "<dataFactoryName>",
    "tags": {},
    "properties": {
        "provisioningState": "Succeeded",
        "loggingStorageAccountKey": "**********",
        "createTime": "2017-09-26T04:10:01.1135678Z",
        "version": "2018-06-01"
    },
    "identity": {
        "type": "SystemAssigned",
        "principalId": "765ad4ab-XXXX-XXXX-XXXX-51ed985819dc",
        "tenantId": "72f988bf-XXXX-XXXX-XXXX-2d7cd011db47"
    },
    "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>",
    "type": "Microsoft.DataFactory/factories",
    "location": "<region>"
}

使用 Azure Resource Manager 範本產生系統指派的受控識別

Template: add "identity": { "type": "SystemAssigned" }.

{
    "contentVersion": "1.0.0.0",
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "resources": [{
        "name": "<dataFactoryName>",
        "apiVersion": "2018-06-01",
        "type": "Microsoft.DataFactory/factories",
        "location": "<region>",
        "identity": {
            "type": "SystemAssigned"
        }
    }]
}

使用 SDK 產生系統指派的受控識別

以 Identity=new FactoryIdentity() 呼叫 create_or_update 函式。 使用 .NET 的範例程式碼:

Factory dataFactory = new Factory
{
    Location = <region>,
    Identity = new FactoryIdentity()
};
client.Factories.CreateOrUpdate(resourceGroup, dataFactoryName, dataFactory);

擷取系統指派的受控識別

您可以從 Azure 入口網站或以程式設計方式擷取受控識別。 下列各節會顯示一些範例。

提示

若未看到受控識別,請藉由更新您的服務執行個體來產生受控識別

使用 Azure 入口網站擷取系統指派的受控識別

您可以從 Azure 入口網站 -> 您的資料處理站 -> [屬性] 中找到受控識別資訊。

Shows the Azure portal with the system-managed identity object ID and Identity Tenant for an Azure Data Factory.

  • 受控識別物件識別碼
  • 受控識別租用戶

在建立連結服務時也會顯示受控識別資訊,該服務支援受控識別驗證,例如 Azure Blob、Azure Data Lake Storage、Azure Key Vault 等。

若要授與權限,請遵循下列步驟。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

  1. 選取 [存取控制 (IAM)]。

  2. 選取 [新增>][新增角色指派]。

    Screenshot that shows Access control (IAM) page with Add role assignment menu open.

  3. 在 [成員] 索引標籤上,選取 [受控識別],然後選取 [選取成員]

  4. 選取 Azure 訂閱。

  5. 在 [系統指派的受控識別] 底下選取 [資料處理站],然後選取資料處理站。 您也可以使用物件識別碼或資料處理站名稱 (作為受控識別名稱) 來尋找此身分識別。 若要取得受控識別的應用程式識別碼,請使用 PowerShell。

  6. 在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。

使用 PowerShell 擷取系統指派的受控識別

當您取得特定的服務執行個體時,將會傳回受控識別主體識別碼和租用戶識別碼,如下所示。 使用 PrincipalId 授與存取權:

PS C:\> (Get-AzDataFactoryV2 -ResourceGroupName <resourceGroupName> -Name <dataFactoryName>).Identity

PrincipalId                          TenantId
-----------                          --------
765ad4ab-XXXX-XXXX-XXXX-51ed985819dc 72f988bf-XXXX-XXXX-XXXX-2d7cd011db47

您可以複製上述主體識別碼,然後以主體識別碼作為參數執行下列 Microsoft Entra ID 命令,以取得應用程式識別碼。

PS C:\> Get-AzADServicePrincipal -ObjectId 765ad4ab-XXXX-XXXX-XXXX-51ed985819dc

ServicePrincipalNames : {76f668b3-XXXX-XXXX-XXXX-1b3348c75e02, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId         : 76f668b3-XXXX-XXXX-XXXX-1b3348c75e02
DisplayName           : ADFV2DemoFactory
Id                    : 765ad4ab-XXXX-XXXX-XXXX-51ed985819dc
Type                  : ServicePrincipal

使用 REST API 擷取受控識別

當您取得特定的服務執行個體時,將會傳回受控識別主體識別碼和租用戶識別碼,如下所示。

在要求中呼叫下方的 API:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}?api-version=2018-06-01

回應:您將收到如下列範例所示的回應。 "identity" 區段會據以填入。

{
    "name":"<dataFactoryName>",
    "identity":{
        "type":"SystemAssigned",
        "principalId":"554cff9e-XXXX-XXXX-XXXX-90c7d9ff2ead",
        "tenantId":"72f988bf-XXXX-XXXX-XXXX-2d7cd011db47"
    },
    "id":"/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>",
    "type":"Microsoft.DataFactory/factories",
    "properties":{
        "provisioningState":"Succeeded",
        "createTime":"2020-02-12T02:22:50.2384387Z",
        "version":"2018-06-01",
        "factoryStatistics":{
            "totalResourceCount":0,
            "maxAllowedResourceCount":0,
            "factorySizeInGbUnits":0,
            "maxAllowedFactorySizeInGbUnits":0
        }
    },
    "eTag":"\"03006b40-XXXX-XXXX-XXXX-5e43617a0000\"",
    "location":"<region>",
    "tags":{

    }
}

提示

若要從 ARM 範本擷取受控識別,請在 ARM JSON 中新增 [輸出] 區段:

{
    "outputs":{
        "managedIdentityObjectId":{
            "type":"string",
            "value":"[reference(resourceId('Microsoft.DataFactory/factories', parameters('<dataFactoryName>')), '2018-06-01', 'Full').identity.principalId]"
        }
    }
}

使用者指派的受控識別

您可以在 Microsoft Entra ID 中建立、刪除、管理使用者指派的受控識別。 如需詳細資訊,請參閱使用 Azure 入口網站對使用者指派的受控識別建立、列出、刪除或指派角色

若要使用「使用者指派的受控識別」,您必須先在 UAMI 的服務執行個體中建立認證

請參閱下列介紹何時及如何使用受控識別的相關主題:

請參閱 Azure 資源受控識別概觀,以深入了解 Azure 資源受控識別的背景 (Azure Data Factory 中的受控識別以此為基礎)。

請參閱受控識別的限制,這些限制也適用於 Azure Data Factory 中的受控識別。