Applies to:SQL Server on Azure VM
この記事では、Azure Virtual Machine (VM) 上の SQL Server に対する Microsoft Entra ID (旧 Azure Active Directory) 認証を有効にする方法について説明します。
Note
It's possible to configure Microsoft Entra authentication for unregistered instances of SQL Server, such as when you have multiple SQL Server instances on the same VM.
Overview
SQL Server 2022 以降では、次の Microsoft Entra 認証方法のいずれかを使って Azure VM の SQL Server に接続できます。
- Password offers authentication with Microsoft Entra credentials
- Universal with MFAにより多要素認証が追加されます
- Integrated uses federation providers like Active Directory Federation Services (ADFS) to enable single sign-on (SSO) experiences
- Service Principal enables authentication from Azure applications
- Managed Identity enables authentication from applications assigned Microsoft Entra identities
SQL Server 用の Microsoft Entra ログインを作成し、ユーザーがそのログインを使用して SQL Server にログインすると、SQL Server ではマネージド ID を使用して Microsoft Graph のクエリを実行します。 Azure VM 上の SQL Server に対して Microsoft Entra 認証を有効にした場合、SQL Server で Microsoft Entra AD との通信に使用できるマネージド ID を提供する必要があります。 このマネージド ID には、Microsoft Graph に対してクエリを実行するためのアクセス許可が必要です。
When enabling a managed identity for a resource in Azure, the security boundary of the identity is the resource to which it's attached. たとえば、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 エージェント拡張機能に登録する。
- Have an existing system-assigned or user-assigned managed identity in the same Microsoft Entra tenant as your SQL Server VM. 詳細については、Azure portal を使用したマネージド ID の構成に関する記事を参照してください。
- Azure CLI 2.48.0 以降 (Azure CLI を使用して SQL Server VM の Microsoft Entra 認証を構成する場合)。
Grant permissions
SQL Server と Microsoft Entra ID の間の認証を容易にするためにマネージド ID を選択する場合には、次に示す 3 つの Microsoft Graph アプリケーションのアクセス許可 (アプリ ロール) のいずれかが必要です: User.Read.All
、GroupMember.Read.All
、Application.Read.All
。
あるいは、マネージド ID を Microsoft Entra ディレクトリ閲覧者ロール に追加すれば、十分なアクセス許可が付与されます。 Another way to assign the Directory Readers role to a managed identity is to assign the Directory Readers role to a group in Microsoft Entra ID. そうすることで、グループ所有者は、グループのメンバーとして仮想マシンのマネージド ID を追加できるようになります。 これにより、Microsoft Entra ロール管理者の関与を最小限に抑え、グループ所有者に責任を委任します。
マネージド ID をロールに追加する
This section explains how to add your managed identity to the Directory Readers role in Microsoft Entra ID. ディレクトリ閲覧者ロールの割り当てを変更するには、特権ロール管理者特権が必要です。 十分なアクセス許可がない場合は、Microsoft Entra 管理者と協力して次の手順に従ってください。
To grant your managed identity the Directory Readers role, follow these steps:
Azure ポータルで、Microsoft Entra ID ロールと管理者を開きます。
Type Directory readers in the search box, and then select the role Directory readers to open the Directory Readers | Assignments page:
[ディレクトリ閲覧者 | 割り当て] ページで、[割り当ての追加] を選択して、[割り当ての追加] ページを開きます。
On the Add assignments page, choose No member selected under Select members to open the Select a member page.
[Select a member] ページで、SQL Server VM で使用するマネージド ID 名を検索し、[Directory Readers] ロールに追加します。 システム割り当てマネージド ID の場合は、VM の名前を検索します。 Use Select to confirm the identity and go back to the Add assignments page.
Verify that you see your chosen identity under Select members and then select Next.
Verify that your assignment type is set to Active and the box next to Permanently assigned is checked. "VM2 のシステム割り当て ID にディレクトリ閲覧者ロールを追加" など、業務上の正当な理由を入力し、[割り当てる] を選択して設定を保存し、[ディレクトリ閲覧者 | 割り当て] ページに戻ります。
[ディレクトリ閲覧者 | 割り当て] ページで、新しく追加した ID が [ディレクトリ閲覧者] の下に表示されていることを確認します。
アプリ ロールのアクセス許可を追加する
You can use Azure PowerShell to grant app roles to a managed identity. これを行うには、次のステップに従います。
Note
Azure AD および MSOnline PowerShell モジュールは、2024 年 3 月 30 日の時点で非推奨となります。 To learn more, read the deprecation update. この日以降、これらのモジュールのサポートは、Microsoft Graph PowerShell SDK への移行支援とセキュリティ修正プログラムに限定されます。 非推奨になるモジュールは、2025 年 3 月 30 日まで引き続き機能します。
Microsoft Entra ID (旧称 Azure AD) を使用するには、Microsoft Graph PowerShell に移行することをお勧めします。 For common migration questions, refer to the Migration FAQ. Note: Versions 1.0.x of MSOnline may experience disruption after June 30, 2024.
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 ポータル から、Microsoft Entra ID に移動します。
- Choose Enterprise applications and then select All applications under Manage.
- Filter the Application type by
Managed identities
. - Select the managed identity and then choose Permissions under Security. アクセス許可
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 Entra ID だけでなく Microsoft Graph エンドポイントへの送信通信も許可されますが、一部のユーザーは、OS レベルのファイアウォールまたは Azure VNet ネットワーク セキュリティ グループ (NSG) のいずれかを使用して送信通信を制限することを選択しています。
SQL Server VM 上のファイアウォールと SQL クライアントでは、ポート 80 および 443 で送信トラフィックを許可する必要があります。
SQL Server VM をホストする VNet の Azure VNet NSG 規則には、次のものが必要です。
-
AzureActiveDirectory
のサービス タグ。 - 宛先ポートの範囲: 80、443。
- Action set to Allow.
- 高優先度 (低い数値)。
登録済みインスタンスに対して 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 仮想マシン リソース] に移動します。
Select Security Configuration under Security.
Choose Enable under Microsoft Entra authentication.
Choose the managed identity type from the drop-down, either System-assigned or User-assigned. ユーザー割り当てを選択する場合は、表示された [ユーザー割り当てマネージド 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 にアクセス許可が正しく割り当てられていないことを示します。 Check the Grant permissions section to assign proper permissions.
登録されていないインスタンスに対して 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
に設定されている場合にのみチェックされます。 -
ClientID
ID を使用する ID パラメーターのクライアント ID を指定します。ClientID
パラメーターが空の場合は、システム割り当てマネージド ID が使用されます。 -
EnableForGivenInstances
パラメーターにインスタンスの一覧を指定して、未登録の特定のインスタンスに対して Microsoft Entra 認証を有効にします。 Othewrise では、EnableForAllInstances
パラメーターを使用して、仮想マシン上のすべての未登録インスタンスに対して Microsoft Entra 認証を有効にします。
The following example enables Microsoft Entra authentication for all instances on the VM using a system-assigned identity:
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}}'
The following example enables Microsoft Entra authentication for specific unregistered instances using a user-assigned identity:
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 認証の使用はサポートされていません。
- The identity you choose to authenticate to SQL Server has to have either the Directory Readers role in Microsoft Entra ID or the following three Microsoft Graph application permissions (app roles):
User.Read.All
,GroupMember.Read.All
, andApplication.Read.All
. - Microsoft Entra 認証をいったん有効にすると、再び無効にする方法はありません。
- Currently, authenticating to SQL Server on Azure VMs through Microsoft Entra authentication using the FIDO2 method isn't supported.
Next steps
Review the security best practices for SQL Server.
Azure VM での SQL Server の実行に関するその他の記事については、「Azure Virtual Machines における SQL Server の概要」をご覧ください。 SQL Server 仮想マシンについて不明な点がある場合は、よく寄せられる質問を参照してください。
詳細については、このベスト プラクティス シリーズにある他の記事を参照してください。