Azure Arc によって有効化された SQL Server を最小限の権限で操作する

適用対象:SQL Server

最小限の権限の情報セキュリティ原則は、アカウントとアプリケーションが必要なデータと操作のみにアクセスできることをアサートします。 Azure Arc で SQL Server を有効にすると、最小限の権限でエージェント拡張機能サービスを実行できます。 この記事では、最小限の権限でエージェント拡張機能サービスを実行する方法について説明します。

必要に応じて、最小限の権限で実行するようにサービスを構成するには、この記事の手順に従います。 現時点では、サービスは最小限の特権で自動的に実行されません。

Azure Extension for SQL Server の Windows サービス アカウントとアクセス許可を構成する」では、 エージェント拡張機能サービスの最小権限のアクセス許可について説明します。

注意

現時点では、最小特権構成は既定では適用されません。

拡張機能バージョンが 1.1.2859.223 以上の既存のサーバーでは、最終的に最小限の特権構成が適用されます。 この拡張機能は、2024 年 11 月にリリースされました。 最小特権の自動適用を防ぐには、 1.1.2859.223後に拡張機能のアップグレードをブロックします。

エージェント拡張機能サービスを最小限の権限で実行するように構成すると、NT SERVICE\SqlServerExtension サービス アカウントが使用されます。

NT SERVICE\SqlServerExtension アカウントは ローカルの Windows サービス アカウントです。

  • 最小権限オプションが有効になっている場合、Azure Extension for SQL Server によって作成および管理されます。
  • Windows オペレーティング システム上で SQL Server 用 Azure 拡張機能サービスを実行するために必要最小限のアクセス許可と特権が付与されます。 構成の読み取りと保存またはログの書き込みに使用されるフォルダーとディレクトリにのみアクセスできます。
  • 必要最小限のアクセス許可を持つ、そのサービス アカウント専用の新しいログインを使用して SQL Server に接続してクエリを実行するためのアクセス許可が付与されました。 最小アクセス許可は、有効な機能によって異なります。
  • アクセス許可が不要になったときに更新されます。 たとえば、機能を無効にすると、アクセス許可が取り消されます。 アクセス許可の無効化により、不要になった後にはアクセス許可が残ることがありません。
  • NT SERVICE\SqlServerExtensionは、SQL Serverの拡張機能Azureアンインストールされたとき、または最小特権の構成が無効になっている場合に削除されます。

前提条件

このセクションでは、この記事の例を完了するために必要なシステム要件とツールについて説明します。

システム要件

最小限の権限を持つ構成には、次のものが必要です。

  • Windows Server 2012以降のバージョン。
  • SQL Server 2012 以降のバージョン。
  • SQL Server サービス アカウントは、固定サーバー ロール sysadmin のメンバーである必要があります。
  • すべてのデータベースはオンラインで更新可能である必要があります。

現在、最小限の特権を持つ構成は Linux ではサポートされていません。

前提条件に記載されているその他 の要件は引き続き適用されます。

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 サービス アカウントが常に固定サーバー ロールである sysadmin のメンバーになっていないよう、このプロセスをより詳細に管理する場合は、次の手順に従います。

  1. SQL Server サービス アカウントをsysadmin固定サーバー ロールに一時的に追加します。
  2. アクセス許可が設定されるように、Deployer.exe を少なくとも 1 回実行できるようにします。
  3. 固定サーバー ロール sysadmin からSQL Server サービス アカウントを削除します。

Deployer.exe が必要最小限の特権を付与できるように、機能が有効または無効になっているか、またはSQL Serverインスタンスが追加されるたびに、この手順を繰り返します。

Important

SQL Server Deployer.exe のAzure拡張機能では、NT AUTHORITY\SYSTEM が、CONNECT SQL モードと standard モードの両方で、least privilege アクセス許可を持つSQL Serverに接続できる必要があります。 この要件は、プロビジョニング後に拡張機能が使用するサービス アカウントに関係なく、 Deployer.exe は常に LocalSystem アカウントで実行されるためです。

NT AUTHORITY\SYSTEM がSQL Serverに接続できない場合、Deployer.exe は、NT SERVICE\SqlServerExtension ログインを作成したり、必要なアクセス許可を付与したりできません。 最小特権モードを有効にする前に、NT AUTHORITY\SYSTEMCONNECT SQL アクセス許可を持つアクティブなSQL Server ログインがあることを確認します。 確認手順 の前提条件を 参照してください。

ツール

この記事の手順を完了するには、次のツールが必要です。

最小限の権限を有効にする

  1. Azure CLI を使用してサインインします。

    az login
    
  2. arcdata 拡張機能のバージョンを検証します。

    az extension list -o table
    

    結果にサポートされているバージョン arcdata が含まれている場合は、次のステップに進みます。

    必要に応じて、arcdata Azure CLI 拡張機能をインストールまたは更新します。

    拡張機能をインストールするには、次のようにします。

    az extension add --name arcdata
    

    拡張機能を更新するには:

    az extension update --name arcdata
    
  3. 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>
    

    たとえば、次のコマンドを実行すると、myserver という名前のリソース グループ内の myrg という名前のサーバーに対する最小限の権限が有効になります。

    az sql server-arc extension feature-flag set --name LeastPrivilege --enable true --resource-group myrg --machine-name myserver
    

最小特権の構成を確認する

Azure Arc によって有効化された SQL Server が最小限の権限で実行されるように構成されていることを確認するには:

  1. Windows サービスで、Microsoft SQL Server Extension Service サービスを見つけます。 サービスがサービス アカウント NT SERVICE\SqlServerExtensionとして実行されていることを確認します。

  2. サーバーでタスク スケジューラを開き、名前が SqlServerExtensionPermissionProvider のイベント ドリブン タスクが Microsoft\SqlServerExtension の下に作成されていることを確認します。

    注意

    2024 年 7 月のリリースより前は、 SqlServerExtensionPermissionProvider は 1 時間ごとに実行されるスケジュールされたタスクでした。

  3. SQL Server Management Studio を開き、NT SERVICE\SqlServerExtension という名前のログインを確認します。 アカウントに次のアクセス許可が割り当てられていることを確認します。

    • SQL の接続
    • データベースの状態の表示
    • サーバーの状態の表示
  4. 次のクエリを使用してアクセス許可を検証します。

    サーバー レベルのアクセス許可を確認するには、次のクエリを実行します。

    EXECUTE AS LOGIN = 'NT SERVICE\SqlServerExtension';
    
    SELECT *
    FROM fn_my_permissions(NULL, 'SERVER');
    
    REVERT;
    

    データベース レベルのアクセス許可を確認するには、 <database name> をいずれかのデータベースの名前に置き換え、次のクエリを実行します。

    EXECUTE AS LOGIN = 'NT SERVICE\SqlServerExtension';
    
    USE <database name>;
    SELECT * FROM fn_my_permissions(NULL, 'database');
    
    REVERT;