Azure Synapse のマネージド ID

この記事では、マネージド ID (旧称はマネージド サービス ID/MSI) の概要とそれが Azure Synapse でどのように機能するのかについて説明します。

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

概要

マネージド ID により、資格情報を管理する必要がなくなります。 マネージド ID では、Microsoft Entra 認証をサポートするリソースに接続するときに、サービス インスタンス用の ID を提供されます。 たとえば、サービスでは、マネージド ID を使用することで、データ開発者が安全に資格情報を格納できる Azure Key Vault などのリソースにアクセスしたり、ストレージ アカウントにアクセスしたりできるようになります。 サービスでは、マネージド ID を使用して Microsoft Entra トークンを取得します。

次の 2 種類のマネージド ID がサポートされています。

  • システム割り当て: サービス インスタンスでマネージド ID を直接有効にできます。 サービスの作成時にシステム割り当てマネージド ID を許可すると、そのサービス インスタンスのライフサイクルに関連付けられている Microsoft Entra で ID が作成されます。 その ID を使用して Microsoft Entra ID にトークンを要求できるのは、必然的に、その Azure リソースのみとなります。 したがって、リソースが削除されると、その ID も Azure によって自動的に削除されます。 Azure Synapse Analytics では、Synapse ワークスペースと共に、システム割り当てマネージド ID を作成する必要があります。
  • ユーザー割り当て: スタンドアロンの Azure リソースとしてマネージド ID を自分で作成することもできます。 ユーザー割り当てマネージド ID を作成し、それを Synapse ワークスペースの 1 つ以上のインスタンスに割り当てることができます。 ユーザー割り当てマネージド ID の場合、ID は、それを使用するリソースとは別に管理されます。

マネージド ID には、次の利点があります。

  • Azure Key Vault への資格情報の格納。この場合、マネージド ID は Azure Key Vault の認証に使用されます。
  • Azure Blob storage、Azure Data Explorer、Azure Data Lake Storage Gen1、Azure Data Lake Storage Gen2、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics、REST、Databricks アクティビティ、Web アクティビティなどのマネージ ID 認証を使用して、データ ストアまたはコンピューティングにアクセスします。 詳細については、コネクタとアクティビティに関する記事をご覧ください。
  • マネージド ID は、Azure Key Vault に格納されているカスタマー マネージド キーを使用してデータやメタデータを暗号化/暗号化解除する場合にも使用されます。こうして、二重暗号化が提供されます。

システム割り当てマネージド ID

Note

システム割り当てマネージド ID は、ドキュメント内の他の場所や Synapse Studio の UI では、下位互換性を考慮して "マネージド ID" とも呼ばれています。 "ユーザー割り当てマネージド ID" を表すときには、そのように明示的に呼ぶことにします。

システム割り当てマネージド ID を生成する

システム割り当てマネージド ID は、次のように生成されます。

  • Azure portal または PowerShell を使用して Synapse ワークスペースを作成すると、マネージド ID が常に自動的に作成されます。
  • SDK を使用してワークスペースを作成すると、作成用の Synapse ワークスペース オブジェクトに "Identity = new ManagedIdentity" と指定した場合にのみマネージド ID が作成されます。.NET クイック スタートの「データ ファクトリの作成」内の例を参照してください。
  • REST API を使用して Synapse ワークスペースを作成すると、要求本文で "Identity" セクションを指定した場合にのみマネージド ID が作成されます。 REST のクイックスタート - データ ファクトリの作成の例をご覧ください。

マネージド ID の取得」の手順に従ってサービス インスタンスにマネージド ID がまだ関連付けられていない場合は、ID イニシエーターを使用してプログラムでそれを更新することで、マネージド ID を明示的に生成できます。

Note

  • マネージド ID は変更できません。 マネージド ID が既に存在するサービス インスタンスを更新しても影響はなく、マネージド ID が変更されることはありません。
  • ファクトリまたはワークスペース オブジェクトで "identity" パラメーターを指定せずに、または REST 要求本文で "identity" セクションを指定せずに、マネージド ID が既に存在するサービス インスタンスを更新した場合、エラーが発生します。
  • サービス インスタンスを削除すると、関連付けられているマネージド ID も削除されます。

PowerShell を使用してシステム割り当てマネージド ID を生成する

New-AzSynapseWorkspace コマンドを呼び出すと、"Identity" フィールドが新たに生成されるのがわかります。

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 を使用してシステム割り当てマネージド ID を生成する

Note

ワークスペース オブジェクトで identity パラメーターを指定せずに、または REST 要求本文で identity セクションを指定せずに、マネージド ID が既に存在するサービス インスタンスの更新を試みた場合、エラーが発生します。

要求本文の "identity" セクションで、次の API を呼び出します。

PATCH https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01

要求本文: add "identity": { "type":"SystemAssigned" } を追加します。

{
    "name": "<workspaceName>",
    "location": "<region>",
    "properties": {},
    "identity": {
        "type": "SystemAssigned"
    }
}

応答: マネージド ID が自動的に作成され、これに応じて "identity" セクションが設定されます。

{
    "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 テンプレートを使用してシステム割り当てマネージド ID を生成する

テンプレート: 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 を使用してシステム割り当てマネージド ID を生成する

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);

システム割り当てマネージド ID を取得する

マネージド ID は、Azure portal から取得することも、プログラムによって取得することもできます。 以降のセクションでは、いくつかの例を示します。

ヒント

マネージド ID が表示されない場合は、ご利用のサービス インスタンスを更新してマネージド ID を生成してください。

Azure portal を使用してシステム割り当てマネージド ID を取得する

Azure portal -> Synapse ワークスペース -> [プロパティ] でマネージド ID 情報を検索できます。

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

  • マネージド ID オブジェクト ID

マネージ ID 情報は、Azure Blob、Azure Data Lake Storage、Azure Key Vault などのマネージド ID 認証をサポートする、リンクされたサービスを作成するときにも表示されます。

アクセス許可を付与するには、次の手順に従います。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

  1. [アクセス制御 (IAM)] を選択します。

  2. [追加]>[ロール割り当ての追加] の順に選択します。

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

  3. [メンバー] タブで、[マネージド ID] を選択し、[メンバーの選択] を選択します。

  4. Azure サブスクリプションを選択します。

  5. [システム割り当てマネージド ID][Synapse ワークスペース] を選択し、次にワークスペースを選択します。 オブジェクト ID またはワークスペース名を (マネージド ID 名として) 使用して、この ID を検索することもできます。 マネージド ID のアプリケーション ID を取得するには、PowerShell を使用します。

  6. [確認と 割り当て] タブで、 [確認と割り当て] を選択して ロールを割り当てます。

PowerShell を使用してシステム割り当てマネージド ID を取得する

特定のサービス インスタンスを取得すると、次のように、マネージド ID のプリンシパル ID とテナント ID が返されます。 PrincipalId を使用してアクセス権を付与します。

PS C:\> (Get-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName>).Identity

IdentityType   PrincipalId                          TenantId                            
------------   -----------                          --------                            
SystemAssigned cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05 72f988bf-XXXX-XXXX-XXXX-2d7cd011db47

アプリケーション ID を取得するには、上のプリンシパル ID をコピーし、プリンシパル ID をパラメータとして指定して次の 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 を使用したマネージド ID の取得

特定のサービス インスタンスを取得すると、次のように、マネージド ID のプリンシパル ID とテナント ID が返されます。

要求で次の 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": "72f988bf-XXXX-XXXX-XXXX-2d7cd011db47",
    "principalId": "cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05"
  },
  "tags": {}
}

ヒント

ARM テンプレートからマネージド ID を取得するには、ARM JSON に outputs セクションを追加します。

{
    "outputs":{
        "managedIdentityObjectId":{
            "type":"string",
            "value":"[reference(resourceId('Microsoft.Synapse/workspaces', parameters('<workspaceName>')), '2018-06-01', 'Full').identity.principalId]"
        }
    }
}

システム割り当てマネージド ID を使用して Azure Synapse Spark ノートブックを実行する

[Configure session](セッションの構成) メニューで [Run as managed identity](マネージド ID として実行) を有効にすると、システム割り当てマネージド ID (またはワークスペース マネージド ID) を使用して Synapse Spark ノートブックを簡単に実行できます。 ワークスペースマネージド ID で Spark ノートブックを実行するには、ユーザーは次の RBAC ロールを持っている必要があります。

  • ワークスペースまたは選択した Spark プールに対する Synapse コンピューティング オペレーター
  • ワークスペース マネージド ID に対する Synapse 資格情報ユーザー

synapse-run-as-msi-1

synapse-run-as-msi-2

synapse-run-as-msi-3

Note

Synapse ノートブックと Spark ジョブ定義では、リンク サービスと mssparkutils API を介したシステム割り当てマネージド ID の使用のみがサポートされます。 MSAL や他の認証ライブラリでは、システム割り当てマネージド ID を使用できません。 代わりに、サービス プリンシパルを生成して、資格情報を Key Vault に格納できます。

ユーザー割り当てマネージド ID

Microsoft Entra ID では、ユーザー割り当てマネージド ID の作成、削除、管理を行うことができます。 詳細については、「Azure portal を使用してユーザー割り当てマネージド ID を作成、一覧表示、削除したり、それにロールを割り当てたりする」をご覧ください。

ユーザー割り当てマネージド ID を使用するには、まず、サービス インスタンスで UAMI の資格情報を作成する必要があります。

Note

ユーザー割り当てマネージド ID は、Synapse ノートブックと Spark ジョブ定義では現在サポートされていません。

次の手順

マネージド ID を使用する状況と方法を紹介する次のトピックをご覧ください。

Azure Synapse のマネージド ID の基になっている、Azure リソースのマネージド ID の詳細については、Azure リソースのマネージド ID の概要に関する記事をご覧ください。