Azure Arc によって有効化された SQL Server を最小限の権限で操作する
適用対象: SQL Server
最小限の権限の情報セキュリティ原則は、アカウントとアプリケーションが必要なデータと操作のみにアクセスできることをアサートします。 Azure Arc で SQL Server を有効にすると、最小限の権限でエージェント拡張機能サービスを実行できます。 この記事では、最小限の権限でエージェント拡張機能サービスを実行する方法について説明します。
必要に応じて、最小限の権限で実行するようにサービスを構成するには、この記事の手順に従います。 現在、サービスは最小限の権限で自動的に実行されません。
「Azure Extension for SQL Server の Windows サービス アカウントとアクセス許可を構成する」では、 エージェント拡張機能サービスの最小権限のアクセス許可について説明します。
Note
2024 年 11 月 リリース以降の拡張機能を持つ既存のサーバーには、最小限の特権構成が自動的に適用されます。 この適用は段階的に実施させていただきます。
最小特権の自動適用を防ぐには、2024 年 11 月 リリース以降への拡張機能のアップグレードをブロックします。
エージェント拡張機能サービスを最小限の権限で実行するように構成すると、NT Service\SQLServerExtension
サービス アカウントが使用されます。
NT Service\SQLServerExtension
アカウントは ローカルの Windows サービス アカウントです。
- 最小権限オプションが有効になっている場合、Azure Extension for SQL Server によって作成および管理されます。
- Windows オペレーティング システムで SQL Server サービス用の Azure 拡張機能を実行するために必要な最小限のアクセス許可と権限が付与されています。 構成の読み取りと保存またはログの書き込みに使用されるフォルダーとディレクトリにのみアクセスできます。
- 必要最小限のアクセス許可を持つ、そのサービス アカウント専用の新しいログインを使用して SQL Server に接続してクエリを実行するためのアクセス許可が付与されました。 最小アクセス許可は、有効な機能によって異なります。
- アクセス許可が不要になったときに更新されます。 たとえば、機能を無効にしたり、最小限の権限の構成を無効にしたり、SQL Server 用の Azure 拡張機能をアンインストールしたりすると、アクセス許可が取り消されます。 この取り消しにより、アクセス許可が不要になった後に残らないようになります。
前提条件
このセクションでは、この記事の例を完了するために必要なシステム要件とツールについて説明します。
システム要件
最小限の権限を持つ構成には、次のものが必要です。
- Windows Server 2012 またはそれ以降
- SQL Server 2012 以降
- この SQL Server サービス アカウントは、
sysadmin
固定サーバー ロールのメンバーである必要があります - すべてのデータベースがオンラインかつ更新可能である必要があります
最小限の権限を持つ構成は、現在 Linux ではサポートされていません。
前提条件 - Azure Arc で有効になっている SQL Server に記載されているその他の要件が引き続き適用されます。
SQL Server サービス アカウント
既定では、この SQL Server サービス アカウントは、sysadmin
の固定サーバー ロールのメンバーです。
既定では、前提条件に記載されているように、SQL Server サービス アカウントは、各 SQL Server インスタンスの sysadmin
固定サーバー ロールのメンバーである必要があります。 SQL Server 用 Azure 拡張機能には、Deployer.exe
と呼ばれるプロセスがあり、次の場合に NT AUTHORITY\SYSTEM
として一時的に実行されます:
- 機能が有効または無効になっている
- SQL Server インスタンスが追加または削除される
Deployer.exe
は、SQL Server サービス アカウントになりすまして SQL Server に接続し、有効または無効になっている機能に応じてサーバー ロールとデータベース ロールのアクセス許可を追加または削除し、SQL Server 用 Azure 拡張機能で必要最小限の特権が使用されるようにします。 これらのアクセス許可を変更するには、SQL Server サービス アカウントが sysadmin
サーバー ロールのメンバーである必要があります。
SQL Server サービス アカウントが常にシステム管理者サーバー ロールのメンバーでないように、このプロセスをより詳細に管理する場合は、次の手順に従います:
- システム管理者サーバー ロールに SQL Server サービス アカウントを一時的に追加します。
- アクセス許可が設定されるように、
Deployer.exe
を少なくとも 1 回実行できるようにします。 - システム管理者ロールから SQL Server サービス アカウントを削除します。
機能が有効または無効になっている場合、または SQL Server インスタンスが追加され、Deployer.exe
が必要最小限の特権を付与できるように、この手順を繰り返します。
ツール
この記事の手順を完了するには、次のツールが必要です。
- Azure CLI
arcdata
Azure CLI 拡張機能バージョン1.5.9
以降- SQL Server 用 Azure 拡張機能バージョン
1.1.2504.99
以降
最小限の権限を有効にする
Azure CLI でログインします。
az login
arcdata
拡張機能のバージョンを検証します。az extension list -o table
結果にサポートされているバージョン
arcdata
が含まれている場合は、次のステップに進みます。必要に応じて、
arcdata
Azure CLI 拡張機能をインストールまたは更新します。拡張機能をインストールするには、次のようにします。
az extension add --name arcdata
拡張機能を更新するには:
az extension update --name arcdata
Azure CLI で最小限の権限を有効にします。
最小権限を有効にするには、
LeastPrivilege
機能フラグをtrue
に設定します。 このタスクを完了するには、<resource-group>
と<machine-name>
の更新された値を使用して次のコマンドを実行します。az sql server-arc extension feature-flag set --name LeastPrivilege --enable true --resource-group <resource-group> --machine-name <machine-name>
たとえば、次のコマンドを実行すると、
myrg
という名前のリソース グループ内のmyserver
という名前のサーバーに対する最小限の権限が有効になります。az sql server-arc extension feature-flag set --name LeastPrivilege --enable true --resource-group myrg --machine-name myserver
最小特権の構成を確認する
Azure Arc によって有効化された SQL Server が最小限の権限で実行されるように構成されていることを確認するには:
Windows サービスで、Microsoft SQL Server Extension Service サービスを見つけます。 サービスがサービス アカウント
NT Service\SqlServerExtension
として実行されていることを確認します。サーバーでタスク スケジューラを開き、
Microsoft\SqlServerExtension
の下にSqlServerExtensionPermissionProvider
という名前のイベント ドリブン タスクが作成されていることを確認します。Note
2024 年 7 月のリリースより前の
SqlServerExtensionPermissionProvider
はスケジュールされたタスクです。 1 時間ごとに実行されます。サーバーでタスク スケジューラを開き、
Microsoft\SqlServerExtension
の下にSqlServerExtensionPermissionProvider
という名前のスケジュールされたタスクが作成されていることを確認します。SQL Server Management Studio を開き、
NT Service\SqlServerExtension
という名前のログインを確認します。 アカウントに次のアクセス許可が割り当てられていることを確認します。- SQL の接続
- View Database State
- サーバーの状態の表示
次のクエリを使用してアクセス許可を検証します。
サーバー レベルのアクセス許可を検証するには、次のクエリを実行します。
EXECUTE AS LOGIN = 'NT Service\SqlServerExtension' SELECT * FROM fn_my_permissions (NULL, 'SERVER");
データベース レベルのアクセス許可を確認するには、[1] をいずれかのデータベースの名前に置き換えて、次のクエリを実行します。
EXECUTE AS LOGIN = 'NT Service\SqlServerExtension' USE <database name>; SELECT * FROM fn_my_permissions (NULL, 'database");