MySQL 外壳 8.0  / 第 7 章 MySQL InnoDB 集群  /  7.6 保护 InnoDB 集群

7.6 保护 InnoDB 集群

服务器实例可以配置为使用安全连接。有关使用 MySQL 安全连接的一般信息,请参阅 使用加密连接。本节介绍如何配置集群以使用加密连接。另一种安全可能性是配置哪些服务器可以访问集群,请参阅创建服务器白名单

重要的

将集群配置为使用加密连接后,您必须将服务器添加到ipAllowlist. 例如,在使用商业版MySQL时,默认启用SSL,您需要 ipAllowlist为所有实例配置该选项。请参阅 创建服务器白名单

用于dba.createCluster()设置集群时,如果服务器实例提供加密,则它会在种子实例上自动启用。将 memberSslMode选项传递给 dba.createCluster()方法以指定不同的 SSL 模式。集群的SSL模式只能在创建时设置。该memberSslMode选项是一个字符串,用于配置要使用的 SSL 模式,默认为AUTO. 支持以下模式:

  • DISABLED:确保为集群中的种子实例禁用 SSL 加密。

  • AUTO:如果服务器实例支持,则自动启用 SSL 加密,如果服务器不支持,则禁用加密。

  • REQUIRED:为集群中的种子实例启用 SSL 加密。如果无法启用,则会引发错误。

  • (在版本 8.0.24 中添加)VERIFY_CA:类似 REQUIRED,但另外根据配置的 CA 证书验证服务器证书颁发机构 (CA) 证书。如果未找到有效的匹配 CA 证书,连接尝试将失败。

  • (8.0.24版新增)VERIFY_IDENTITY:与 类似VERIFY_CA,但额外执行主机名身份验证,通过检查客户端用于连接服务器的主机名与服务器发送给客户端的证书中的身份。

例如,要将集群设置为使用 REQUIRED,发出:

mysql-js> var myCluster = dba.createCluster({memberSslMode: 'REQUIRED'})

如果您选择使用VERIFY_CAor 模式,则必须在每个集群实例上使用and/or 选项VERIFY_IDENTITY手动提供 CA 证书 。有关这些模式的更多信息,请参阅 。 ssl_cassl_capath--ssl-mode=mode

当您使用 Cluster.addInstance()Cluster.rejoinInstance() 操作时,实例上的 SSL 加密将根据用于集群的设置启用或禁用。将 memberSslMode选项与这些操作中的任何一个结合使用,以将实例设置为使用不同的加密模式。

与采用现有组复制组 dba.createCluster()的 选项一起 使用时,采用的集群上不会更改任何 SSL 设置:adoptFromGR

  • memberSslMode不能与 一起使用 adoptFromGR

  • 如果采用的集群的 SSL 设置与 MySQL Shell 支持的不同,换句话说,用于组复制恢复和组通信的 SSL,则不会修改这两个设置。这意味着您无法向集群添加新实例,除非您手动更改已采用集群的设置。

MySQL Shell 始终为集群启用或禁用 SSL 以进行组复制恢复和组通信,请参阅 使用安全套接字层 (SSL) 保护组通信连接。在将新实例添加到集群时,如果种子实例的这些设置不同(例如,由于dba.createCluster()using 的结果),则会执行验证并发出错误。adoptFromGR必须为集群中的所有实例启用或禁用 SSL 加密。执行验证以确保在向集群添加新实例时此不变量成立。

默认情况下,该dba.deploySandboxInstance()命令尝试部署支持 SSL 加密的沙箱实例。如果不可能,则在不支持 SSL 的情况下部署服务器实例。请参阅 第 6.8.1 节,“部署沙箱实例”

创建服务器白名单

使用集群的createCluster()addInstance()rejoinInstance()方法时,您可以选择指定属于集群的已批准服务器列表,称为白名单。通过以这种方式明确指定白名单,您可以提高集群的安全性,因为只有白名单中的服务器才能连接到集群。使用该ipAllowlist选项(以前 ipWhitelist是,现在已弃用)配置 group_replication_ip_allowlist 实例上的系统变量。默认情况下,如果未明确指定,白名单将自动设置为服务器具有网络接口的专用网络地址。要配置允许列表,请 ipAllowlist在使用该方法时使用选项指定要添加的服务器。IP 地址必须以 IPv4 格式指定。将服务器作为逗号分隔列表传递,并用引号括起来。例如:

mysql-js> cluster.addInstance("icadmin@ic-3:3306", {ipAllowlist: "203.0.113.0/24, 198.51.100.110"})

这会将实例配置为仅接受来自地址为203.0.113.0/24和 的服务器的连接198.51.100.110。白名单还可以包括主机名,只有在另一台服务器发出连接请求时才会解析这些主机名。

警告

主机名本质上不如白名单中的 IP 地址安全。MySQL 执行 FCrDNS 验证,提供了良好的保护级别,但可能会受到某些类型的攻击。仅在绝对必要时才在允许列表中指定主机名,并确保用于名称解析的所有组件(例如 DNS 服务器)都在您的控制之下。您还可以使用主机文件在本地实现名称解析,以避免使用外部组件。