共用方式為


適用於 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 工作區 -> 屬性中找到受控識別資訊。

Shows the Azure portal with the system-managed identity object ID for a Synapse workspace.

  • 受控識別物件標識碼

當您建立支援受控識別驗證的鏈接服務時,也會顯示受控識別資訊,例如 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. 在 [系統指派的受控識別] 下,選取 [Synapse 工作區],然後選取工作區。 您也可以使用物件識別碼或工作區名稱(作為受控識別名稱)來尋找此身分識別。 若要取得受控識別的應用程式標識碼,請使用PowerShell。

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

使用 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-run-as-msi-1

synapse-run-as-msi-2

synapse-run-as-msi-3

注意

Synapse Notebook 和 Spark 作業定義僅支援透過連結服務和 mssparkutils API 使用系統指派的受控識別。 MSAL 和其他驗證連結庫無法使用系統指派的受控識別。 您可以改為產生服務主體,並將認證儲存在 金鑰保存庫 中。

使用者指派的受控識別

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

若要使用使用者指派的受控識別,您必須先 在UAMI的服務實例中建立認證

注意

Synapse Notebook 和 Spark 作業定義目前不支援使用者指派的受控識別。

下一步

請參閱下列主題,以瞭解何時及如何使用受控識別:

如需 Azure 資源受控識別的詳細資訊,請參閱 Azure 資源的受控識別概觀 ,以取得 Azure Synapse 中受控識別的基礎。