Azure Synapse AnalyticsでMicrosoft Entra認証の設定と管理

この記事では、Azure Synapse Analyticsでの認証にMicrosoft Entra IDを使う方法を紹介しています。

注記

Microsoft Entra サーバー プリンシパルは現在 Azure Synapse Analytics でプレビュー提供されています。

Prerequisites

Azure Synapse AnalyticsでMicrosoft Entra認証を使用するには、以下の前提条件が必要です:

  • ユーザーとグループが設定されたMicrosoft Entra テナント。
  • 既存のAzure Synapseワークスペースか、スタンドアロンの専用SQLプール。

Microsoft Entra テナントを作成して設定する

Azure Synapse AnalyticsのMicrosoft Entra認証を設定する前に、まずMicrosoft Entraテナントを作成し、ユーザーやグループを配置する必要があります。 Microsoft EntraテナントはAzure内で完全に管理することも、オンプレミスのActive Directory ドメイン Serviceのフェデレーションに利用できます。

詳細については、以下を参照してください:

Microsoft Entra 管理者を設定する

Microsoft Entra認証を使用するには、Azure SynapseリソースにMicrosoft Entra管理者が必要です。

リソースを作成する際にMicrosoft Entra管理者を設定することもできます。 すでに管理者を設定している場合は、このセクションは飛ばしてください。

Azure Synapse ワークスペース

Azure Synapse workspaceの場合は、ワークスペース上でMicrosoft Entra管理者を設定してください。 詳細については、 管理者の構造をご覧ください。

スタンドアロン専用SQLプール

Microsoft Entra管理者を設定すると、独立した専用SQLプールをホストする論理サーバーに対してMicrosoft Entra認証を有効にします。 管理者はAzureポータル、PowerShell、Azure CLI、またはREST APIを使って設定できます。

Azure ポータルでは、logical server 名を確認できます。

  • Azure Synapse Analyticsのスタンドアロン専用 SQL プールの server nameOverview ページのフィールド。

Azure ポータルで論理サーバーのMicrosoft Entra管理者を設定するには、次の手順に従います。

  1. Azureポータルのディレクトリ + サブスクリプションペインで、Azure Synapseリソースを含むディレクトリを現在のディレクトリとして選択します。

  2. SQLサーバーを検索し、専用SQLプールの論理サーバーを選択してSQLサーバーペインを開きます。

  3. 論理サーバーの SQL サーバー ペインで、Settings の下にある Microsoft Entra ID を選択して、Microsoft Entra ID ペインを開きます。

  4. Microsoft Entra ID ペインで、Set admin を選択して、Microsoft Entra ID ペインを開きます。

  5. Microsoft Entra ID ペインには、現在のディレクトリ内のすべてのユーザー、グループ、アプリケーションが表示され、名前、エイリアス、または ID で検索できます。 Microsoft Entra管理者の目的の ID を見つけて選択し、Select を選択してウィンドウを閉じます。

  6. 論理サーバーの Microsoft Entra ID ページの上部にある Save を選択します。

    Object ID は、Microsoft Entraユーザーとグループの管理者名の横に表示されます。 アプリケーション(サービスプリンシパル)の場合は、アプリケーションIDが表示されます。

管理者を変更する処理には数分かかる場合があります。 その後、新しい管理者が Microsoft Entra admin フィールドに表示されます。

管理者を削除するには、Microsoft Entra ID ページの上部にある Remove admin を選択し、 Save を選択します。 Microsoft Entra管理者を削除すると、論理サーバーのMicrosoft Entra認証が無効になります。

注記

Microsoft Entra管理者は、サーバーの master データベースにユーザー (データベース プリンシパル) として格納されます。 データベース プリンシパル名は一意である必要があるため、管理者の表示名をサーバーの master データベースにあるユーザーの名前と同じにすることはできません。 名前を持つユーザーが既に存在する場合、Microsoft Entra管理者のセットアップは失敗し、ロールバックされ、名前が既に使用されていることを示します。

Microsoft Graphアクセス許可を割り当てる

一部の操作では、Microsoft Graph のアクセス許可で説明されているように、Microsoft Graph をクエリするためのアクセス許可が必要です。 Azure Synapse Analytics は、リソース ID に対する User.Read.All、GroupMember.Read.All、Application.Read.All などのきめ細かな Microsoft Graph API 権限をサポートしています。 この方法は最小特権の原則に従っており、推奨されます。 ディレクトリリーダーの役割もより広い代替手段として利用できます。 詳細については、Azure Synapse Analytics 向け Microsoft Entra のマネージド IDをご覧ください。

ディレクトリ閲覧者ロール

ガイド付きの手順については、「Microsoft Entraグループにディレクトリリーダーの役割を割り当てる」をご覧ください。

以下の PowerShell スクリプトは、Azure Synapse リソースの ID を Directory Readers ロールに追加します。

# This script grants "Directory Readers" permission to an Azure Synapse service principal.
# It can be executed only by a user who is a member of the **Privileged Roles Administrator** role.

Import-Module Microsoft.Graph.Authentication
$instanceName = "<InstanceName>"        # Enter the name of your managed instance or server
$tenantId = "<TenantId>"                       # Enter your tenant ID

Connect-MgGraph -TenantId $tenantId -Scopes "RoleManagement.ReadWrite.Directory"

# Get Microsoft Entra "Directory Readers" role and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
if ($role -eq $null) {
    # Instantiate an instance of the role template
    $roleTemplate = Get-MgDirectoryRoleTemplate -Filter "DisplayName eq '$roleName'"
    New-MgDirectoryRoleTemplate -RoleTemplateId $roleTemplate.Id
    $role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
}

# Get service principal for your logical server
$roleMember = Get-MgServicePrincipal -Filter "DisplayName eq '$instanceName'"
$roleMember.Count
if ($roleMember -eq $null) {
    Write-Output "Error: No service principal with name '$($instanceName)' found, make sure that instanceName parameter was entered correctly."
    exit
}
if (-not ($roleMember.Count -eq 1)) {
    Write-Output "Error: Multiple service principals with name '$($instanceName)'"
    Write-Output $roleMember | Format-List DisplayName, Id, AppId
    exit
}

# Check if service principal is already member of Directory Readers role
$isDirReader = Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id -Filter "Id eq '$($roleMember.Id)'"
if ($isDirReader -eq $null) {
    # Add principal to Directory Readers role
    Write-Output "Adding service principal '$($instanceName)' to 'Directory Readers' role..."
    $body = @{
        "@odata.id"= "https://graph.microsoft.com/v1.0/directoryObjects/{$($roleMember.Id)}"
    }
    New-MgDirectoryRoleMemberByRef -DirectoryRoleId $role.Id -BodyParameter $body
    Write-Output "'$($instanceName)' service principal added to 'Directory Readers' role."
} else {
    Write-Output "Service principal '$($instanceName)' is already member of 'Directory Readers' role."
}

Microsoft Entra管理者は、Microsoft Entraサーバープリンシパル(ログイン)およびデータベースプリンシパル(ユーザー)を作成できます。

SQL でMicrosoft Entra プリンシパルを作成する

Microsoft Entra認証でAzure Synapse Analyticsデータベースに接続するには、そのID用にデータベース内のプリンシパルを構成し、そのプリンシパルに少なくともCONNECT権限を付与する必要があります。

データベース ユーザーのアクセス許可

データベースユーザーを作成すると、デフォルトでデータベースに対する CONNECT 権限が付与されます。 データベース ユーザーは、次の 2 つの状況でもアクセス許可を継承します。

  • ユーザーは、サーバーに対する権限も割り当てられている Microsoft Entra グループのメンバーです。
  • ログインからユーザーを作成し、ユーザーはサーバーがログインに割り当てた、データベースに適用される権限を継承します。

サーバー プリンシパルとデータベース プリンシパルのアクセス許可の管理は、プリンシパルの種類 (Microsoft Entra ID、SQL 認証など) に関係なく同じように機能します。 ユーザーに直接権限を与えるのではなく、データベース ロールに権限を付与しましょう。 その後、適切な権限を持つロールにユーザーを追加します。 このアプローチは長期的な権限管理を簡素化し、適切でなくなった際にアイデンティティがアクセスを保持する可能性を減らします。

詳細については、以下を参照してください:

含まれるデータベースユーザー

包含データベースのユーザーは、master データベースのログインに接続されていない SQL ユーザーの一種です。 Microsoft Entra の包含データベース ユーザーを作成するには、少なくともALTER ANY USER権限を持つ Microsoft Entra ID でデータベースに接続します。 以下のT-SQLの例は、Microsoft Entra IDからMicrosoft_Entra_principal_nameというデータベースプリンシパルを作成します。

CREATE USER [<Microsoft_Entra_principal_name>] FROM EXTERNAL PROVIDER;

Microsoft Entra グループの包含データベース ユーザーを作成するには、グループの表示名を入力します。

CREATE USER [ICU Nurses] FROM EXTERNAL PROVIDER;

マネージド ID またはサービス プリンシパルの包含データベース ユーザーを作成するには、ID の表示名を入力します。

CREATE USER [appName] FROM EXTERNAL PROVIDER;

Microsoft Entra ユーザーに対応した制約付きデータベースユーザーを作成するには、アイデンティティのユーザープリンシパル名を入力します。

CREATE USER [adrian@contoso.com] FROM EXTERNAL PROVIDER;

ログイン ベースのユーザー

注記

Microsoft Entra server principals (logins) は現在 Azure Synapse Analytics のプレビュー中です。

Microsoft Entra サーバー プリンシパル (またはログイン) がサポートされています。つまり、包含データベース ユーザーは必要ありません。 データベース プリンシパル (ユーザー) は、サーバー プリンシパルに基づいて作成できます。つまり、ユーザー Microsoft Entraログインのサーバー レベルの割り当てアクセス許可を継承できます。

CREATE USER [appName] FROM LOGIN [appName];

Microsoft Entraサーバー プリンシパル (ログイン) の作成に関する構文については、CREATE LOGIN を参照してください。

外部ユーザー

Azure サブスクリプションに関連付けられているテナントとは異なるMicrosoft Entra テナントで管理されている ID のデータベース ユーザーを直接作成することはできません。 ただし、他のディレクトリから外部ユーザーとして関連付けられたディレクトリにインポートすることは可能です。 その後、それらを利用してデータベースにアクセスできる包含データベース ユーザーを作成できます。 外部ユーザーは、Microsoft Entra グループのメンバーシップを通じてアクセスすることもできます。

Examples: Microsoft Entra のフェデレーション ドメインまたはマネージド ドメイン ユーザーを表す包含データベース ユーザーを作成するには:

CREATE USER [alice@fabrikam.com] FROM EXTERNAL PROVIDER;
  • 外部ユーザーとして管理ドメインにインポートするフェデレーテッドドメインユーザーアカウントは、管理ドメインのアイデンティティを使用しなければなりません。

名前に関する考慮事項

T-SQL の : 文や & 文のユーザー名に、コロン CREATE LOGIN やアンパサンド CREATE USER のような特殊文字を使うことはできません。

Microsoft Entra IDとAzure Synapse Analyticsは、ユーザー管理設計において一つの重要な違いがあります。Microsoft Entra IDはテナント内で表示名の重複を許可するのに対し、Azure Synapse Analyticsでは専用 SQL プールでは一意のサーバー プリンシパル名、データベースでは一意のデータベース プリンシパル名が必要です。

Microsoft Graph に対するアクセス許可

CREATE USER ... FROM EXTERNAL PROVIDERコマンドは、サインインしたユーザーの代わりに Azure Synapse Analytics が Microsoft Entra ID (外部プロバイダー) にアクセスすることを必要とします。 時々、Microsoft Entra IDが例外を返すことがあります。

  • Microsoft Entra ID固有のエラー メッセージが含まれる SQL エラー 33134 が発生する可能性があります。 このエラーは一般に、アクセスが拒否されたこと、ユーザーがリソースにアクセスするには MFA に登録する必要があること、またはファーストパーティのアプリケーション間のアクセスを事前承認によって処理する必要があることを示します。 最初の 2 つのケースでは、通常、ユーザーの Microsoft Entra テナントに設定されている条件付きアクセス ポリシーによって問題が発生します。これにより、ユーザーが外部プロバイダーにアクセスできなくなります。 条件付きアクセスポリシーを更新してアプリケーション00000003-0000-0000-c000-000000000000(Microsoft Graph APIのアプリケーションID)へのアクセスを許可すれば、問題は解決するはずです。 「ファーストパーティのアプリケーション間のアクセスを事前承認で処理する必要がある」というエラーが発生した場合、この問題は、ユーザーがサービス プリンシパルとしてサインインしていることが原因です。 代わりにユーザーによってコマンドを実行した場合、コマンドは成功するはずです。
  • Connection Timeout Expired を受け取った場合は、接続文字列の TransparentNetworkIPResolution パラメーターを false に設定する必要があります。 詳細については、「.NET Framework 4.6.1 - TransparentNetworkIPResolution での接続タイムアウトの問題を参照してください。

Microsoft Entra ID に基づく包含データベース ユーザーの作成の詳細については、「CREATE USERを参照してください。

多要素認証を構成する

セキュリティ向上のために、多要素認証(MFA)の設定を検討してください。これにより、ユーザーはデータベースに認証するために、電話や認証アプリなどの第2の方法を使用するよう求められます。

Azure Synapse Analyticsで多要素認証を使用するには、まず多要素認証を有効にし、その後条件付きアクセスポリシーでMFAを強制します。

Microsoft Entraで接続する

Microsoft Entra認証が設定された後、SQL Server Management StudioやSQL Server Data Toolsを使ってAzure Synapse Analyticsに接続し、クライアントアプリケーションをMicrosoft EntraのIDで接続できるように設定できます。

Microsoft Entra認証のトラブルシューティング

指針については、「Microsoft Entra認証に関連する問題のトラブルシューティング」をご覧ください。