跳至內容

如何使用 SSH 通道,從 Amazon VPC 外部連線到我的 Amazon DocumentDB 叢集?

3 分的閱讀內容
0

我想要存取部署在 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon DocumentDB (with MongoDB compatibility) 叢集。我想要使用 SSH 通道,從 Amazon VPC 外部存取叢集。

簡短說明

若要使用 SSH 通道將流量從本機轉送到 Amazon DocumentDB 叢集,請使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體作為堡壘主機或跳板主機。堡壘主機會作為 Proxy,將流量從本機轉送到 Amazon DocumentDB 叢集。

解決方法

以下解決方法使用 EC2 執行個體作為堡壘主機。堡壘主機使用 MongoDB 命令列介面 (CLI) 用戶端,透過 SSH 通道從本機連線到 Amazon DocumentDB 叢集。

先決條件:

確認可從 Amazon EC2 堡壘主機存取 Amazon DocumentDB 叢集

使用私有金鑰對,透過 SSH 從本機連線到堡壘主機:

ssh -i path_to_pem_file instance-user-name@instance-public-dns-name

**注意:**將 path_to_pem_file 替換為 .pem 金鑰檔案的路徑。將 instance-user-name 替換為執行個體的使用者名稱。將 instance-public-dns-name 替換為執行個體的公共 DNS 名稱或 IP 位址。

如需更多資訊,請參閱使用 SSH 用戶端連線到 Linux 執行個體

若要驗證您的叢集,請下載適用於 Amazon DocumentDB 的憑證認證機構 (CA) 憑證:

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

使用 MongoDB CLI 用戶端連線到 Amazon DocumentDB 叢集:

mongo --tls --host cluster-endpoint --tlsCAFile global-bundle.pem --username primary-username --password master-password

**注意:**將 cluster-endpoint 替換為您的 DocumentDB 叢集端點。將 primary-username 替換為您的資料庫主要使用者名稱。將 primary-password 替換為您的資料庫主要密碼。

如需更多資訊,請參閱使用 Amazon EC2 連線

設定 SSH 通道

在您驗證可從堡壘主機連線到叢集之後,請設定 SSH 通道。

若要設定從本機到堡壘主機的 SSH 通道,請執行與以下範例類似的命令:

ssh -i path_to_pem_file -L local-port:cluster-endpoint:remote-port instance-user-name@instance-public-dns-name -N -f

**注意:**將 path_to_pem_file 替換為 EC2 執行個體私有金鑰檔案的路徑。將 local-port 替換為您要在本機使用的連接埠號碼。將 cluster-endpoint 替換為您的資料庫叢集端點。將 remote-port 替換為遠端資料庫的連接埠號碼。

在以下範例中,SSH 通道會將本機的連接埠 27017 繫結至遠端 Amazon DocumentDB 叢集:

ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ec2-user@ec2-zz-aaa-yyy-zzz.compute-1.amazonaws.com -N -f

前述範例命令會使用以下命令列選項:

  • i identity_file,使用執行個體的私有金鑰對 (.pem 檔案) 進行驗證。
  • L port:host:hostport,繫結本機 (用戶端) 主機上的連接埠,以便將流量轉送到遠端主機的 hostport。
  • N,不執行遠端命令。這只在您轉送連接埠時有用。
  • f,讓 SSH 在背景執行。

若要驗證 SSH 通道是否在背景執行,請執行與以下範例類似的命令。

**注意:**將 local-port 替換為您的連接埠號碼。

Linux 和 macOS:

lsof -P | grep -i "listen" | grep local-port

Windows:

netstat -abn | findstr "LISTEN" | findstr local-port

**注意:**您必須是管理員使用者,才能在 Windows 上執行前述命令。

若要確認本機主機是否在本機連接埠 27017 接聽,請執行以下命令:

nc -zv 127.0.0.1 27017

檢閱輸出。若已成功建立 SSH 通道,則您會看到與以下範例類似的輸出:

❯ lsof -P | grep -i "listen" | grep 27017ssh 52787 user 7u IPv4 0x1256bbb543454447 0t0 TCP localhost:27017 (LISTEN)
❯ netstat -abn | findstr "LISTEN" | findstr 27017TCP 127.0.0.1:27017 0.0.0.0:0 LISTENING
❯ nc -zv 127.0.0.1 27017Connection to 127.0.0.1 port 27017 [tcp/*] succeeded!

前述範例使用連接埠 27017。

從本機連線到 Amazon DocumentDB 叢集

使用 MongoDB Shell 或 GUI 用戶端,從本機連線到 Amazon DocumentDB 叢集。

**注意:**在您啟動連線之前,請在本機下載適用於 Amazon DocumentDB 的 CA 憑證。

若要使用 MongoDB Shell 連線到 Amazon DocumentDB 叢集,請執行以下命令:

mongo --tls --tlsAllowInvalidHostnames --tlsCAFile global-bundle.pem --username primary-username --password primary-password

**注意:**將 primary-username 替換為您的資料庫使用者名稱。將 primary-password 替換為您的資料庫密碼。

前述範例命令不會明確指定 --host--port 參數。當您未指定 --host--port 參數時,MongoDB Shell 會嘗試連線到您電腦的本機主機和本機連接埠 2701。SSH 通道接著會將連線轉送到 Amazon DocumentDB 叢集端點。

當您在本機使用 27017 以外的連接埠時,請使用 --port 參數明確指定自訂連接埠。如需更多資訊,請參閱 MongoDB 網站上的連線到遠端主機上的部署

重要考量事項

請檢閱以下考量事項:

  • 有些 GUI 用戶端具有 SSH 通道選項,例如 MongoDB Compass 或 Studio 3T。當您使用這些用戶端時,您不需要使用 MongoDB CLI 手動建立及管理 SSH 通道。請改為將 SSH 通道組態儲存在 GUI 用戶端的連線設定中。如需更多資訊,請參閱特定 GUI 用戶端的文件。
  • 當您需要略過 SSL/TLS 主機名稱驗證時,請使用 --tlsAllowInvalidHostnames 參數透過 SSH 通道連線。連線字串中的主機名稱 mongodb://localhost:27017,與 Amazon DocumentDB 叢集伺服器憑證中的主機名稱不相符。如果您使用 Amazon DocumentDB 叢集端點直接連線到叢集,則不需要使用 --tlsAllowInvalidHostnames 參數。
  • 對於 MongoDB Compass 和 Studio 3T 這類 GUI 用戶端,請在連線字串中指定 tlsAllowInvalidHostnames 選項,即 tlsAllowInvalidHostnames=true。或者,在 SSL/TLS 索引標籤中的連線設定裡啟用 **Allow Invalid Hostnames** (允許無效的主機名稱) 選項。
  • 當您使用 SSH 通道連線時,最佳實務是連線到叢集端點。如果您在連線字串中指定 replicaSet=rs0,則可能會發生錯誤。當您將 MongoDB Compass 用於 SSH 通道時,請啟用 Direct Connection 以關閉複本集連線。如需更多資訊,請參閱 MongoDB 網站上的一般連線索引標籤

相關資訊

從 Amazon VPC 外部連線到 Amazon DocumentDB 叢集

MongoDB 網站上的什麼是 MongoDB Compass?

AWS 官方已更新 5 個月前