Azure Automation を使用して Azure SQL Database のデータベースを管理する

この記事では、Azure Automation のシステム割り当てマネージド ID を使用して、Azure SQL データベースのデータベースに接続して管理する手順について説明します。 Azure Automation では、Azure Az PowerShell で利用できる最新の Az PowerShell コマンドレットを使うことで、Azure SQL Database 内のデータベースを管理できます。

Azure Automation には、これらの Azure Az PowerShell コマンドレットがあらかじめ用意されているため、サービス内ですべての SQL データベース管理タスクを実行できます。 Azure Automation 内のこれらのコマンドレットと別の Azure サービスのコマンドレットを組み合わせて、Azure サービスとサード パーティ システム全体の複雑なタスクを自動化することもできます。

Azure Automation では、PowerShell を使用して SQL Server に対して T-SQL (Transact SQL) コマンドを発行することもできます。

データベースに対してコマンドを実行するには、次の操作を行う必要があります。

  • Automation アカウントにシステム割り当てマネージド ID があることを確かめる。
  • Automation マネージド ID に適切なアクセス許可を指定する。
  • Microsoft Entra 認証を利用するように SQL Server を構成する。
  • Automation アカウントのマネージド ID にマップするユーザーを SQL Server に作成する。
  • 接続してコマンドを実行する Runbook を作成する。
  • (省略可能) SQL Server がファイアウォールによって保護されている場合は、Hybrid Runbook Worker (HRW) を作成し、そのサーバーに SQL モジュールをインストールし、ファイアウォールの許可リストに HRW IP アドレスを追加する。

システム割り当てマネージド ID を使用して Azure SQL データベースに接続する

Automation システム マネージド ID から Azure SQL データベースへのアクセスを許可するには、これらの手順に従います。

  1. Automation システム マネージド ID が [オフ] の場合は、次の操作を行います。

    1. Azure portal にサインインします。

    2. Automation アカウントに移動します。

    3. [Automation アカウント] ページの [アカウント設定] で、[ID] を選択します。

    4. [システム割り当て済み] タブで、[状態] として [オン] を選択します。

      システム割り当てマネージド ID の [状態] を [オン] に設定するスクリーンショット。

  2. システム マネージド ID を [オン] にした後、これらの手順を使用して、アカウントに必要なアクセス権を指定する必要があります。

    1. [Automation アカウント | ID] ページの [システム割り当て] タブにある [アクセス許可] で、[Azure ロールの割り当て] を選択します。
    2. [Azure ロールの割り当て] ページで、[+ ロールの割り当ての追加 (プレビュー)] を選択します。
    3. [ロールの割り当ての追加 (プレビュー)] で、[スコープ] として [SQL] を選択し、ドロップダウンから [サブスクリプション][リソース] を選び、必要最小限のアクセス許可に従って [ロール] を選択します。その後、[保存] を選択します。

    システム割り当てマネージド ID の [状態] が [オン] に設定されているときにロールの割り当てを追加するスクリーンショット。

  3. これらの手順を使用して、Active Directory 認証用に SQL Server を構成します。

    1. Azure portal のホーム ページに移動し、[SQL Server] を選択します。
    2. [SQL Server] ページの [設定] で、[Microsoft Entra ID] を選択します。
    3. [管理者の設定] を選択して、AD 認証用に SQL Server を構成します。
  4. これらの手順を使用して、SQL 側で認証を追加します。

    1. Azure portal のホーム ページに移動し、[SQL Server] を選択します。
    2. [SQL Server] ページの [設定] で、[SQL データベース] を選択します。
    3. データベースを選択して SQL データベース ページに移動し、[クエリ エディター (プレビュー)] を選んで、次の 2 つのクエリを実行します。
      # AutomationAccount - replace with your Automation account's name
      # ObjectID - replace with object (principal) ID for your system managed identity principal from step 1.
      CREATE USER "AutomationAccount" FROM EXTERNAL PROVIDER WITH OBJECT_ID = `ObjectID`
      EXEC sp_addrolemember `db_owner`, "AutomationAccount"
      

サンプル コード

Azure SQL Server への接続

if ($($env:computerName) -eq "Client") {"Runbook running on Azure Client sandbox"} else {"Runbook running on " + $env:computerName}
Disable-AzContextAutosave -Scope Process
Connect-AzAccount -Identity
$Token = (Get-AZAccessToken -ResourceUrl https://database.windows.net).Token
Invoke-Sqlcmd -ServerInstance azuresqlserverxyz.database.windows.net -Database MyDBxyz -AccessToken $token -query 'select * from TableXYZ' 

SQL 側でアカウントのアクセス許可を確認する

SELECT roles.[name] as role_name, members.name as [user_name] 
from sys.database_role_members 
Join sys.database_principals roles on database_role_members.role_principal_id= roles.principal_id 
join sys.database_principals members on database_role_members.member_principal_id=members.principal_id 
Order By 
roles.[name], members.[name] 

Note

SQL Server がファイアウォールの内側で実行されている場合は、独自のネットワーク内のマシンで Azure Automation Runbook を実行する必要があります。 IP アドレスまたはネットワークがファイアウォールによってブロックされないように、このマシンを必ず Hybrid Runbook Worker として構成してください。 マシンをハイブリッド Worker として構成する方法の詳細については、ハイブリッド worker の作成に関するページを参照してください。

ハイブリッド worker を使用する

ハイブリッド worker を使用する場合、Runbook で使われるモジュールを、管理者特権の PowerShell プロンプトからローカルにインストールする必要があります。 たとえば、- Install-module Az.Accounts and Install-module SqlServer のようにします。 必要なモジュール名を見つけるには、各コマンドレットでコマンドを実行し、ソースを確認します。 たとえば、Az.Account モジュールの一部である、コマンドレット Connect-AzAccounts のモジュール名を確認するには、コマンド get-command Connect-AzAccount を実行します。

Note

ハイブリッド worker で実行することを目的とした Runbook の先頭に、if ($($env:computerName) -eq "CLIENT") {"Runbook running on Azure CLIENT"} else {"Runbook running on " + $env:computerName} というコードを追加することをお勧めします。 このコードを使用すると、実行中のノードを確認でき、ハイブリッド worker ではなく Azure クラウドで誤って実行した場合、Runbook が機能しなかった理由を特定するのに役立ちます。

次のステップ