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 建立資料處理站時,只有在建立 Factory 物件中指定 「Identity = new FactoryIdentity()」 時,才會建立受控識別。請參閱 .NET 快速入門 - 建立資料處理站 中的 範例。
  • 透過 REST API 建立資料處理站時,只有在您在要求本文中指定「身分識別」區段時,才會建立受控識別。 請參閱 REST 快速入門中的 範例 - 建立資料處理站

如果您發現您的服務實例沒有與下列 擷取受控識別指示相關聯的受控識別 ,您可以透過程式設計方式更新它來明確產生一個:

注意

  • 無法修改受控識別。 更新已經有受控識別的服務實例並沒有任何影響,且受控識別會保持不變。
  • 如果您更新的服務實例,其已經有受控識別,而不需在處理站物件中指定 「identity」 參數,或在 REST 要求本文中指定 「身分識別」區段,您會收到錯誤。
  • 當您刪除服務實例時,也會刪除相關聯的受控識別。

使用 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 產生系統指派的受控識別

注意

如果您嘗試更新已經有受控識別的服務實例,而不需在 Factory 物件中指定 身分識別 參數,或在 REST 要求本文中提供 身分識別 區段,您會收到錯誤。

使用要求本文中的「身分識別」區段呼叫下列 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"
    }
}

回應 :系統會自動建立受控識別,並據以填入「身分識別」區段。

{
    "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 範本產生系統指派的受控識別

範本 :新增 「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 儲存體、Azure 金鑰保存庫等。

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

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

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

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

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

  4. 選取 Azure 訂閱。

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

回應 :您會得到如下列範例所示的回應。 「身分識別」區段會據以填入。

{
    "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 中的受控識別。