SQL リソース プロバイダーの保守操作

重要

Azure Stack Hub ビルド 2108 以降では、アクセスが許可されているサブスクリプションに SQL と MySQL リソース プロバイダーが提供されます。 この機能の使用を開始する場合、または以前のバージョンからアップグレードする必要がある場合は、サポート ケースを開くと、サポート エンジニアがデプロイまたはアップグレード プロセスを説明します。

SQL リソース プロバイダーは、ロックダウンされた仮想マシン (VM) 上で実行されます。 メンテナンス操作を有効にするには、VM のセキュリティを更新する必要があります。 最小限の特権の原則を使用してこれを行うには、PowerShell Just Enough Administration (JEA) エンドポイント DBAdapterMaintenance を使用します。 リソース プロバイダーのインストール パッケージには、この操作のためのスクリプトが含まれています。

修正プログラム適用と更新

SQL リソース プロバイダーはアドオン コンポーネントであるため、Azure Stack Hub の一部としては提供されません。 必要に応じて、SQL リソース プロバイダーの更新プログラムが提供されます。

SQL RP V1 の場合は、更新された SQL Server リソース プロバイダーがリリースされると、更新プログラムを適用するためのスクリプトが提供されます。 このスクリプトによって新しいリソース プロバイダー VM が作成され、古い方のプロバイダーの状態が新しい方の VM に移行されます。

SQL RP V2 の場合は、リソース プロバイダーの更新には、Azure Stack Hub の更新プログラムの適用に使用されるのと同じ更新機能を使用します。

詳細については、「SQL リソース プロバイダーの更新」を参照してください。

プロバイダー VM を更新する

SQL RP V1 は "ユーザー" VM 上で実行されており、必要な修正プログラムと更新プログラムがリリースされたら、ユーザーがそれらを適用する必要があります。 ユーザーは、リソース プロバイダーのインストールまたは更新の間に、Windows 更新プログラム パッケージをインストールできます。

SQL RP V2 は、非表示になっているマネージド Windows Server 上で実行されます。 ユーザーは、リソース プロバイダー VM にパッチを適用したり更新したりする必要はありません。 RP を更新すると、自動的に更新されます。

VM の Windows Defender の定義を更新する

"この説明は、Azure Stack Hub 統合システムで実行されている SQL RP V1 に対してのみ適用されます。"

Windows Defender の定義を更新するには:

  1. Windows Defender のセキュリティ インテリジェンスの更新に関するページから Windows Defender 定義の更新プログラムをダウンロードします。

    定義の更新に関するページ上で下方にスクロールして「Manually download the update」 (更新プログラムを手動でダウンロードする) を見つけます。 "Windows Defender Antivirus for Windows 10 および Windows 8.1" 64 ビット ファイルをダウンロードします。

    または、こちらのダイレクト リンクを使用して、fpam-fe.exe ファイルをダウンロードして実行することもできます。

  2. SQL リソース プロバイダー アダプター VM のメンテナンス エンドポイントへの PowerShell セッションを作成します。

  3. メンテナンス エンドポイントのセッションを使用して、VM に定義更新ファイルをコピーします。

  4. メンテナンス PowerShell セッションで Update-DBAdapterWindowsDefenderDefinitions コマンドを実行します。

  5. 定義をインストールしたら、Remove-ItemOnUserDrive コマンドを使用して、定義更新ファイルを削除することをお勧めします。

定義を更新するための PowerShell スクリプトの例

次のスクリプトを編集して実行することにより、Defender の定義を更新することができます。 スクリプト内の値を、実際の環境の値に置き換えます。

# Set credentials for local admin on the resource provider VM.
$vmLocalAdminPass = ConvertTo-SecureString '<local admin user password>' -AsPlainText -Force
$vmLocalAdminUser = "<local admin user name>"
$vmLocalAdminCreds = New-Object System.Management.Automation.PSCredential `
    ($vmLocalAdminUser, $vmLocalAdminPass)

# Provide the public IP address for the adapter VM.
$databaseRPMachine  = "<RP VM IP address>"
$localPathToDefenderUpdate = "C:\DefenderUpdates\mpam-fe.exe"

# Download the Windows Defender update definitions file from https://www.microsoft.com/wdsi/definitions.
Invoke-WebRequest -Uri 'https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64' `
    -Outfile $localPathToDefenderUpdate

# Create a session to the maintenance endpoint.
$session = New-PSSession -ComputerName $databaseRPMachine `
    -Credential $vmLocalAdminCreds -ConfigurationName DBAdapterMaintenance `
    -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
# Copy the defender update file to the adapter VM.
Copy-Item -ToSession $session -Path $localPathToDefenderUpdate `
     -Destination "User:\"
# Install the update definitions.
Invoke-Command -Session $session -ScriptBlock `
    {Update-AzSDBAdapterWindowsDefenderDefinition -DefinitionsUpdatePackageFile "User:\mpam-fe.exe"}
# Cleanup the definitions package file and session.
Invoke-Command -Session $session -ScriptBlock `
    {Remove-AzSItemOnUserDrive -ItemPath "User:\mpam-fe.exe"}
$session | Remove-PSSession

SQL リソース プロバイダーの Azure Diagnostics 拡張機能の構成

"この説明は、Azure Stack Hub 統合システムで実行されている SQL RP V1 に対してのみ適用されます。"

Azure Diagnostics 拡張機能は、既定で SQL リソース プロバイダー アダプター VM にインストールされます。 次の手順では、トラブルシューティングと監査の目的で SQL リソース プロバイダーの操作イベント ログと IIS ログを収集するために拡張機能をカスタマイズする方法について説明します。

  1. Azure Stack Hub 管理者ポータルにサインインします。

  2. 左側のペインで [仮想マシン] を選択し、SQL リソース プロバイダー アダプター VM を検索して、その VM を選択します。

  3. VM の [診断設定] で、[ログ] タブにアクセスし、[カスタム] を選択して、収集するイベント ログをカスタマイズします。 [診断設定] に移動します。

  4. SQL リソース プロバイダーの操作イベント ログを収集するために、Microsoft-AzureStack-DatabaseAdapter/Operational!* を追加します。 イベント ログの追加

  5. IIS ログの収集を有効にするには、[IIS ログ][失敗した要求のログ] をオンにします。 IIS ログの追加

  6. 最後に、 [保存] を選択して、すべての診断設定を保存します。

イベント ログと IIS ログの収集が SQL リソース プロバイダーに対して構成されると、sqladapterdiagaccount という名前のシステム ストレージ アカウント内にログが見つかります。

Azure Diagnostics 拡張機能の詳細については、「Azure Diagnostics 拡張機能とは何か」を参照してください。

SQL 資格情報の更新

管理者は、SQL Server の sysadmin アカウントの作成と保守を担当します。 リソース プロバイダーには、ユーザーに代わってデータベースを管理するためにこれらの権限があるアカウントが必要となりますが、ユーザーのデータにアクセスする必要はありません。 SQL Server で sysadmin パスワードを更新する必要がある場合、リソース プロバイダーの管理者インターフェイスを使用して、保存済みパスワードを変更できます。 これらのパスワードは、Azure Stack Hub インスタンス上の Key Vault に格納されています。

設定を変更するには、[参照]>[管理リソース]>[SQL ホスティング サーバー]>[SQL ログイン] の順に選択し、ユーザー名を選択します。 変更は、最初に SQL インスタンス (および必要な場合はレプリカ) で行う必要があります。 [設定][パスワード] を選択します。

SQL 管理者パスワードの更新

シークレットのローテーション

"この説明は、Azure Stack Hub 統合システムで実行されている SQL RP V1 に対してのみ適用されます。"

Azure Stack Hub 統合システムで SQL および MySQL リソース プロバイダーを使用する場合、以下のリソース プロバイダーのインフラストラクチャ シークレットが確実に期限切れにならないようにローテーションする責任は Azure Stack Hub オペレーターにあります。

  • デプロイ時に提供された外部 SSL 証明書。
  • デプロイ時に提供された、リソース プロバイダー VM のローカル管理者アカウントのパスワード。
  • リソース プロバイダーの診断ユーザー (dbadapterdiag) のパスワード。
  • (バージョン 1.1.47.0 以上) デプロイ時に生成された Key Vault 証明書。

PowerShell のシークレットのローテーション例

重要

シークレットのローテーションを成功させるには、下のスクリプトを実行する前に、Azure Stack Hub PowerShell モジュールの既存バージョンをすべて削除する必要があります

すべてのシークレットを同時に変更する。

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -DiagnosticsUserPassword $passwd `
    -DependencyFilesLocalPath $certPath `
    -DefaultSSLCertificatePassword $certPasswd  `
    -VMLocalCredential $localCreds `
    -KeyVaultPfxPassword $keyvaultCertPasswd

診断ユーザーのパスワードを変更する。

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -DiagnosticsUserPassword  $passwd

VM ローカル管理者アカウントのパスワードを変更する。

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -VMLocalCredential $localCreds

SSL 証明書を回転する

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -DependencyFilesLocalPath $certPath `
    -DefaultSSLCertificatePassword $certPasswd

Key Vault 証明書を回転する

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -KeyVaultPfxPassword $keyvaultCertPasswd

SecretRotationSQLProvider.ps1 のパラメーター

パラメーター 説明 解説
AzureEnvironment Azure Stack Hub のデプロイに使用するサービス管理者アカウントの Azure 環境。 Microsoft Entraデプロイにのみ必要です。 サポートされている環境名は、AzureCloudAzureUSGovernment、または China Microsoft Entra ID を使用している場合は AzureChinaCloud です 省略可能
AzCredential Azure Stack Hub サービス管理者アカウントの資格情報。 AzCredential で使用するアカウントが多要素認証 (MFA) を必要とする場合、スクリプトは失敗します。 Mandatory
CloudAdminCredential Azure Stack Hub クラウド管理者ドメイン アカウントの資格情報。 Mandatory
PrivilegedEndpoint Get-AzureStackStampInformation にアクセスするための特権エンドポイント。 Mandatory
DiagnosticsUserPassword 診断ユーザー アカウントのパスワード。 省略可能
VMLocalCredential MySQLAdapter VM のローカル管理者アカウント。 省略可能
DefaultSSLCertificatePassword 既定の SSL 証明書 (*pfx) のパスワード。 省略可能
DependencyFilesLocalPath 依存関係ファイルのローカル パス。 省略可能
KeyVaultPfxPassword データベース アダプターの Key Vault 証明書の生成に使用されるパスワード。 省略可能

"この説明は、Azure Stack Hub 統合システムで実行されている SQL RP V2 に対してのみ適用されます。"

Note

付加価値リソース プロバイダー (RP) に対するシークレットのローテーションは、現在、PowerShell でのみサポートされています。

Azure Stack Hub インフラストラクチャと同様、付加価値リソース プロバイダーには、内部シークレットと外部シークレットの両方が使用されています。 オペレーターは、次の作業を担当します。

  • 最新の外部シークレットを提供する (リソース プロバイダー エンドポイントの保護に使用される新しい TLS 証明書など)。
  • リソース プロバイダーのシークレットのローテーションを定期的に管理する。

シークレットの有効期限が近づくと、管理者ポータルで次のアラートが生成されます。 シークレットのローテーションを完了すると、次のアラートが解決されます。

  • 保留中の内部証明書の有効期限
  • 保留中の外部証明書の有効期限

前提条件

ローテーション プロセスに備えて次の作業を行います。

  1. 続行する前に、Azure Stack Hub 用の PowerShell Az モジュールをインストールします (まだ済んでいない場合)。 Azure Stack Hub のシークレットのローテーションには、2.0.2-preview 以降のバージョンが必要です。 詳細については、「Azure Stack Hub での AzureRM から Azure PowerShell Az への移行」を参照してください。

  2. Azs.Deployment.Admin 1.0.0 モジュールをインストールします: PowerShell ギャラリー | Azs.Deployment.Admin 1.0.0

Install-Module -Name Azs.Deployment.Admin
  1. 外部証明書の有効期限が近い場合は、X509 証明書を取得または更新する前に、「Azure Stack Hub 公開キー インフラストラクチャ (PKI) 証明書の要件」を読んで重要な前提条件の情報を確認します (必要な PFX 形式の詳細を含む)。 特定の付加価値リソース プロバイダーについて、「オプションの PaaS 証明書」セクションに記載された要件も確認してください。

外部証明書のローテーション用に新しい TLS 証明書を準備する

Note

内部証明書だけ有効期限が近い場合は、このセクションをスキップできます。

次に、付加価値リソース プロバイダーのエンドポイントを保護するための TLS 証明書を作成または更新します。

  1. ご利用のリソース プロバイダーに対し、証明書更新のための証明書署名要求 (CSR) を生成する手順を実行します。 ここでは、Azure Stack Hub 適合性チェッカー ツールを使用して CSR を作成します。 "他の Azure Stack Hub サービスへの証明書要求を生成する" 手順では、必ず、ご利用のリソース プロバイダーに合った適切なコマンドレットを実行してください。 たとえば、New-AzsDbAdapterCertificateSigningRequest は SQL と MySQL の RP に使用されます。 完了したら、生成された .REQ ファイルを証明機関 (CA) に送信して、新しい証明書を申請します。

  2. CA から証明書ファイルを受け取ったら、デプロイまたはローテーションのために証明書を準備する手順を実行します。 再度、適合性チェッカー ツールを使用して、CA から返されたファイルを処理します。

  3. 最後に、「Azure Stack Hub PKI 証明書の検証」の手順を実行します。 もう一度、適合性チェッカー ツールを使用して、新しい証明書の検証テストを実行します。

内部証明書をローテーションする

管理者特権の PowerShell コンソールを開き、次の手順を実行して、リソース プロバイダーの外部シークレットをローテーションします。

  1. オペレーターの資格情報を使用して Azure Stack Hub 環境にサインインします。 PowerShell サインイン スクリプトについては、「PowerShell を使用して Azure Stack Hub に接続する」をご覧ください。 (AzureRM ではなく) PowerShell Az コマンドレットを使用して、エンドポイント URL やディレクトリ テナント名など、すべてのプレースホルダー値を置き換えます。

  2. リソース プロバイダーの製品 ID を確認します。 Get-AzsProductDeployment コマンドレットを実行して、最新のリソース プロバイダー デプロイの一覧を取得します。 返された "value" コレクションには、デプロイされたリソース プロバイダーごとに要素が含まれます。 目的のリソース プロバイダーを見つけて、これらのプロパティの値をメモします。

    • "name" - 値の 2 番目のセグメント内にリソース プロバイダーの製品 ID が含まれています。

    たとえば、SQL RP のデプロイの製品 ID は "microsoft.sqlrp" のようなものです。

  3. 内部証明書をローテーションするには、Invoke-AzsProductRotateSecretsAction コマンドレットを実行します。

    Invoke-AzsProductRotateSecretsAction -ProductId $productId
    

外部証明書をローテーションする

最初に、次のパラメーターの値を記録しておく必要があります。

プレースホルダー 説明 値の例
<product-id> 最新のリソース プロバイダー デプロイの製品 ID。 microsoft.sqlrp
<installed-version> 最新のリソース プロバイダー デプロイのバージョン。 2.0.0.2
<package-id> パッケージ ID は、product-id と installed-version を連結して作成されます。 microsoft.sqlrp.2.0.0.2
<cert-secret-name> 証明書シークレットが格納されている名前。 SSLCert
<cert-pfx-file-path> 証明書 PFX ファイルへのパス。 C:\dir\dbadapter-cert-file.pfx
<pfx-password> 証明書 .PFX ファイルに割り当てられているパスワード。 strong@CertSecret6

管理者特権の PowerShell コンソールを開き、次の手順のようにします。

  1. オペレーターの資格情報を使用して Azure Stack Hub 環境にサインインします。 PowerShell サインイン スクリプトについては、「PowerShell を使用して Azure Stack Hub に接続する」をご覧ください。 (AzureRM ではなく) PowerShell Az コマンドレットを使用して、エンドポイント URL やディレクトリ テナント名など、すべてのプレースホルダー値を置き換えます。

  2. product-id パラメーターの値を取得します。 Get-AzsProductDeployment コマンドレットを実行して、最新のリソース プロバイダー デプロイの一覧を取得します。 返された "value" コレクションには、デプロイされたリソース プロバイダーごとに要素が含まれます。 目的のリソース プロバイダーを見つけて、これらのプロパティの値をメモします。

    • "name" - 値の 2 番目のセグメント内にリソース プロバイダーの製品 ID が含まれています。
    • "properties"."deployment"."version" - 現在デプロイされているバージョン番号が含まれています。

たとえば、SQL RP のデプロイの製品 ID は "microsoft.sqlrp"、バージョンは "2.0.0.2" のようなものです。

  1. リソース プロバイダーの製品 ID とバージョンを連結して、リソース プロバイダーのパッケージ ID とバージョンを作成します。 たとえば、前の手順の派生した値を使用すると、SQL RP パッケージ ID は microsoft.sqlrp.2.0.0.2 です。

  2. 前の手順の派生したパッケージ ID を使用して、Get-AzsProductSecret -PackageId を実行し、リソース プロバイダーによって使用されているシークレットの種類の一覧を取得します。 返された value コレクションで、"properties"."secretKind" プロパティの "Certificate" の値を含む要素を見つけます。 この要素には、RP の証明書シークレットのプロパティが含まれています。 この証明書のシークレットに割り当てられている名前をメモしておきます。これは、"properties" のすぐ上にある "name" プロパティの最後のセグメントによって特定されます。

たとえば、SQL RP に対して返されたシークレット コレクションに、SSLCert という名前の "Certificate" シークレットが含まれています。

  1. Set-AzsProductSecret コマンドレットを使用して、新しい証明書を Key Vault にインポートします。これは、ローテーション プロセスによって使用されます。 スクリプトを実行する前に、変数のプレースホルダーの値を適宜置き換えます。

    $productId = '<product-id>'
    $packageId = $productId + '.' + '<installed-version>'
    $certSecretName = '<cert-secret-name>' 
    $pfxFilePath = '<cert-pfx-file-path>'
    $pfxPassword = ConvertTo-SecureString '<pfx-password>' -AsPlainText -Force   
    Set-AzsProductSecret -PackageId $packageId -SecretName $certSecretName -PfxFileName $pfxFilePath -PfxPassword $pfxPassword -Force
    
  2. 最後に、Invoke-AzsProductRotateSecretsAction コマンドレットを使用して、シークレットをローテーションします。

    Invoke-AzsProductRotateSecretsAction -ProductId $productId
    

シークレットのローテーションの進行状況を監視する

PowerShell コンソールまたは管理者ポータルでシークレット ローテーションの進行状況を監視するには、Marketplace サービスでリソース プロバイダーを選択します。

進行中のシークレット ローテーションの画面。

Note

シークレットのローテーションの時間は 10 分を超える場合があります。 完了すると、リソース プロバイダーの状態が "インストール済み" に変わります。

診断ログの収集

Azure Stack Hub には、診断ログを収集、保存して Microsoft サポートに送信するための方法が複数用意されています。 バージョン 1.1.93 から、SQL リソース プロバイダーは、Azure Stack Hub 環境からログを収集するための標準的な方法をサポートしています。 詳細については、「診断ログの収集」を参照してください。

バージョン 1.1.93 から、SQL リソース プロバイダーは、Azure Stack Hub 環境からログを収集するための標準的な方法をサポートしています。 以前のバージョンを使用している場合は、SQL リソース プロバイダーを最新バージョンに更新することをお勧めします。

ロックダウンされた VM からログを収集するには、PowerShell Just Enough Administration (JEA) エンドポイント DBAdapterDiagnostics を使用します。 このエンドポイントでは、次のコマンドが提供されます。

  • Get-AzsDBAdapterLog。 このコマンドは、リソース プロバイダー診断ログの zip パッケージを作成し、そのファイルをセッションのユーザー ドライブ上に保存します。 このコマンドはパラメーターなしで実行することができ、過去 4 時間のログが収集されます。
  • Remove-AzsDBAdapterLog。 このコマンドは、リソース プロバイダー VM に対する既存のログ パッケージを削除します。

エンドポイントの要件とプロセス

リソース プロバイダーをインストールまたは更新すると、dbadapterdiag ユーザー アカウントが作成されます。 このアカウントを使用することで、診断ログを収集できます。

注意

dbadapterdiag アカウント パスワードは、プロバイダーのデプロイ中または更新中に作成される VM のローカル管理者用に使用されるパスワードと同じです。

DBAdapterDiagnostics コマンドを使用するには、リソース プロバイダー VM に対するリモート PowerShell セッションを作成し、Get-AzsDBAdapterLog コマンドを実行します。

FromDate および ToDate パラメーターを使用して、ログ収集の期間を設定します。 これらのパラメーターの一方または両方を指定しない場合は、次の既定値が使用されます。

  • FromDate は現在の時刻の 4 時間前です。
  • ToDate は現在の時刻です。

ログを収集する PowerShell スクリプトの例

次のスクリプトでは、リソース プロバイダー VM から診断ログを収集する方法を示します。

# Create a new diagnostics endpoint session.
$databaseRPMachineIP = '<RP VM IP address>'
$diagnosticsUserName = 'dbadapterdiag'
$diagnosticsUserPassword = '<Enter Diagnostic password>'

$diagCreds = New-Object System.Management.Automation.PSCredential `
        ($diagnosticsUserName, (ConvertTo-SecureString -String $diagnosticsUserPassword -AsPlainText -Force))
$session = New-PSSession -ComputerName $databaseRPMachineIP -Credential $diagCreds `
        -ConfigurationName DBAdapterDiagnostics `
        -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)

# Sample that captures logs from the previous hour.
$fromDate = (Get-Date).AddHours(-1)
$dateNow = Get-Date
$sb = {param($d1,$d2) Get-AzSDBAdapterLog -FromDate $d1 -ToDate $d2}
$logs = Invoke-Command -Session $session -ScriptBlock $sb -ArgumentList $fromDate,$dateNow

# Copy the logs to the user drive.
$sourcePath = "User:\{0}" -f $logs
$destinationPackage = Join-Path -Path (Convert-Path '.') -ChildPath $logs
Copy-Item -FromSession $session -Path $sourcePath -Destination $destinationPackage

# Clean up the logs.
$cleanup = Invoke-Command -Session $session -ScriptBlock {Remove-AzsDBAdapterLog}
# Close the session.
$session | Remove-PSSession

SQL Server リソース プロバイダー バージョン 1 の既知の制限事項

制限事項:
デプロイ、アップグレード、またはシークレット ローテーション スクリプトが失敗した場合、一部のログは標準ログ収集メカニズムで収集できません。

回避策:
標準ログ収集メカニズムを使用する以外に、スクリプトが存在する抽出されたフォルダー内のログ フォルダーに移動して、その他のログを検索します。

次のステップ

サーバーをホストする SQL Server を追加する