スキップしてコンテンツを表示

SSH トンネルを使用して Amazon VPC の外部から Amazon DocumentDB クラスターに接続する方法を教えてください。

所要時間3分
0

Amazon Virtual Private Cloud (Amazon VPC) にデプロイされている Amazon DocumentDB (MongoDB 互換) クラスターにアクセスしたいと考えています。SSH トンネルを使用して Amazon VPC の外部からクラスターにアクセスしたいと考えています。

簡単な説明

SSH トンネルを使用してローカルマシンから Amazon DocumentDB クラスターにトラフィックを転送するには、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを踏み台またはジャンプホストとして使用します。踏み台ホストは、ローカルマシンから 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 をデータベースのマスターパスワードに置き換えてください。

詳細については、「Connect using Amazon EC2」(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 をDB クラスターエンドポイントに置き換えてください。**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 は、ローカル (クライアント) ホストのポートをバインドして、リモートホストのホストポートにトラフィックを転送します。
  • 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 ウェブサイトの「リモートホスト上の配置への接続」を参照してください。

重要な考慮事項

以下の考慮事項を確認してください。

  • MongoDB Compass や Studio 3T など、一部の GUI クライアントには SSH トンネルオプションがあります。これらのクライアントを使用する場合、MongoDB CLI で SSH トンネルを手動で作成して管理する必要はありません。代わりに、SSH トンネル設定を GUI クライアントの接続設定に保存します。詳細については、特定の GUI クライアントのマニュアルを参照してください。
  • SSL/TLS ホスト名の検証をバイパスする必要がある場合は、--tlsAllowInvalidHostnames パラメータを使用して SSH トンネル経由で接続してください。接続文字列のホスト名 mongodb://localhost:27017 が、Amazon DocumentDB クラスターサーバー証明書にあるホスト名と一致しません。Amazon DocumentDB クラスターエンドポイントを使用してクラスターに直接接続する場合、--tlsAllowInvalidHostnames パラメータを使用する必要はありません。
  • MongoDB Compass や Studio 3T などの GUI クライアントでは、tlsAllowInvalidHostnames=true のように接続文字列に tlsAllowInvalidHostnames オプションを指定します。または、[SSL/TLS] タブの接続設定で [**無効なホスト名を許可**] オプションを有効にします。
  • SSH トンネルを使用して接続する場合、クラスターエンドポイントに接続するのがベストプラクティスです。接続文字列に replicaSet=rs0 を指定すると、エラーが発生する可能性があります。SSH トンネルに MongoDB Compass を使用する場合は、直接接続を有効にしてレプリカセット接続をオフにします。詳細については、MongoDB ウェブサイトの「一般接続タブ」を参照してください。

関連情報

Connecting to an Amazon DocumentDB cluster from outside an Amazon VPC (Amazon VPC の外部から Amazon DocumentDB クラスターに接続する)

MongoDB ウェブサイトの MongoDB Compass とは?

AWS公式更新しました 5ヶ月前
コメントはありません

関連するコンテンツ