輪替已啟用 Azure Arc 的 SQL 受控執行個體客戶自控金鑰表
本文說明如何輪替已啟用 Azure Arc 的 SQL 受控執行個體客戶自控金鑰表。這些金鑰表可用來啟用受控執行個體的 Active Directory 登入。
先決條件:
在繼續本文之前,您必須在客戶自控金鑰表模式中擁有 Active Directory 連接器,以及建立已啟用 Azure Arc 的 SQL 受控執行個體。
如何在受控執行個體中輪替客戶自控金鑰表
必須遵循下列步驟來輪替金鑰表:
- 取得 SQL MI Active Directory 帳戶目前世代憑證的
kvno
值。 - 建立新的金鑰檔案,其中包含目前世代憑證的項目。 具體來說,
kvno
值應該符合上述步驟 (1.)。 - 針對 SQL MI Active Directory 帳戶的新憑證,使用新項目更新新的金鑰表檔案。
- 在與 SQL MI 相同的命名空間中,建立具有新金鑰表檔案內容的 kubernetes 秘密。
- 編輯 SQL MI 規格以將 Active Directory 金鑰表秘密設定指向這個新的秘密。
- 變更 Active Directory 網域中的密碼。
我們提供了下列 PowerShell 和 bash 指令碼,這些指令碼會為您處理步驟 1-5:
rotate-sqlmi-keytab.sh
- 此 bash 指令碼會使用ktutil
或adutil
(若已指定--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
使用者帳戶的密碼:
在 Active Directory 網域
contoso.com
的網域控制器上開啟「伺服器管理員」。 您可以搜尋「伺服器管理員」 或透過 [開始] 功能表開啟該程式。前往 [工具]>[Active Directory 使用者和電腦]
選取您要變更密碼的使用者。 按一下滑鼠右鍵以選取使用者。 選取 [重設密碼]:
輸入新密碼並選取
OK
。
針對輪替後的錯誤進行疑難排解
如果嘗試在完成金鑰表輪替之後使用 Active Directory 驗證時發生錯誤,SQL MI Pod 中 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
檔案 - 確認此金鑰表檔案包含新更新的項目,並且與使用上述指令碼建立的金鑰表檔案相符。 您可以使用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。