Azure Arc で有効な SQL Managed Instance のカスタマー マネージド keytab をローテーションする
この記事では、Azure Arc 対応 SQL Managed Instance のカスタマー マネージド keytab をローテーションする方法について説明します。これらの keytab は、マネージド インスタンスの Active Directory ログインを有効にするために使用されます。
前提条件:
この記事を進める前に、カスタマー マネージド keytab モードの Active Directory コネクタと Azure Arc 対応 SQL Managed Instance リソースを作成する必要があります。
マネージド インスタンスでカスタマーマネージド keytab をローテーションする方法
keytab をローテーションするには、次の手順に従う必要があります。
- SQL MI Active Directory アカウントの資格情報の最新世代の
kvno
値を取得します。 - 最新世代の資格情報用のエントリを含む新しい keytab ファイルを作成します。 具体的には、
kvno
値が上記の手順 (1.) と一致する必要があります。 - SQL MI Active Directory アカウントの新しい資格情報用の新しいエントリを使用して、新しい keytab ファイルを更新します。
- 新しい keytab ファイルの内容を保持する Kubernetes シークレットを SQL MI と同じ名前空間に作成します。
- SQL MI 仕様を編集して、Active Directory keytab シークレット設定をこの新しいシークレットに指定します。
- 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
ユーザー アカウント用のパスワードを変更します。
Active Directory ドメイン
contoso.com
のドメイン コントローラーで、サーバー マネージャーを開きます。 サーバー マネージャーを検索するか、スタート メニュー経由で開きます。[ツール]>[Active Directory ユーザーとコンピューター]の順に移動します
パスワードを変更するユーザーを選択します。 右クリックしてユーザーを選択します。 [パスワードのリセット] の選択:
新しいパスワードを入力して、
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 ユーザーの kvno
が arc-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 にログが出力されます。