Azure Arc カスタマー マネージド キータブで有効になっている SQL Managed Instance をローテーションする

この記事では、Azure Arc 対応 SQL Managed Instance のカスタマー マネージド keytab をローテーションする方法について説明します。これらの keytab は、マネージド インスタンスの Active Directory ログインを有効にするために使用されます。

前提条件:

この記事を進める前に、カスタマー マネージド keytab モードの Active Directory コネクタと Azure Arc 対応 SQL Managed Instance リソースを作成する必要があります。

マネージド インスタンスでカスタマーマネージド keytab をローテーションする方法

keytab をローテーションするには、次の手順に従う必要があります。

  1. SQL MI Active Directory アカウントの資格情報の最新世代の kvno 値を取得します。
  2. 最新世代の資格情報用のエントリを含む新しい keytab ファイルを作成します。 具体的には、kvno 値が上記の手順 (1.) と一致する必要があります。
  3. SQL MI Active Directory アカウントの新しい資格情報用の新しいエントリを使用して、新しい keytab ファイルを更新します。
  4. 新しい keytab ファイルの内容を保持する Kubernetes シークレットを SQL MI と同じ名前空間に作成します。
  5. SQL MI 仕様を編集して、Active Directory keytab シークレット設定をこの新しいシークレットに指定します。
  6. Active Directory ドメインでパスワードを変更します。

手順 1 から 5 に配慮した、次の PowerShell スクリプトと bash スクリプトを指定します。

  • rotate-sqlmi-keytab.sh - この bash スクリプトは、ktutil または adutil (--use-adutil フラグが指定されている場合) を使用して新しい keytab を生成します。
  • rotate-sqlmi-keytab.ps1 - この PowerShell スクリプトは、ktpass.exe を使用して新しい keytab を生成します。

上記のスクリプトを実行すると、ユーザー arcsqlmi@CONTOSO.COM、シークレット sqlmi-keytab-secret-kvno-2-3、名前空間 test に対して次のような keytab ファイルが作成されます。

KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 02/16/2023 17:12:05 arcsqlmiuser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   2 02/16/2023 17:12:05 arcsqlmiuser@CONTOSO.COM (arcfour-hmac) 
   2 02/16/2023 17:12:05 MSSQLSvc/arcsqlmi.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   2 02/16/2023 17:12:05 MSSQLSvc/arcsqlmi.contoso.com@CONTOSO.COM (arcfour-hmac) 
   2 02/16/2023 17:12:05 MSSQLSvc/arcsqlmi.contoso.com:31433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   2 02/16/2023 17:12:05 MSSQLSvc/arcsqlmi.contoso.com:31433@CONTOSO.COM (arcfour-hmac) 
   3 02/16/2023 17:13:41 arcsqlmiuser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   3 02/16/2023 17:13:41 arcsqlmiuser@CONTOSO.COM (arcfour-hmac) 
   3 02/16/2023 17:13:41 MSSQLSvc/arcsqlmi.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   3 02/16/2023 17:13:41 MSSQLSvc/arcsqlmi.contoso.com@CONTOSO.COM (arcfour-hmac) 
   3 02/16/2023 17:13:41 MSSQLSvc/arcsqlmi.contoso.com:31433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 
   3 02/16/2023 17:13:41 MSSQLSvc/arcsqlmi.contoso.com:31433@CONTOSO.COM (arcfour-hmac)

また、updated-secret.yaml 仕様は次のとおりです。

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: sqlmi-keytab-secret-kvno-2-3
  namespace: test
data:
  keytab:
    <keytab-contents>

最後に、次の Active Directory ドメイン contoso.com のドメイン コントローラーで、arcsqlmi ユーザー アカウント用のパスワードを変更します。

  1. Active Directory ドメイン contoso.com のドメイン コントローラーで、サーバー マネージャーを開きます。 サーバー マネージャーを検索するか、スタート メニュー経由で開きます。

  2. [ツール]>[Active Directory ユーザーとコンピューター]の順に移動します

    Screenshot of Active Directory Users and Computers.

  3. パスワードを変更するユーザーを選択します。 右クリックしてユーザーを選択します。 [パスワードのリセット] の選択:

    Screenshot of the control to reset the password for an Active Directory user account.

  4. 新しいパスワードを入力して、OK を選択します。

ローテーション後のエラーのトラブルシューティング

keytab のローテーション完了後に Active Directory 認証を使用しようとするとエラーが発生する場合は、SQL MI ポッドの arc-sqlmi コンテナーにある次のファイルから根本原因を調査することをお勧めします。

  • /var/opt/mssql/log にある security.log ファイル - このログ ファイルには、SQL と Active Directory ドメインとの対話に関するログがあります。
  • /var/opt/mssql/log にある errorlog ファイル - このログ ファイルには、コンテナー上で実行中の SQL Server からのログが含まれます。
  • /var/run/secrets/managed/keytabs/mssql にある mssql.keytab ファイル - この keytab ファイルに新しく更新されたエントリが含まれ、上記で提供されたスクリプトを使用して作成された keytab ファイルと一致していることを確認します。 keytab ファイルは、klist コマンド、すなわち klist -k mssql.keytab -e コマンドを使って読み取れます。

さらに、kinit コマンドを使用して Kerberos チケット保証チケット (TGT) を取得した後、SQL ユーザーの kvnoarc-sqlmi コンテナー内の mssql.keytab ファイルの最上位の kvno と一致することを確認します。 たとえば、arcsqlmi@CONTOSO.COM ユーザーの場合は次のようになります。

  • kinit arcsqlmi@CONTOSO.COM を実行して、Active Directory ドメインから Kerberos TGT を取得します。 これにより、ユーザーは arcsqlmi ユーザー用のパスワードを入力するよう求められます。
  • これが成功すると、kvno arcsqlmi@CONTOSO.COM を実行して kvno をクエリに入れることができます。

また、次の KRB5_TRACE=/dev/stdout kinit -V arcsqlmi@CONTOSO.COM を実行して、kinit コマンドのデバッグ ログを有効にすることもできます。 これにより、冗長性が向上し、コマンドの実行中に StdOut にログが出力されます。