ポートトンネリングを使用して、ネットワーク要塞を介してプライベートデータベースインスタンスに接続するにはどうすればよいですか?


12

私はパブリックにアクセスできるネットワーク要塞とexample.compute-1.amazonaws.comプライベートのpostgresデータベースインスタンスを持っていますpostgres.example.us-east-1.rds.amazonaws.com:5432

を使用して要塞にsshできます

$ ssh -i key.pem ec2-user@example.compute-1.amazonaws.com

次に、要塞に着いたら、次のようにsshトンネルを作成します。

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

次に、localhostを使用して要塞からデータベースに接続することにより、トンネルが機能することを確認できます。

$ psql -p 5432 -h localhost -U postgres

ただし、データベースにリモートで接続することはできません(要塞にいることなく)。

$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres
psql: could not connect to server: Connection refused
Is the server running on host "example.compute-1.amazonaws.com" () and accepting
TCP/IP connections on port 5432?

要塞のセキュリティグループを、ポート5432で受信トラフィックを受け入れるように構成しました。

ssh -L正しく使用していますか?要塞の外で使用する必要がありますか?どんなアドバイスも大歓迎です。

回答:


20

SSHトンネルを作成すると、開いたポートは外部に公開されません。開かれたポートは、としてのみ利用可能ですlocalhost。あなたが行ったことは、要塞から要塞へのトンネルを作成することです。

代わりに、ローカルコンピューターから要塞を経由してトンネルを作成します。

そのため、ローカルコンピューターから要塞への接続の一部としてトンネルを作成します。別のSSH接続を作成する必要はありません。

したがって、ローカルでは、次を実行します。

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

postgres.example.us-east-1.rds.amazonaws.comがプライベートIPアドレスに解決されると仮定します。

次に、ローカルにあるサーバーに接続するには、サーバーがローカルであるかのように接続します。

$ psql -p 5432 -h localhost -U postgres

これを行うと、要塞でプロンプトを使用する必要はありません。


これは私のために働いた、ありがとう!psqlコマンドを実行した人が忘れてしまったことの1つは、dbセキュリティグループが要塞からのアクセスを許可していることを確認してください。
ゴラン

-1

これは私のために働いた。psqlクライアントがローカルにインストールされていることを確認してください。

psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName

AWSでdbインスタンスを作成するときは、必ず以下を定義してください。

  1. ユーザー名
  2. パスワード
  3. データベース名
  4. ポート番号

また、データベースが配置されているVPCのセキュリティグループを作成する必要がありました。作成後、dbインスタンスがセキュリティグループにこれを使用していることを確認してください。セキュリティグループには次のルールがあります。

inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0

outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0

しかし、それは要塞を経由してはいませんよね?RDSに直接接続しているだけです
-RhysC

rdsインスタンスが公開されるvpcを通過します。作成時にvpcをrdsインスタンスにアタッチします。
-timxor

ええ、元の質問はVPCの要塞サーバーを経由することに関するものだったので、RDSインスタンスは公開されていません(それは私がそれを読む方法です)
-RhysC

それは質問ではなく、あなたの答えは問題の解決にまったく役立ちません。
ラドコディネフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.