Azure Synapse Analytics 的受控識別
本文可協助您了解受控識別 (先前稱為受控服務識別/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 入口網站擷取系統指派的受控識別
您可以從 Azure 入口網站 -> 您的 Synapse 工作區 -> [屬性] 中找到受控識別資訊。
在建立連結服務時也會顯示受控識別資訊,該服務支援受控識別驗證,例如 Azure Blob、Azure Data Lake Storage、Azure Key Vault 等。
若要授與權限,請遵循下列步驟。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
選取 [存取控制 (IAM)]。
選取 [新增>][新增角色指派]。
在 [成員] 索引標籤上,選取 [受控識別],然後選取 [選取成員]。
選取 Azure 訂閱。
在 [系統指派的受控識別] 下,選取 [Synapse 工作區],然後選取工作區。 您也可以使用物件識別碼或工作區名稱 (做為受控識別名稱) 來尋找此身分識別。 若要取得受控識別的應用程式識別碼,請使用 PowerShell。
在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。
使用 PowerShell 擷取系統指派的受控識別
當您取得特定的服務執行個體時,將會傳回受控識別主體識別碼和租用戶識別碼,如下所示。 使用 PrincipalId 授與存取權:
PS C:\> (Get-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName>).Identity
IdentityType PrincipalId TenantId
------------ ----------- --------
SystemAssigned aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb aaaabbbb-0000-cccc-1111-dddd2222eeee
您可以複製上述主體識別碼,然後以主體識別碼作為參數執行下列 Microsoft Entra ID 命令,以取得應用程式識別碼。
PS C:\> Get-AzADServicePrincipal -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ServicePrincipalNames : {00001111-aaaa-2222-bbbb-3333cccc4444, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : <workspaceName>
Id : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
Type : ServicePrincipal
使用 REST API 擷取受控識別
當您取得特定的服務執行個體時,將會傳回受控識別主體識別碼和租用戶識別碼,如下所示。
在要求中呼叫下方的 API:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01
回應:您會得到如下列範例所示的回應。 "identity" 區段會據以填入。
{
"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": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
},
"tags": {}
}
提示
若要從 ARM 範本擷取受控識別,請在 ARM JSON 中新增 [輸出] 區段:
{
"outputs":{
"managedIdentityObjectId":{
"type":"string",
"value":"[reference(resourceId('Microsoft.Synapse/workspaces', parameters('<workspaceName>')), '2018-06-01', 'Full').identity.principalId]"
}
}
}
產生系統指派的受控識別
系統指派的受控識別會以下列方式產生:
- 透過 Azure 入口網站或 PowerShell 建立 Synapse 工作區時,一律會自動建立受控識別。
- 透過 SDK 建立工作區時,只有在 Synapse 工作區物件中指定 "Identity = new ManagedIdentity" 以進行建立時,才會建立受控識別。請參閱 .NET 快速入門 - 建立資料處理站中的範例。
- 透過 REST API 建立 Synapse 工作區時,只有您在要求本文中指定 [身分識別] 區段時,才會建立受控識別。 請參閱 REST 快速入門 - 建立資料處理站中的範例。
如果您發現服務執行個體未依照擷取受控識別指示建立與受控識別的關聯,您可以用程式設計方式透過身分識別啟動器加以更新,而明確產生一個:
注意
- 受控識別不可修改。 更新已有受控識別的服務執行個體並不會有任何影響,且受控識別會保持不變。
- 如果您更新了已有受控識別的服務執行個體,但未在處理站或工作區物件中指定 "identity" 參數,或未在 REST 要求本文中指定 [身分識別] 區段,您將會收到錯誤。
- 當您刪除服務執行個體時,相關聯的受控識別將會一併刪除。
使用 PowerShell 產生系統指派的受控識別
呼叫 New-AzSynapseWorkspace 命令後,您會看到新產生的 [身分識別] 欄位:
PS C:\> $password = ConvertTo-SecureString -String "****" -AsPlainText -Force
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 產生系統指派的受控識別
注意
如果您嘗試更新已有受控識別的服務執行個體,但未在工作區物件中指定 identity 參數,或未在 REST 要求本文中提供身分識別區段,您將會收到錯誤。
在要求本文中以 "identity" 區段呼叫下方的 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"
}
}
回應:系統會自動建立受控識別,並據以填入 "identity" 區段。
{
"name": "<workspaceName>",
"tags": {},
"properties": {
"provisioningState": "Succeeded",
"loggingStorageAccountKey": "**********",
"createTime": "2021-09-26T04:10:01.1135678Z",
"version": "2018-06-01"
},
"identity": {
"type": "SystemAssigned",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
},
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Synapse/workspaces/<workspaceName>",
"type": "Microsoft.Synapse/workspaces",
"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": "<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 Synapse Spark Notebooks
您可以從 [設定工作階段] 功能表啟用 [以受控身分執行身分識別],輕鬆地使用系統指派的受控識別 (或工作區受控識別) 來執行 Synapse Spark Notebooks。 若要執行具有工作區受控識別的 Spark Notebooks,使用者必須具有下列 RBAC 角色:
- 在工作區或所選取 Spark 集區上的 Synapse 計算操作員
- 工作區受控識別上的 Synapse 認證使用者
注意
Synapse 筆記本和 Spark 作業定義僅支援透過連結服務和 mssparkutils API 使用系統指派的受控識別。 MSAL 和其他驗證程式庫無法使用系統指派的受控識別。 您可以改為產生服務主體,並將認證儲存在 Key Vault 中。
使用者指派的受控識別
您可以在 Microsoft Entra ID 中建立、刪除、管理使用者指派的受控識別。 如需更多資訊,請參閱使用 Azure 入口網站對使用者指派的受控識別建立、列出、刪除或指派角色。
若要使用「使用者指派的受控識別」,您必須先在 UAMI 的服務執行個體中建立認證。
注意
Synapse 筆記本和 Spark 作業定義目前不支援使用者指派的受控識別。
下一步
- 建立認證。
請參閱下列文章,說明何時及如何使用受控識別:
請參閱 Azure 資源受控識別概觀,以深入了解 Azure 資源受控識別的背景 (Azure Synapse 中的受控識別以此為基礎)。