可以將伺服器執行個體設定為使用安全連線。如需有關搭配 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 模式,則在每個叢集執行個體上,您必須使用 ssl_ca 和/或 ssl_capath 選項手動提供 CA 憑證。如需這些模式的詳細資訊,請參閱--ssl-mode=。mode
當您使用 和 Cluster.addInstance() 作業時,執行個體上的 SSL 加密會根據叢集使用的設定啟用或停用。將 Cluster.rejoinInstance()memberSslMode 選項與其中一個作業搭配使用,以設定執行個體使用不同的加密模式。
當使用具有 adoptFromGR 選項的 dba.createCluster() 以採用現有的群組複寫群組時,不會在採用的叢集上變更任何 SSL 設定
memberSslMode無法與adoptFromGR搭配使用。如果採用的叢集的 SSL 設定與 MySQL Shell 支援的設定不同,換句話說,群組複寫復原和群組通訊的 SSL,則兩個設定都不會修改。這表示您無法將新的執行個體新增至叢集,除非您手動變更採用叢集的設定。
MySQL Shell 總是針對叢集的群組複寫復原和群組通訊啟用或停用 SSL,請參閱使用安全通訊端層 (SSL) 保護群組通訊連線。當將新的執行個體新增至叢集時,如果這些設定對於種子執行個體而言不同 (例如,因為使用 adoptFromGR 的 dba.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:帳戶使用PASSWORD和CERT_ISSUER值的組合驗證。CERT_SUBJECT_PASSWORD:帳戶使用PASSWORD和CERT_SUBJECT值的組合驗證。
ClusterSet 會繼承在主要叢集上定義的 memberAuthType。ClusterSet 中的所有複本叢集也會使用在主要叢集上定義的 memberAuthType。
SSL 憑證是使用下列選項定義
CERT_ISSUER:如果memberAuthType包含CERT_ISSUER或CERT_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() 為個別成員指定允許清單。請參閱第 7.5.1 節,「設定 InnoDB 叢集的選項」。Cluster.setInstanceOption()
使用 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/24 和 198.51.100.110 位址伺服器的連線。允許清單也可以包含主機名稱,這些主機名稱僅在另一個伺服器提出連線請求時才會解析。
在允許清單中,主機名稱的安全性本質上低於 IP 位址。MySQL 執行 FCrDNS 驗證,提供良好程度的保護,但可能會被某些類型的攻擊破壞。僅在絕對必要時才在允許清單中指定主機名稱,並確保用於名稱解析的所有元件(例如 DNS 伺服器)都在您的控制下維護。您也可以使用 hosts 檔案在本機實作名稱解析,以避免使用外部元件。