可以將伺服器執行個體設定為使用安全連線。如需有關搭配 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 檔案在本機實作名稱解析,以避免使用外部元件。