你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
轮换由 Azure Arc 启用的 SQL 托管实例客户管理的密钥表
本文介绍如何轮换由 Azure Arc 启用的 SQL 托管实例的客户管理的密钥表。这些密钥表用于为托管实例启用 Active Directory 登录。
先决条件:
在继续阅读本文之前,必须在客户管理的密钥表模式下创建 Active Directory 连接器,并创建由 Azure Arc 启用的 SQL 托管实例。
如何在托管实例中轮换客户管理的密钥表
需要遵循以下步骤来轮换密钥表:
- 获取 SQL MI Active Directory 帐户的当前代系凭据的
kvno
值。 - 使用当前代系凭据的条目创建新的密钥表文件。 具体而言,
kvno
值应与上面的步骤 (1.) 匹配。 - 使用 SQL MI Active Directory 帐户的新凭据的新条目更新新的密钥表文件。
- 创建一个 kubernetes 机密,将新的密钥表文件内容保存在 SQL MI 所在的同一命名空间中。
- 编辑 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
。
我们还可以通过运行以下 KRB5_TRACE=/dev/stdout kinit -V arcsqlmi@CONTOSO.COM
来为 kinit
命令启用调试记录。 这会增加详细程度,并在执行命令时将日志输出到 stdout。