輪替已啟用 Azure Arc 的 SQL 受控執行個體客戶自控金鑰表

本文說明如何輪替已啟用 Azure Arc 的 SQL 受控執行個體客戶自控金鑰表。這些金鑰表可用來啟用受控執行個體的 Active Directory 登入。

先決條件:

在繼續本文之前,您必須在客戶自控金鑰表模式中擁有 Active Directory 連接器,以及建立已啟用 Azure Arc 的 SQL 受控執行個體。

如何在受控執行個體中輪替客戶自控金鑰表

必須遵循下列步驟來輪替金鑰表:

  1. 取得 SQL MI Active Directory 帳戶目前世代憑證的 kvno 值。
  2. 建立新的金鑰檔案,其中包含目前世代憑證的項目。 具體來說,kvno 值應該符合上述步驟 (1.)。
  3. 針對 SQL MI Active Directory 帳戶的新憑證,使用新項目更新新的金鑰表檔案。
  4. 在與 SQL MI 相同的命名空間中,建立具有新金鑰表檔案內容的 kubernetes 秘密。
  5. 編輯 SQL MI 規格以將 Active Directory 金鑰表秘密設定指向這個新的秘密。
  6. 變更 Active Directory 網域中的密碼。

我們提供了下列 PowerShell 和 bash 指令碼,這些指令碼會為您處理步驟 1-5:

  • rotate-sqlmi-keytab.sh - 此 bash 指令碼會使用 ktutiladutil (若已指定 --use-adutil 旗標) 來為您產生新的金鑰表。
  • rotate-sqlmi-keytab.ps1 - 此 PowerShell 指令碼會使用 ktpass.exe 為您產生新的金鑰表。

執行上述指令碼會產生使用者 arcsqlmi@CONTOSO.COM、秘密 sqlmi-keytab-secret-kvno-2-3 和命名空間 test 的下列金鑰表檔案:

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

針對輪替後的錯誤進行疑難排解

如果嘗試在完成金鑰表輪替之後使用 Active Directory 驗證時發生錯誤,SQL MI Pod 中 arc-sqlmi 容器中的下列檔案是適合開始調查根本原因的起點:

  • 位於 /var/opt/mssql/logsecurity.log 檔案 - 此記錄檔具有 SQL 與 Active Directory 網域互動的記錄。
  • 位於 /var/opt/mssql/logerrorlog 檔案 - 此記錄檔包含容器上執行的 SQL Server 記錄。
  • 位於 /var/run/secrets/managed/keytabs/mssqlmssql.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

我們也可以執行下列命令來啟用 kinit 命令的偵錯記錄:KRB5_TRACE=/dev/stdout kinit -V arcsqlmi@CONTOSO.COM。 這會在命令執行時增加詳細程度,並將記錄輸出至 stdout。