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 入口網站 - > 您的資料處理站 - > 屬性中找到受控識別資訊。
- 受控識別物件識別碼
- 受控識別租使用者
當您建立支援受控識別驗證的連結服務時,也會顯示受控識別資訊,例如 Azure Blob、Azure Data Lake 儲存體、Azure 金鑰保存庫等。
若要授與許可權,請遵循下列步驟。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
選取 [存取控制 (IAM)]。
選取 [新增>][新增角色指派]。
在 [ 成員] 索引標籤上,選取 [受控識別 ],然後選取 [ 選取成員 ]。
選取 Azure 訂閱。
在 [系統指派的受控識別 ] 底下 ,選取 [Data Factory ],然後選取資料處理站。 您也可以使用物件識別碼或資料處理站名稱(作為受控識別名稱)來尋找此身分識別。 若要取得受控識別的應用程式識別碼,請使用 PowerShell。
在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。
使用 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 Lake Store 複製到 Azure Data Lake Store。
如需 Azure 資源受控識別的詳細資訊,請參閱 適用于 Azure 資源的受控識別概觀 ,以取得 Azure Data Factory 中受控識別的基礎。
請參閱 受控識別的限制,這些限制 也適用于 Azure Data Factory 中的受控識別。