この記事では、Azure 仮想マシン (VM) 上の SQL Server に対する Microsoft Entra ID (旧 Azure Active Directory) 認証を有効にする方法について説明します。
Note
同じ VM に複数の SQL Server インスタンスがある場合など、SQL Server の 未登録インスタンス に対して Microsoft Entra 認証を構成できます。
Overview
SQL Server 2022 以降では、次のいずれかの Microsoft Entra 認証方法を使用して Azure VM の SQL Server に接続できます。
- パスワードは、Microsoft Entra 資格情報を使用した認証を提供します
- Universal (MFA 対応) により多要素認証を追加する
- 統合では、Active Directory フェデレーション サービス (ADFS) などのフェデレーション プロバイダーを使用してシングル サインオン (SSO) エクスペリエンスを有効にする
- サービス プリンシパルにより Azure アプリケーションからの認証が有効化されます
- Managed Identity は、Microsoft Entra ID が割り当てられたアプリケーションからの認証を有効にします
SQL Server 用の Microsoft Entra ログインを作成し、ユーザーがそのログインを使用して接続すると、SQL Server はマネージド ID を使用して Microsoft Graph に対してクエリを実行します。 Azure VM 上の SQL Server に対して Microsoft Entra 認証を有効にした場合、SQL Server が Microsoft Entra AD との通信に使用できるマネージド ID を指定する必要があります。 このマネージド ID には、Microsoft Graph に対してクエリを実行するためのアクセス許可が必要です。
Azure でリソースの マネージド ID を 有効にする場合、ID のセキュリティ境界はアタッチ先のリソースです。 たとえば、Azure リソースのマネージド ID が有効な仮想マシンのセキュリティ境界は、仮想マシンです。 その VM 上で実行されているすべてのコードでは、マネージド ID エンドポイントと要求トークンを呼び出すことができます。 Azure VM 上の SQL Server 用のマネージド ID を有効にすると、ID は仮想マシンに紐付けられているため、仮想マシンがセキュリティ境界となります。 マネージド ID をサポートする他のリソースの作業でも、同じような経験をします。 詳細については、マネージド ID に関してよくある質問に関するページを参照してください。
Azure VM 上の SQL Server に対する Microsoft Entra 認証で使用されるシステム割り当ておよびとユーザー割り当てマネージド ID には、次のメリットがあります。
- システム割り当てマネージド ID では、構成プロセスが簡略化されます。 マネージド ID の有効期間は仮想マシンと同じであるため、仮想マシンを削除する時に、マネージド ID を個別に削除する必要はありません。
- ユーザー割り当てマネージド ID は、Azure VM 上の SQL Server の複数のインスタンスにアタッチして Microsoft Entra 認証に使用できるため、スケーラビリティを提供します。
マネージド ID の使用を開始するためには、Azure portal を使用してマネージド ID の構成に関する記事を参照してください。
Prerequisites
SQL Server に対して Microsoft Entra 認証を有効にするには、次の前提条件を満たす必要があります。
- SQL Server 2022 を使用する。
- すべてのクラウドで、SQL Server VM を SQL Server Iaas Agent 拡張機能に登録する。
- SQL Server VM と同じ Microsoft Entra テナントに、既存の システム割り当て マネージド ID または ユーザー割り当て マネージド ID がある。 詳細については、「Azure portal を使用してマネージド ID を構成する」を参照してくだい。
- Azure CLI 2.48.0 以降 (Azure CLI を使用して SQL Server VM の Microsoft Entra 認証を構成する場合)。
アクセス許可を付与する
SQL Server と Microsoft Entra ID の間の認証を可能にするためにマネージド ID を選択する場合、次の 3 つの Microsoft Graph アプリケーションのアクセス許可 (アプリ ロール) が必要です: User.Read.All、GroupMember.Read.All、Application.Read.All。
または、そのマネージド ID を Microsoft Entra のディレクトリ閲覧者ロールに追加することで、十分なアクセス許可が付与されます。 ディレクトリ閲覧者ロールをマネージド ID に割り当てるもう 1 つの方法は、ディレクトリ閲覧者ロールを Microsoft Entra ID のグループに割り当てることです。 グループ所有者は、仮想マシンのマネージド ID をこのグループのメンバーとして追加できます。 これにより、Microsoft Entra ロール管理者の関与を最小限に抑え、グループ所有者に責任を委任します。
ロールにマネージド ID を追加する
このセクションでは、Microsoft Entra ID の ディレクトリ閲覧者 ロールにマネージド ID を追加する方法について説明します。 ディレクトリ閲覧者ロールの割り当てを変更するには、特権ロール管理者特権が必要です。 十分なアクセス許可がない場合は、Microsoft Entra 管理者と連携して次の手順を実行します。
マネージド ID に ディレクトリ閲覧者 ロールを付与するには、次の手順に従います。
Azure portal で、[Microsoft Entra ID のロールと管理者] を開きます。
検索ボックスに 「ディレクトリリーダー 」と入力し、 ディレクトリリーダー の役割を選択して ディレクトリリーダーを開く |[割り当て] ページ:
[Directory readers | Assignments] ページで、[+ Add assignments] を選択して、[ Add assignments] ページを開きます。
[課題の追加] ページで、[メンバーの選択] で [メンバーを選択しない] を選択して、[メンバーの選択] ページを開きます。
[メンバーの選択] ページで、SQL Server VM に使用するマネージド ID の名前を検索し、[ディレクトリ閲覧者] ロールに追加します。 システム割り当てマネージド ID の場合は、VM の名前を検索します。 [選択] を使用して ID を確認し、[割り当ての追加] ページに戻ります。
選択した ID が [ メンバーの選択 ] の下に表示されていることを確認し、[ 次へ] を選択します。
割り当ての種類が [アクティブ] に設定され、[ 永続的に割り当てられている ] の横にあるボックスがオンになっていることを確認します。 VM2 のシステム割り当て ID にディレクトリ閲覧者ロールのアクセス許可の追加など、業務上の正当な理由を入力し、[割り当てる] を選択して設定を保存し、[ディレクトリ閲覧者 | 割り当て] ページに戻ります。
[Directory Readers | Assignments] ページで、新しく追加した ID が [Directory Readers] の下に表示されていることを確認します。
Add app ロールの権限を追加する
Azure PowerShell を使用して、アプリ ロールをマネージド ID に付与できます。 次の手順で行います。
Note
Azure AD および MSOnline PowerShell モジュールは、2024 年 3 月 30 日の時点で非推奨となります。 詳細については、非推奨に関する更新情報を参照してください。 この日以降、これらのモジュールのサポートは、Microsoft Graph PowerShell SDK への移行支援とセキュリティ修正プログラムに限定されます。 非推奨になるモジュールは、2025 年 3 月 30 日まで引き続き機能します。
Microsoft Entra ID (旧称 Azure AD) を使用するには、Microsoft Graph PowerShell に移行することをお勧めします。 移行に関する一般的な質問については、移行に関する FAQ を参照してください。 手記: MSOnline のバージョン 1.0.x では、2024 年 6 月 30 日以降に中断が発生する可能性があります。
Microsoft Graph に接続する
Connect-MgGraph -Scopes "AppRoleAssignment.ReadWrite.All" -TenantId "<tenant id>"マネージド ID を取得する
$Graph_SP = Get-MgServicePrincipal -Filter "DisplayName eq 'Microsoft Graph'" $MSI = Get-MgServicePrincipal -Filter "displayName eq '<your managed identity display name>'"User.Read.Allロールを ID に割り当てる$AAD_AppRole = $Graph_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"} New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -BodyParameter @{principalId=$MSI.Id; resourceId=$Graph_SP.Id; appRoleId=$AAD_AppRole.Id}GroupMember.Read.Allロールを ID に割り当てる$AAD_AppRole = $Graph_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"} New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -BodyParameter @{principalId=$MSI.Id; resourceId=$Graph_SP.Id; appRoleId=$AAD_AppRole.Id}Application.Read.Allロールを ID に割り当てる$AAD_AppRole = $Graph_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"} New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $MSI.Id -BodyParameter @{principalId=$MSI.Id; resourceId=$Graph_SP.Id; appRoleId=$AAD_AppRole.Id}
以下の手順で、マネージド ID にアクセス許可が割り当てられたことを確認できます。
- Azure portal の [Microsoft Entra ID] に移動します。
- [エンタープライズ アプリケーション] を選択し、[管理] で [すべてのアプリケーション] を選択します。
-
で
Managed identitiesをフィルター処理します。 - マネージド ID を選択し、[セキュリティ] で [アクセス許可] を選択します。
User.Read.All、GroupMember.Read.All、Application.Read.Allのアクセス許可が表示されます。
アウトバウンド通信の有効化
Microsoft Entra 認証を機能させるには、次のものが必要です。
- SQL Server から Microsoft Entra ID および Microsoft Graph エンドポイントへのアウトバウンド通信。
- SQL クライアントから Microsoft Entra ID へのアウトバウンド通信。
既定の Azure VM 構成では、Microsoft Graph エンドポイントと Microsoft Entra ID への送信通信が許可されますが、一部のユーザーは、OS レベルのファイアウォールまたは Azure ネットワーク セキュリティ グループ (NSG) を使用して送信通信を制限することを選択します。
SQL Server VM と SQL クライアント上のファイアウォールでは、80 番ポートと 443 番ポートでアウトバウンドトラフィックを許可する必要があります。
SQL Server VM をホストする仮想ネットワークの Azure 仮想ネットワーク NSG 規則には、次のものが必要です。
-
AzureActiveDirectoryのサービス タグ。 - 宛先ポート範囲: 80 から 443
- [アクション] を [許可] に設定します。
- 高い優先度(数値は小さい)。
登録済みインスタンスに対して Microsoft Entra 認証を有効にする
SQL IaaS Agent 拡張機能を使用して SQL Server インスタンスを登録する場合は、Azure portal、Azure CLI、または PowerShell を使用して、登録済みインスタンスに対して Microsoft Entra 認証を有効にすることができます。 Azure portal または Azure CLI を使用してインスタンスを管理することは、SQL Server の登録済みインスタンスでのみサポートされます。
Note
Microsoft Entra 認証を有効にすると、このセクションの同じ手順に従って、別のマネージド ID を使用するように構成を更新できます。
SQL Server VM に対して Microsoft Entra 認証を有効にするには、次の手順を実行します。
Azure portal で [SQL 仮想マシン リソース] に移動します。
[ セキュリティ] で [セキュリティの構成] を 選択 します。
[Microsoft Entra 認証] で [有効にする] を選択します。
ドロップダウンからマネージド ID の種類 (システム割り当てまたはユーザー割り当て) を選択します。 ユーザー割り当てを選択する場合は、表示された [ユーザー割り当てマネージド ID] ドロップダウンから Azure VM 上の SQL Server に対する認証に使用する ID を選択します。
Microsoft Entra 認証を有効にすると、同じ手順に従って、SQL Server VM に対して認証できるマネージド ID を変更できます。
Note
The selected managed identity does not have enough permissions for Microsoft Entra authentication というエラーは、選択した ID にアクセス許可が正しく割り当てられていないことを示します。 適切な アクセス許可 を割り当てるには、[アクセス許可の付与] セクションを確認します。
登録されていないインスタンスに対して Microsoft Entra 認証を有効にする
SQL Server インスタンスが SQL IaaS Agent 拡張機能に登録されていない場合 (同じ VM に複数の SQL Server インスタンスがある場合など)、PowerShell を使用して Microsoft Entra 認証を有効にすることができます。
Microsoft Entra 認証は、未登録の特定のインスタンスまたは VM 上のすべてのインスタンスに対して有効にすることができます。
Note
Azure VM 上の SQL Server 上の未登録のインスタンスで Microsoft Entra 認証を使用するには、 SQL IaaS Agent 拡張機能に少なくとも 1 つのインスタンスが登録されている必要があります。
Set-AzVMExtension -ExtensionName "SqlIaasExtension" コマンドを使用して SQL Server インスタンスに対して Microsoft Entra 認証を有効にする場合は、次の点を考慮してください。
- マネージド ID のアクセス許可は、
CheckPermissionsパラメーターがtrueに設定されている場合にのみチェックされます。 -
ClientIDID を使用する ID パラメーターのクライアント ID を指定します。ClientIDパラメーターが空の場合は、システム割り当てマネージド ID が使用されます。 -
EnableForGivenInstancesパラメーターにインスタンスの一覧を指定して、登録解除された特定のインスタンスに対して Microsoft Entra 認証を有効にします。 それ以外の場合は、EnableForAllInstancesパラメーターを使用して、仮想マシン上のすべての未登録インスタンスに対して Microsoft Entra 認証を有効にします。
次の例では、 システム割り当て ID を使用して、VM 上のすべてのインスタンスに対して Microsoft Entra 認証を有効にします。
Set-AzVMExtension -ExtensionName "SqlIaasExtension" -ResourceGroupName $resourceGroupName -VMName $sqlVMName -Publisher "Microsoft.SqlServer.Management" -ExtensionType "SqlIaaSAgent" -TypeHandlerVersion 2.0 -Location $region -SettingString '{"ServerConfigurationsManagementSettings": {"AADAuthenticationSettings": {"ClientId":"", "EnableForAllInstances":true, "CheckPermissions":true}},"DeploymentTokenSettings":{"DeploymentToken":12345678}}'
次の例では、 ユーザー割り当て ID を使用して、登録されていない特定のインスタンスに対して Microsoft Entra 認証を有効にします。
Set-AzVMExtension -ExtensionName "SqlIaasExtension" -ResourceGroupName $resourceGroupName -VMName $sqlVMName -Publisher "Microsoft.SqlServer.Management" -ExtensionType "SqlIaaSAgent" -TypeHandlerVersion 2.0 -Location $region -SettingString '{"ServerConfigurationsManagementSettings": {"AADAuthenticationSettings": {"ClientId":$clientId, "EnableForGivenInstances":["MSSQLSERVER","MSSQLSERVER01"], "CheckPermissions":true}},"DeploymentTokenSettings":{"DeploymentToken":12345678}}'
ログインとユーザーを作成する
Microsoft Entra チュートリアルの手順に従って、マネージド ID のログインとユーザーを作成します。
インスタンスに接続する
Microsoft Entra 認証を使用して SQL Server インスタンスに接続するには、 Microsoft Entra チュートリアル の手順に従います。
Limitations
次の制限が適用されます。
- Microsoft Entra 認証は、SQL IaaS エージェント拡張機能に登録され、任意のクラウドにデプロイされた Windows VM で実行している SQL Server 2022 でのみサポートされています。
- Azure portal での Microsoft Entra 認証の管理は、既定のインスタンスや単一の名前付きインスタンスなど、SQL IaaS Agent 拡張機能でサポートされているインスタンスでのみ使用できます。 Azure CLI または PowerShell を使用して、SQL IaaS Agent 拡張機能に登録されていない SQL Server VM 上の Microsoft Entra 認証の追加インスタンスを管理します。
- フェールオーバー クラスター インスタンスでの Microsoft Entra 認証の使用はサポートされていません。
- SQL Server に対して認証する ID には、Microsoft Entra ID の ディレクトリ閲覧者 ロールか、次の 3 つの Microsoft Graph アプリケーションアクセス許可 (アプリ ロール) が必要です。
User.Read.All、GroupMember.Read.All、Application.Read.All。 - Microsoft Entra 認証をいったん有効にすると、無効にする方法はありません。
- 現在、 FIDO2 メソッド を使用した Microsoft Entra 認証を使用した Azure VM 上の SQL Server への認証はサポートされていません。
次のステップ
SQL Server のセキュリティのベスト プラクティスを確認します。
Azure VM での SQL Server の実行に関するその他のトピックについては、「Azure 仮想マシンにおける SQL Server の概要」をご覧ください。 SQL Server 仮想マシンについて不明な点がある場合は、よく寄せられる質問を参照してください。
詳細については、このベスト プラクティス シリーズにある他の記事を参照してください。