Amazon EC2 インスタンスを踏み台ホストとして使用して、ローカルマシンからプライベート Amazon RDS DB インスタンスに接続するにはどうすればよいですか?
最終更新日: 2022 年 3 月 29 日
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを踏み台 (ジャンプ) ホストとして使用して、ローカルマシンからプライベート Amazon Relational Database Service (Amazon RDS) DB インスタンスに接続するにはどうすればよいですか?
簡単な説明
EC2 インスタンスをジャンプサーバーとして使用して、ローカルマシンからプライベート RDS DB インスタンスに接続するには、以下の手順を実行します。
- EC2 インスタンスを起動して設定し、インスタンスのネットワーク設定を行います。
- RDS DB インスタンスのセキュリティグループを設定します。
- ローカルマシンから RDS DB インスタンスに接続します。
重要: プライベート Amazon RDS または Amazon Aurora DB インスタンスに接続するには、VPN または AWS Direct Connect を使用することがベストプラクティスです。VPN または Direct Connect を使用できない場合は、要塞ホストを使用してください。次の設定例では、セキュリティグループを使用してアクセスを制限しています。ただし、サブネットのネットワークアクセスコントロールリスト (ネットワーク ACL) を制限して、接続のセキュリティを強化することもできます。また、0.0.0.0/0 ではなく、より小さい範囲を使用するようにインターネットゲートウェイのルートスコープを制限することも可能です。たとえば、インターネットゲートウェイを追加するときに、送信先のルーティングテーブルに必要な CIDR 範囲のみを追加できます。詳細については、ルーティングオプションの例を参照してください。
解決方法
以下の設定例は、Amazon Virtual Private Cloud (Amazon VPC) にある Amazon RDS for MySQL インスタンスの設定例です。インスタンスには EC2 インスタンス用のセキュリティグループが設定されています。
EC2 インスタンスを起動して設定する
- Amazon EC2 コンソールを開き、[インスタンスの作成] を選択します。
- Amazon マシンイメージ (AMI) を選択します。
- インスタンスタイプを選択してから、[次のステップ: インスタンスの詳細の設定] を選択します。
- [ネットワーク] には、RDS DB インスタンスが使用する VPC を選択します。
- [サブネット] には、ルーティングテーブルにインターネットゲートウェイがあるサブネットを選択します。インターネットゲートウェイがまだない場合は、EC2 インスタンスの作成後にサブネットに追加できます。
- [次のステップ: ストレージの追加] を選択し、必要に応じてストレージを変更します。
- [次のステップ: タグの追加] を選択し、必要に応じてタグを追加します。
- [次のステップ: セキュリティグループの設定] を選択し、[ルールの追加] を選択して以下を入力します。
タイプ: カスタム TCP ルール
プロトコル: TCP
ポート範囲: 22
送信元: ローカルマシンの IP アドレスを入力します。送信元 IP アドレスはデフォルトですべてに開放されていますが、ローカルパブリック IP アドレスのみにアクセスを制限できます。 - [確認と作成] を選択します。
- [作成] を選択します。
RDS DB インスタンスのセキュリティグループを設定する
- Amazon RDS コンソールを開き、ナビゲーションペインから [データベース] を選択します。
- RDS DB インスタンスの名前を選択します。インスタンスが作成されていない場合は、RDS DB インスタンスを作成します。
- [Connectivity & security] (接続とセキュリティ) タブを選択します。
- [Security] (セキュリティ) セクションで、[VPC security groups] (VPC セキュリティグループ) の下にあるリンクを選択します。
- セキュリティグループを選択し、[アクション] を選択してから [インバウンドのルールの編集] を選択します。
- [ルールの追加] を選択し、以下を入力します。
タイプ: カスタム TCP ルール
プロトコル: TCP
ポート範囲: RDS DB インスタンスのポートを入力します
送信元: EC2 インスタンスのプライベート IP アドレスを入力します - [保存] を選択します。
このセキュリティグループ設定により、EC2 インスタンスのプライベート IP アドレスからのトラフィックが許可されます。EC2 インスタンスと RDS DB インスタンスが同じ VPC を使用する場合、RDS DB インスタンスのルートテーブルを変更する必要はありません。VPC が異なる場合は、VPC ピアリング接続を作成してこれらの VPC 間における接続を許可します。
ローカルマシンから RDS DB インスタンスに接続する
RDS DB インスタンスに接続するステップは、使用するクライアントに応じて異なります。詳細については、Amazon RDS DB インスタンスへの接続を参照してください。MySQL を使用する場合は、クライアントアプリケーションと Amazon RDS 間の接続の暗号化に SSL を使用することがベストプラクティスです。
次の例では、MySQL Workbench クライアントを使用して踏み台ホストに接続します。
- 新しい接続を開始し、[Connection Method] に [Standard TCP/IP over SSH] を選択します。
- SSH 設定について EC2 インスタンスに関する以下の詳細情報を入力します。
SSH Hostname: EC2 インスタンスのパブリック DNS 名を入力します。
SSH Username: EC2 インスタンスのユーザー名を入力します。たとえば、「ec2-user」は EC2 Linux マシンのユーザー名です。
SSH Key File: EC2 インスタンスの作成時に使用されたプライベートキーを選択します。 - MySQL インスタンスの設定について以下の詳細情報を入力します。
[MySQL Hostname]: RDS DB インスタンスのエンドポイントを入力します。
[MySQL Server port] (MySQL Server ポート): 3306 (または使用するカスタムポート) を入力します。
Username: RDS DB インスタンスのマスターユーザー名を入力します。
Password: RDS DB インスタンスのマスターパスワードを入力します。 - [Test Connection] を選択します。
- 正常に接続できたら、接続名を入力し、接続を保存します。
SSH トンネルを使用してローカル MySQL クライアントからプライベート RDS インスタンスに接続するには、次のコマンドを参照してください。
Linux または macOS:
以下のコマンドを実行します。
ssh -N -L 3336:127.0.0.1:3306 [user]@[server_ip]
mysql -u MYSQL_USER -p -h 127.0.0.1
注: user、server_ip、および mysql_user を、ご自身の情報に置き換えてください。
Windows PowerShell の場合:
ssh -i "<filename>.pem" <user_name>@<EC2_Endpoint> -L <Port_number>:<RDS_Endpoint>:<Port_number> -N
注: filename と username を、ご自身の情報に置き換えてください。EC2_Endpoint、port_number、RDS_Ednpoint、および Port_number を、ご利用の RDS インスタンスの情報に置き換えます。