伺服器執行個體可以設定為使用安全連線。如需使用 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=
。模式
當您使用
和 叢集
.addInstance()
作業時,執行個體上的 SSL 加密會根據叢集使用的設定啟用或停用。將 叢集
.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 的選項」。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 檔案在本機實作名稱解析,以避免使用外部元件。