文件首頁
MySQL Shell 8.4
下載本手冊
PDF (美國信紙) - 2.2Mb
PDF (A4) - 2.3Mb


MySQL Shell 8.4  /  MySQL InnoDB Cluster  /  保護 InnoDB Cluster

7.6 保護 InnoDB Cluster

伺服器執行個體可以設定為使用安全連線。如需使用 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_CAVERIFY_IDENTITY 模式,在每個叢集執行個體上,您必須使用 ssl_ca 和/或 ssl_capath 選項手動提供 CA 憑證。如需這些模式的詳細資訊,請參閱 --ssl-mode=模式

當您使用 叢集.addInstance()叢集.rejoinInstance() 作業時,執行個體上的 SSL 加密會根據叢集使用的設定啟用或停用。將 memberSslMode 選項與這些作業中的任一個搭配使用,以設定執行個體使用不同的加密模式。

當搭配 adoptFromGR 選項使用 dba.createCluster() 來採用現有的群組複寫群組時,不會在採用的叢集上變更任何 SSL 設定

  • memberSslMode 無法與 adoptFromGR 搭配使用。

  • 如果採用的叢集的 SSL 設定與 MySQL Shell 支援的設定不同,換句話說,群組複寫復原和群組通訊的 SSL,則這兩個設定都不會修改。這表示您無法將新執行個體新增至叢集,除非您手動變更採用的叢集的設定。

MySQL Shell 一律啟用或停用叢集的 SSL,以進行群組複寫復原和群組通訊,請參閱 使用安全通訊端層 (SSL) 保護群組通訊連線。如果種子執行個體 (例如,使用 adoptFromGRdba.createCluster() 的結果) 的這些設定不同,則會執行驗證並發出錯誤,然後再將新執行個體新增至叢集。叢集中的所有執行個體都必須啟用或停用 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:帳戶使用 PASSWORDCERT_ISSUER 值的組合進行驗證。

  • CERT_SUBJECT_PASSWORD:帳戶使用 PASSWORDCERT_SUBJECT 值的組合進行驗證。

重要

ClusterSet 會繼承在主要叢集上定義的 memberAuthType。ClusterSet 中的所有複本叢集也會使用在主要叢集上定義的 memberAuthType

SSL 憑證是使用下列選項定義的

  • CERT_ISSUER:如果 memberAuthType 包含 CERT_ISSUERCERT_SUBJECT,則定義拓撲中所有複寫帳戶所需的憑證發行者。

  • CERT_SUBJECT:定義執行個體的憑證主旨。如果 memberAuthType 包含 CERT_SUBJECT,則為必要項目。

注意

除了 memberAuthType=password 之外,無法將 adoptFromGR=true 與任何選項搭配使用。

下列範例會建立一個叢集,cluster1,它會將用戶端 SSL 連線和群組複寫從一個伺服器開啟到另一個伺服器的連線設定為 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() 方法讓您可以選擇性地指定已核准伺服器的清單,稱為允許清單。透過這種方式明確指定允許清單,您可以提高叢集的安全性,因為只有允許清單中的伺服器才能連線到叢集。

您也可以在執行中的叢集上定義允許清單,使用 Cluster.setOption() 來為叢集的所有成員指定允許清單,並使用 Cluster.setInstanceOption() 來為個別成員指定允許清單。請參閱第 7.5.1 節「設定 InnoDB Cluster 的選項」

使用 ipAllowlist 選項會設定執行個體上的 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/24198.51.100.110 的伺服器的連線。允許清單也可以包含主機名稱,這些主機名稱僅在其他伺服器提出連線請求時才會解析。

警告

在允許清單中,主機名稱的安全性本質上低於 IP 位址。MySQL 會執行 FCrDNS 驗證,這提供良好的保護程度,但可能會受到某些類型的攻擊損害。僅在絕對必要時才在允許清單中指定主機名稱,並確保用於名稱解析的所有元件(例如 DNS 伺服器)都在您的控制之下進行維護。您也可以使用 hosts 檔案在本機實作名稱解析,以避免使用外部元件。