你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

轮换由 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. 创建一个 kubernetes 机密,将新的密钥表文件内容保存在 SQL MI 所在的同一命名空间中。
  5. 编辑 SQL MI 规范,将 Active Directory 密钥表机密设置指向此新机密。
  6. 更改 Active Directory 域中的密码。

我们提供了以下 PowerShell 和 bash 脚本,这些脚本将执行步骤 1-5:

执行上述脚本将导致用户 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 用户和计算机”

    Active Directory 用户和计算机菜单的屏幕截图。

  3. 选择要为其更改密码的用户。 右键单击以选择用户。 选择“重置密码”

    用于重置 Active Directory 用户帐户密码的控件的屏幕截图。

  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

我们还可以通过运行以下 KRB5_TRACE=/dev/stdout kinit -V arcsqlmi@CONTOSO.COM 来为 kinit 命令启用调试记录。 这会增加详细程度,并在执行命令时将日志输出到 stdout。