web-dev-qa-db-ja.com

SQLクライアントを使用して(VPCにデプロイされた)AWS RDSデータベースに接続するにはどうすればよいですか?

AWSを初めて使用し、RDSインスタンスをセットアップして初期化しようとしています。私は新しく作成したアカウントを持っているので、EC2-Classicをサポートしていません。これは(私の理解から)、RDSインスタンスmustがVPCのプライベートサブネットにデプロイされることを意味します。ただし、RDSインスタンスを作成した後、外部の世界からそれに接続するにはどうすればよいですか? VPCのパブリックサブネットから接続できることを理解しているので、アプリケーションサーバーはDBを問題なく使用できます。しかし、言いたいことは、スキーマを初期化するためにSquirrelや他のGUIクライアントを起動したり、アプリケーションの成長に応じて列やテーブルを追加したりできることです。プライベートサブネットに住む必要がある場合、どうすればいいですか?

5
matt forsythe

1つの解決策(ただし、唯一の解決策ではありません!)は、要塞ホストと呼ばれるものを使用することです。要塞ホストは、パブリックサブネットにある超低電力サーバーであり、インバウンドSSH接続を許可する唯一のサーバーです。

このサーバーは完全に強化する必要があります。パラノイアのレベルによっては、このサーバーがSSH接続をリッスンしているという事実を隠すために使用できるいくつかの手法があります。たとえば、 http://www.portknocking.org/view/details を参照してください。もちろん、RDSインスタンスに接続するためだけに強化する必要はありません。

とにかく、次のようにEC2セキュリティグループルールを設定できます。

  • 要塞ホストセキュリティグループは、ローカルIPからのみポート22を許可します(そのため、SSHを実行できますが、他のユーザーは実行できません)
  • RDSセキュリティグループは、要塞ホストからのポートX(データベースによって異なります)での受信データベース接続のみを許可します

ところで、要塞ホストのプライベートIPアドレスを指定するか、要塞ホストが使用するセキュリティグループ名をリストすることにより、「要塞ホストからのみ」を実現できます。

ここから2つのオプションがあります。

オプション#1:SSH接続の一部としてローカルポート転送を設定します

たとえば、OS XまたはLinuxを使用している場合は、要塞ホストにSSH接続し、次のコマンドでローカルポート転送を設定します。

_ssh -l <bastion-Host-username> -L <local-port-you-connect-to>:<rds-private-ip>:<rds:listening-port> <bastion-Host-public-ip>
_

そして、Ubuntuベースの要塞ホストからPostgresに接続しているとしましょう。次のようになります。

_ssh -l ubuntu -L 5432:<rds-private-ip>:5432 <bastion-Host-public-ip>
_

ローカルマシンはポート_5432_でリッスンしており、それらの接続のいずれかを_<bastion-Host-public-ip>_に転送し、次に_5432_上のポート_<rds-private-ip>_に転送します

オプション#2:データベースクライアントでこの機能を探します

DBVisualizerがこれをサポートしていることを知っています。リスはわかりません。基本的に、SSHを使用してローカルポート転送を手動で設定する代わりに、SQLクライアントがこれを処理します。

10
Josh Padnick

これでうまくいきました。 psql client がローカルにインストールされていることを確認してください。

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

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

  1. username
  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
0
timxor