クラウド上のデータベースに接続する際、セキュリティを保ちつつ接続するにはいくつかの工夫が必要です。
本記事では、AWSが提供するDocumentDBに、EC2を経由して、自宅などのローカル環境から安全に接続する方法を、失敗例も交えて詳しく解説します。
なぜEC2を経由する必要があるのか?
DocumentDBはプライベートネットワーク上に構築されるため、基本的にインターネットから直接アクセスすることはできません。
これにより、外部からの不正アクセスを防ぐことができます。
その代わり、AWS内部のEC2を中継地点(踏み台サーバーとも呼びます)として利用し、トンネル接続(ポートフォワーディング)を行うことで、安全にアクセスすることができます。
準備するもの
- AWSに作成済みのDocumentDBクラスター
- 同じ仮想ネットワーク(VPC)内にあるEC2インスタンス
- EC2への接続鍵ファイル(.pem)
- ローカルの端末(LinuxやMacなど)
- mongosh(MongoDB用の接続コマンドツール)
EC2からの接続確認
まずは、EC2インスタンスにリモート接続して、そこからDocumentDBに直接接続できることを確認します。
ssh -i /パス/to/秘密鍵.pem ec2-user@EC2のグローバルIPアドレス
接続後、以下のようなコマンドで接続を試みます。
mongosh --host DocumentDBのエンドポイント:27017 --ssl --username ユーザー名 --password パスワード --authenticationDatabase admin
この段階で正常に接続できれば、EC2からDocumentDBへの接続設定は完了です。
ローカル環境から接続する方法
次に、ローカル端末からトンネルを開き、EC2を中継してDocumentDBに接続する方法を紹介します。
SSHトンネルの作成
以下のコマンドで、ローカル環境からEC2を経由したトンネル接続を開始します。
ssh -i /パス/to/秘密鍵.pem -L 27017:DocumentDBのエンドポイント:27017 ec2-user@EC2のグローバルIPアドレス
このコマンドの意味は次のとおりです。
-L 27017:...: ローカルの27017番ポートを、EC2を通してDocumentDBのポートに転送するという意味です。ec2-user@...: EC2への接続先
このコマンドを実行中は、そのターミナルは閉じないでください。
トンネルが閉じてしまうと接続できなくなります。
mongoshでローカル接続を試みる
別のターミナルを開き、今度はローカルのmongoshを使って接続を行います。
mongosh --host localhost:27017 --ssl --username ユーザー名 --password パスワード --authenticationDatabase admin
ここで重要なのは、接続先ホスト名が「localhost」になっている点です。
これは、先ほどのトンネル設定により、ローカルの27017番ポートが実質的にDocumentDBへの入口になっているためです。
よくあるエラーと対処法
エラー: MongoServerSelectionError: Server selection timed out after 30000 ms
このエラーが出る場合、以下の点を確認してください。
- トンネル接続が正しく開かれているか?
- DocumentDBのエンドポイントとポート番号が間違っていないか?
- セキュリティグループにより、EC2→DocumentDBの通信が許可されているか?
mongoshが証明書の警告などで止まっていないか?
mongoshが古いバージョンだと、TLS1.2以降の接続に失敗することがあります。
最新版にアップグレードして試してみてください。
設定の確認ポイント
- EC2とDocumentDBが同じVPC内にあるか?
- DocumentDBが属するサブネットグループに、EC2がアクセスできるか?
- EC2のセキュリティグループに、SSH(ポート22)の許可があるか?
- DocumentDBのセキュリティグループに、EC2からの27017番ポートアクセスを許可しているか?
まとめ
本記事では、AWS上のDocumentDBに対して、ローカル環境からEC2を中継して安全に接続する方法をステップバイステップで紹介しました。
直接インターネットからアクセスできないクラウドデータベースに接続するには、トンネル接続が非常に有効な手段です。また、セキュリティや構成の見直しも必須であり、EC2やセキュリティグループの設定が意図通りに動いているかを都度確認することが、トラブル回避のポイントです。
この記事が、現場で実務をこなすシステムエンジニアの皆さんの一助となれば幸いです。
今後も、実際に詰まったところから解決するノウハウを中心に、より実践的な内容を発信していきます。


コメント