7.6 Защита кластера InnoDB
Серверные экземпляры могут быть настроены для использования защищенных соединений. Для общей информации об использовании защищенных соединений с MySQL см. . В этом разделе объясняется, как настроить кластер для использования шифрованных соединений. Дополнительной возможностью безопасности является настройка серверов, которые могут получить доступ к кластеру, см. Создание списка разрешенных серверов.
Если вы используете XCOM стека коммуникаций, после настройки кластера для использования шифрованных соединений вы должны добавить серверы в ipAllowlist. Например, при использовании коммерческой версии MySQL SSL включён по умолчанию, и вам необходимо настроить опцию ipAllowlist для всех экземпляров. См. Создание списка разрешенных серверов.
При использовании dba.createCluster() для настройки кластера, если серверный экземпляр поддерживает шифрование, оно автоматически включается на экземпляре-семени. Передайте опцию memberSslMode методу dba.createCluster() для указания другого режима SSL. Режим SSL кластера может быть задан только во время создания. Опция memberSslMode — строка, которая настраивает режим SSL, используемый по умолчанию, он равен AUTO. Поддерживаются следующие режимы:
DISABLED: Обеспечьте отключение шифрования SSL для экземпляра-семени в кластере.AUTO: Автоматически включите шифрование SSL, если серверный экземпляр его поддерживает, или отключите шифрование, если сервер его не поддерживает.REQUIRED: Включите шифрование SSL для экземпляра-семени в кластере. Если это невозможно, генерируется ошибка.VERIFY_CA: КакREQUIRED, но дополнительно проверяет сертификат Центра сертификации (CA) сервера на соответствие настроенным сертификатам CA. Попытка подключения завершается неудачей, если не найдены соответствующие действительные сертификаты CA.VERIFY_IDENTITY: КакVERIFY_CA, но дополнительно выполняет проверку идентичности имени хоста, сравнивая имя хоста, используемое клиентом для подключения к серверу, с идентификатором в сертификате, отправленном сервером клиенту.
Например, чтобы настроить кластер на использование REQUIRED, выполните:
mysql-js> var myCluster = dba.createCluster({memberSslMode: 'REQUIRED'})
Если вы выберите режим VERIFY_CA или VERIFY_IDENTITY, на каждом экземпляре кластера вы должны вручную предоставить сертификаты CA с помощью опции и/или . Для получения дополнительной информации об этих режимах см. .
При использовании операций и Cluster.addInstance(), шифрование SSL на экземпляре включается или отключается в зависимости от настроек, используемых для кластера. Используйте опцию Cluster.rejoinInstance()memberSslMode с любой из этих операций для настройки экземпляра на использование другого режима шифрования.
При использовании dba.createCluster() с опцией adoptFromGR для принятия существующей группы Group Replication, настройки SSL в принятом кластере не изменяются:
memberSslModeне может быть использована сadoptFromGR.Если настройки SSL принятого кластера отличаются от поддерживаемых MySQL Shell, другими словами, SSL для восстановления Group Replication и групповой коммуникации, оба набора настроек не изменяются. Это означает, что вы не сможете добавить новые экземпляры в кластер, пока не измените настройки вручную для принятого кластера.
MySQL Shell всегда включает или отключает SSL для кластера как для восстановления Group Replication, так и для групповой коммуникации, см. . Проводится проверка, и выдаётся ошибка, если эти настройки отличаются для экземпляра-семени (например, в результате dba.createCluster(), использующего adoptFromGR), при добавлении нового экземпляра в кластер. Шифрование SSL должно быть включено или отключено для всех экземпляров в кластере. Выполняются проверки, чтобы гарантировать, что это условие сохраняется при добавлении нового экземпляра в кластер.
Команда dba.deploySandboxInstance() пытается развернуть тестовые экземпляры с поддержкой шифрования SSL по умолчанию. Если это невозможно, серверный экземпляр развертывается без поддержки SSL. См. Раздел 6.8.1, «Развёртывание тестовых экземпляров».
Защита коммуникаций между членами кластера
Можно настроить кластеры и кластеры реплик для использования SSL для шифрования каналов репликации и включения реплик для проверки идентичности хоста и использования SSL-сертификатов для аутентификации.
При создании кластера с dba.createCluster() вы можете определить тип аутентификации, используемый для внутренних учетных записей репликации, с помощью опции memberAuthType. Эта опция принимает одно из следующих значений:
PASSWORD: Учетная запись аутентифицируется только по паролю.CERT_ISSUER: Учетная запись аутентифицируется с помощью сертификата клиента, который должен соответствовать ожидаемому издателю. Это значение эквивалентноVERIFY_CA.CERT_SUBJECT: Учетная запись аутентифицируется с помощью сертификата клиента, который должен соответствовать ожидаемому издателю и субъекту. Это значение эквивалентноVERIFY_IDENTITY.CERT_ISSUER_PASSWORD: Учетная запись аутентифицируется с помощью комбинации значенийPASSWORDиCERT_ISSUER.CERT_SUBJECT_PASSWORD: Учетная запись аутентифицируется с помощью комбинации значенийPASSWORDиCERT_SUBJECT.
Кластеры ClusterSets наследуют memberAuthType, определённые в первичном кластере. Все кластеры реплик в ClusterSet также будут использовать memberAuthType, определённые в первичном кластере.
SSL-сертификаты определяются с помощью следующих опций:
CERT_ISSUER: Определяет издателя сертификата, необходимый для всех учетных записей репликации в топологии, еслиmemberAuthTypeсодержитCERT_ISSUERилиCERT_SUBJECT.CERT_SUBJECT: Определяет субъект сертификата экземпляра. Требуется, еслиmemberAuthTypeсодержитCERT_SUBJECT.
Невозможно использовать adoptFromGR=true ни с какой опцией, кроме memberAuthType=password.
Следующий пример создаёт кластер, cluster1, который устанавливает SSL-соединения клиентов и соединения, открываемые Group Replication с одного сервера на другой, в режим VERIFY_IDENTITY, и устанавливает аутентификацию внутренних учетных записей репликации, требующих сертификат клиента:
cluster = dba.createCluster("cluster1", { "memberSslMode": "VERIFY_IDENTITY", "memberAuthType":"CERT_SUBJECT",
"certIssuer":"/CN=MyCertAuthority", "certSubject": "/CN=mysql-1.local"});
Следующий пример показывает, как добавить экземпляр в кластер с помощью "memberAuthType":"CERT_SUBJECT":
cluster.addInstance("mysql-2.local", {"certSubject": "/CN=mysql-2.local"});
Для получения дополнительной информации о репликации и шифрованных подключениях см. .
Создание списка разрешенных серверов
Это относится только к XCOM стеку коммуникаций.
Методы createCluster(), addInstance() и rejoinInstance() позволяют по желанию указать список одобренных серверов, называемый списком разрешенных серверов (allowlist). Явно указав allowlist таким образом, можно повысить безопасность кластера, так как только серверы из allowlist смогут подключиться к кластеру.
Вы также можете определить allowlist для работающего кластера, используя для задания allowlist для всех членов кластера и Cluster.setOption() для задания allowlist для отдельного члена. См. Раздел 7.5.1, «Настройка опций для InnoDB Cluster». Cluster.setInstanceOption()
Использование опции ipAllowlist настраивает системную переменную на экземпляре. По умолчанию, если не указано явно, allowlist автоматически устанавливается на адреса частной сети, к которым сервер имеет сетевые интерфейсы. Для настройки 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. Allowlist также может включать имена хостов, которые разрешаются только при запросе соединения другим сервером.
Имена хостов по своей природе менее безопасны, чем IP-адреса в allowlist. MySQL выполняет проверку FCrDNS, которая обеспечивает хороший уровень защиты, но может быть скомпрометирована определёнными типами атак. Указывать имена хостов в allowlist следует только в строго необходимых случаях и убедиться, что все компоненты, используемые для разрешения имён, такие как DNS-серверы, находятся под вашим контролем. Вы также можете реализовать разрешение имён локально, используя файл hosts, чтобы избежать использования внешних компонентов.
© 2025 Oracle
Licensed under the GPLv2 License.