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

轮换 Azure Arc 启用的 SQL 托管实例服务托管凭据(预览版)

本文介绍了如何轮换 Azure Arc 启用的 SQL 托管实例的服务托管凭据。Arc 数据服务生成各种服务托管的凭据,例如用于监视、备份/还原、高可用性等的证书和 SQL 登录名。这些凭据被视为由 Azure Arc 数据服务托管的自定义资源凭据。

服务托管的凭据轮换是在安全问题期间或者需要定期轮换以便合规时由你启动的用户触发操作。

限制

轮换托管实例服务托管凭据时,请考虑以下限制:

  • 不支持 SQL Server 故障转移组。
  • 不支持自动预先安排的轮换。
  • 此凭据轮换中不包括服务托管的 DPAPI 对称密钥、密钥表、Active Directory 帐户和服务托管的 TDE 凭据。

常规用途层

在常规用途 SQL 托管实例服务托管凭据轮换期间,托管实例 Kubernetes Pod 将被终止并使用轮换后的凭据重新预配。 此过程会导致短暂的停机时间,因为将创建新的托管实例 Pod。 要处理中断,请在应用程序中构建复原能力,例如连接重试逻辑,以确保尽量减少中断。 若要详细了解如何构建复原能力,请参阅可靠性支柱概述Azure 服务重试指南

业务关键层

在具有多个副本的环境中进行业务关键 SQL 托管实例服务托管凭据轮换期间:

  • 辅助副本 Pod 将被终止,并使用轮换后的服务托管凭据重新预配
  • 在副本重新预配后,主副本会故障转移到重新预配的副本
  • 以前的主 Pod 将被终止,并使用轮换后的服务托管凭据重新预配,然后成为辅助 Pod

发生故障转移时,有一段短暂的停机时间。

先决条件:

在继续阅读本文之前,必须创建由 Azure Arc 启用的 SQL 托管实例资源。

如何在托管实例中轮换服务托管的凭据

服务托管的凭据与托管实例中的生成相关联。 若要轮换某个托管实例的所有服务托管凭据,必须将生成增加 1。

运行以下命令,从规范中获取当前的服务托管凭据生成,并生成新的服务托管凭据。 此操作将触发服务托管的凭据轮换。

rotateCredentialGeneration=$(($(kubectl get sqlmi <sqlmi-name> -o jsonpath='{.spec.update.managedCredentialsGeneration}' -n <namespace>) + 1))
kubectl patch sqlmi <sqlmi-name> --namespace <namespace> --type merge --patch '{ "spec": { "update": { "managedCredentialsGeneration": '$rotateCredentialGeneration'} } }'

managedCredentialsGeneration 标识服务托管凭据的目标生成。 其余功能(例如配置和 kubernetes 拓扑)保持不变。

如何在托管实例中回滚服务托管的凭据

注意

凭据轮换失败时需要回滚。 回滚到以前的凭据生成仅支持回滚一次到 n-1 次,其中 n 是当前生成。

如果回滚是在凭据轮换正在进行时触发的,并且尚未重新预配所有副本,则回滚可能需要大约 30 分钟才能完成,以便托管实例处于就绪状态。

运行以下两个命令,从规范中获取当前的服务托管凭据生成,并回滚到以前生成的服务托管凭据。

rotateCredentialGeneration=$(($(kubectl get sqlmi <sqlmi-name> -o jsonpath='{.spec.update.managedCredentialsGeneration}' -n <namespace>) - 1))
kubectl patch sqlmi <sqlmi-name> --namespace <namespace> --type merge --patch '{ "spec": { "update": { "managedCredentialsGeneration": '$rotateCredentialGeneration'} } }'

触发回滚与触发服务托管凭据的轮换相同,但其目标是生成以前的凭据,而不会生成新凭据。