適用於 Azure Synapse 的受控服務識別
本文可協助您了解受控識別 (先前稱為受控服務識別/MSI),及其在 Azure Synapse 中的運作方式。
注意
建議您使用 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 Synapse Analytics 要求系統指派的受控識別必須與 Synapse 工作區一起建立。
- 使用者指派:您也可以建立受控識別,作為獨立的 Azure 資源。 您可以建立使用者指派的受控識別,並將其指派給 Synapse 工作區的一或多個執行個體。 在使用者指派的受控識別中,會分開管理身分識別與加以使用的資源。
受控識別提供下列優點:
- 在 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 中的客戶自控金鑰來加密/解密資料和中繼資料,以提供雙重加密。
系統指派的受控識別
注意
檔及 Synapse Studio UI 中,系統指派的受控識別也稱為「受控識別」,以供回溯相容性之用。 我們會在參考時明確提及「使用者指派的受控識別」。
產生系統指派的受控識別
系統指派的受控識別會產生如下:
- 透過 Azure 入口網站 或 PowerShell 建立 Synapse 工作區時,一律會自動建立受控識別。
- 透過 SDK 建立工作區時,只有在 Synapse 工作區物件中指定 Identity = new ManagedIdentity“,才能建立受控識別。請參閱 .NET 快速入門 - 建立數據處理站中的範例。
- 透過 REST API 建立 Synapse 工作區時,只有在您在要求本文中指定「身分識別」區段時,才會建立受控識別。 請參閱 REST 快速入門中的 範例 - 建立數據處理站。
如果您發現您的服務實例沒有與下列 擷取受控識別指示相關聯的受控識別 ,您可以透過程序設計方式更新它來明確產生一個:
注意
- 無法修改受控識別。 更新已經有受控識別的服務實例並沒有任何影響,且受控識別會保持不變。
- 如果您更新的服務實例,其已經有受控識別,而不需在處理站或工作區物件中指定 「identity」 參數,或在 REST 要求本文中指定 「身分識別」區段,您會收到錯誤。
- 當您刪除服務實例時,將會一併刪除相關聯的受控識別。
使用 PowerShell 產生系統指派的受控識別
呼叫 New-AzSynapseWorkspace 命令,您會看到新產生的「身分識別」字段:
PS C:\> $creds = New-Object System.Management.Automation.PSCredential ("ContosoUser", $password)
PS C:\> New-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName> -Location <region> -DefaultDataLakeStorageAccountName <storageAccountName> -DefaultDataLakeStorageFileSystem <fileSystemName> -SqlAdministratorLoginCredential $creds
DefaultDataLakeStorage : Microsoft.Azure.Commands.Synapse.Models.PSDataLakeStorageAccountDetails
ProvisioningState : Succeeded
SqlAdministratorLogin : ContosoUser
VirtualNetworkProfile :
Identity : Microsoft.Azure.Commands.Synapse.Models.PSManagedIdentity
ManagedVirtualNetwork :
PrivateEndpointConnections : {}
WorkspaceUID : <workspaceUid>
ExtraProperties : {[WorkspaceType, Normal], [IsScopeEnabled, False]}
ManagedVirtualNetworkSettings :
Encryption : Microsoft.Azure.Commands.Synapse.Models.PSEncryptionDetails
WorkspaceRepositoryConfiguration :
Tags :
TagsTable :
Location : <region>
Id : /subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/
Microsoft.Synapse/workspaces/<workspaceName>
Name : <workspaceName>
Type : Microsoft.Synapse/workspaces
使用 REST API 產生系統指派的受控識別
注意
如果您嘗試更新已經有受控識別的服務實例,而不需在工作區物件中指定 身分識別 參數,或在 REST 要求本文中提供 身分識別 區段,您會收到錯誤。
使用要求本文中的「身分識別」區段呼叫下列 API:
PATCH https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01
要求本文:新增 “identity”: { “type”: “SystemAssigned” }。
{
"name": "<workspaceName>",
"location": "<region>",
"properties": {},
"identity": {
"type": "SystemAssigned"
}
}
回應:系統會自動建立受控識別,並據以填入「身分識別」區段。
{
"name": "<workspaceName>",
"tags": {},
"properties": {
"provisioningState": "Succeeded",
"loggingStorageAccountKey": "**********",
"createTime": "2021-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.Synapse/workspaces/<workspaceName>",
"type": "Microsoft.Synapse/workspaces",
"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": "<workspaceName>",
"apiVersion": "2018-06-01",
"type": "Microsoft.Synapse/workspaces",
"location": "<region>",
"identity": {
"type": "SystemAssigned"
}
}]
}
使用 SDK 產生系統指派的受控識別
Workspace workspace = new Workspace
{
Identity = new ManagedIdentity
{
Type = ResourceIdentityType.SystemAssigned
},
DefaultDataLakeStorage = new DataLakeStorageAccountDetails
{
AccountUrl = <defaultDataLakeStorageAccountUrl>,
Filesystem = <DefaultDataLakeStorageFilesystem>
},
SqlAdministratorLogin = <SqlAdministratorLoginCredentialUserName>
SqlAdministratorLoginPassword = <SqlAdministratorLoginCredentialPassword>,
Location = <region>
};
client.Workspaces.CreateOrUpdate(resourceGroupName, workspaceName, workspace);
擷取系統指派的受控識別
您可以從 Azure 入口網站 或以程序設計方式擷取受控識別。 下列各節顯示一些範例。
提示
如果您沒有看到受控識別, 請藉由更新服務實例來產生受控識別 。
使用 Azure 入口網站 擷取系統指派的受控識別
您可以從 Azure 入口網站 -> Synapse 工作區 -> 屬性中找到受控識別資訊。
- 受控識別物件標識碼
當您建立支援受控識別驗證的鏈接服務時,也會顯示受控識別資訊,例如 Azure Blob、Azure Data Lake 儲存體、Azure 金鑰保存庫 等。
若要授與許可權,請遵循下列步驟。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
選取 [存取控制 (IAM)]。
選取 [新增>][新增角色指派]。
在 [ 成員] 索引標籤上,選取 [受控識別],然後選取 [ 選取成員]。
選取 Azure 訂閱。
在 [系統指派的受控識別] 下,選取 [Synapse 工作區],然後選取工作區。 您也可以使用物件識別碼或工作區名稱(作為受控識別名稱)來尋找此身分識別。 若要取得受控識別的應用程式標識碼,請使用PowerShell。
在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。
使用 PowerShell 擷取系統指派的受控識別
當您取得特定服務實例時,將會傳回受控識別主體標識碼和租用戶標識碼,如下所示。 使用 PrincipalId 來授與存取權:
PS C:\> (Get-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName>).Identity
IdentityType PrincipalId TenantId
------------ ----------- --------
SystemAssigned cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05 72f988bf-XXXX-XXXX-XXXX-2d7cd011db47
您可以複製上述主體標識碼來取得應用程式標識碼,然後執行下列 Microsoft Entra ID 命令,並將主體標識碼作為參數。
PS C:\> Get-AzADServicePrincipal -ObjectId cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05
ServicePrincipalNames : {76f668b3-XXXX-XXXX-XXXX-1b3348c75e02, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId : 76f668b3-XXXX-XXXX-XXXX-1b3348c75e02
DisplayName : <workspaceName>
Id : cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05
Type : ServicePrincipal
使用 REST API 擷取受控識別
當您取得特定服務實例時,將會傳回受控識別主體標識碼和租用戶標識碼,如下所示。
在要求中呼叫下列 API:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01
回應:您會得到如下列範例所示的回應。 「身分識別」區段會據以填入。
{
"properties": {
"defaultDataLakeStorage": {
"accountUrl": "https://exampledatalakeaccount.dfs.core.windows.net",
"filesystem": "examplefilesystem"
},
"encryption": {
"doubleEncryptionEnabled": false
},
"provisioningState": "Succeeded",
"connectivityEndpoints": {
"web": "https://web.azuresynapse.net?workspace=%2fsubscriptions%2{subscriptionId}%2fresourceGroups%2f{resourceGroupName}%2fproviders%2fMicrosoft.Synapse%2fworkspaces%2f{workspaceName}",
"dev": "https://{workspaceName}.dev.azuresynapse.net",
"sqlOnDemand": "{workspaceName}-ondemand.sql.azuresynapse.net",
"sql": "{workspaceName}.sql.azuresynapse.net"
},
"managedResourceGroupName": "synapseworkspace-managedrg-f77f7cf2-XXXX-XXXX-XXXX-c4cb7ac3cf4f",
"sqlAdministratorLogin": "sqladminuser",
"privateEndpointConnections": [],
"workspaceUID": "e56f5773-XXXX-XXXX-XXXX-a0dc107af9ea",
"extraProperties": {
"WorkspaceType": "Normal",
"IsScopeEnabled": false
},
"publicNetworkAccess": "Enabled",
"cspWorkspaceAdminProperties": {
"initialWorkspaceAdminObjectId": "3746a407-XXXX-XXXX-XXXX-842b6cf1fbcc"
},
"trustedServiceBypassEnabled": false
},
"type": "Microsoft.Synapse/workspaces",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}",
"location": "eastus",
"name": "{workspaceName}",
"identity": {
"type": "SystemAssigned",
"tenantId": "72f988bf-XXXX-XXXX-XXXX-2d7cd011db47",
"principalId": "cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05"
},
"tags": {}
}
提示
若要從 ARM 範本擷取受控識別,請在 ARM JSON 中新增 輸出 區段:
{
"outputs":{
"managedIdentityObjectId":{
"type":"string",
"value":"[reference(resourceId('Microsoft.Synapse/workspaces', parameters('<workspaceName>')), '2018-06-01', 'Full').identity.principalId]"
}
}
}
使用系統指派的受控識別執行 Azure Synapse Spark Notebooks
您可以從 [設定會話] 功能表啟用 [以受控識別身分執行] ,輕鬆地使用系統指派的受控識別(或工作區受控識別)來執行 Synapse Spark Notebook。 若要使用工作區受控識別執行 Spark Notebook,用戶必須具有下列 RBAC 角色:
- 工作區或選取的 Spark 集區上的 Synapse 計算運算符
- 工作區受控識別上的 Synapse 認證使用者
注意
Synapse Notebook 和 Spark 作業定義僅支援透過連結服務和 mssparkutils API 使用系統指派的受控識別。 MSAL 和其他驗證連結庫無法使用系統指派的受控識別。 您可以改為產生服務主體,並將認證儲存在 金鑰保存庫 中。
使用者指派的受控識別
您可以在 Microsoft Entra ID 中建立、刪除、管理使用者指派的受控識別。 如需詳細資訊,請參閱使用 Azure 入口網站 建立、列出、刪除或指派角色給使用者指派的受控識別。
若要使用使用者指派的受控識別,您必須先 在UAMI的服務實例中建立認證 。
注意
Synapse Notebook 和 Spark 作業定義目前不支援使用者指派的受控識別。
下一步
- 建立認證。
請參閱下列主題,以瞭解何時及如何使用受控識別:
- 將認證儲存在 Azure 金鑰保存庫 中。
- 使用 Azure 資源驗證的受控識別,將數據從 Azure Data Lake Store 複製到 Azure Data Lake Store。
如需 Azure 資源受控識別的詳細資訊,請參閱 Azure 資源的受控識別概觀 ,以取得 Azure Synapse 中受控識別的基礎。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應