Amazon Web Services ブログ
AWS Systems Manager Session Managerでポートフォワーディングを使用してリモートホストに接続する
このブログは「Use port forwarding in AWS Systems Manager Session Manager to connect to remote hosts」を翻訳したものです。
ローカルマシンからリモートホストのポートにコネクションを転送できる AWS Systems Manager Session Manager の新機能が発表されました。これによりユーザーは踏み台ホストをセットアップしたり、外部ネットワークへのポートを追加で開いたりすることなく、プライベートネットワーク内のリモートサーバー (データベース、Web サーバーなど) に安全に接続して管理できます。この記事では、Session Manager のこの新機能を使用し、リモートホストへのポートフォワーディングを設定する例を紹介します。
AWS Systems Manager Session Managerについて
AWS Systems Manager Session Managerはフルマネージド型の Systems Managerの機能です。 Session Manager を使用することでインスタンス、エッジデバイス、オンプレミスのサーバー、仮想マシン (VM) に接続して管理できます。Session Manager ではワンクリックで開始可能なブラウザベースの対話型シェル、または AWS Command Line Interface (AWS CLI) を使用できます。
シナリオ
ローカルマシンでグラフィカルツール (SQL Workbench/J など) を使用して、 Amazon Virtual Private Cloud (Amazon VPC) 内のサブネット内にある (MySQL) インスタンスを管理しようとしています。(図 1) これを実行するには通常 TCP ポート 3306 を開いてインターネット経由でこのデータベースに接続できるようにする必要がありますが、これはセキュリティの観点からはベストプラクティスではありません。代わりに踏み台ホストをセットアップしてすべてのツールをインストールすることもできますが、セットアップと保守に多くの作業が必要になります。次のセクションでは、Session Manager の「ポートフォワーディング」を使用して、踏み台ホストを設定する手間なく、ローカルマシンからリモート MySQL データベースに接続する方法を紹介します。
前提条件
AWS CLIを使用して、AWS Systems Manager Session Managerのセッションを起動できます。この記事では CLI を使用します。
- AWS CLI が、Systems Manager へのアクセスを許可する適切な権限セットで、ローカルマシン上にセットアップされ、設定されている。詳細な手順については、AWS CLI の最新バージョンのインストールまたは更新を参照してください。
- 同じサブネット内、またはリモートデータベースホストとのネットワーク接続性がある Systems Manager マネージドインスタンス (Amazon EC2 またはオンプレミス) がある。
- データベースインスタンスがリモートで管理可能である。つまり関連付けられたセキュリティグループまたはファイアウォールがリモート接続をブロックしていないことを確認してください。
- 特定のオペレーティングシステム用の AWS CLI 用の Session Manager プラグインがインストールされている。
- SQL Workbench/J(または他の使い慣れたクライアントツール)がローカルマシンにインストールされ、設定済みである。
ステップ 1: インスタンスのセットアップと確認
ローカルマシンから Systems Manager マネージドインスタンスに接続できることを確認します。好みのターミナルプログラム (putty 、または Mac ターミナルなど) を開き、次のコマンドを入力します。 ssm-managed-instance-id を Systems Manager マネージドインスタンスの EC2 インスタンス ID に置き換えます。
aws ssm start-session --target <ssm-managed-instance-id>
接続に成功すれば、確認は完了です。接続を閉じて、次のステップに進みます。
ステップ 2: MySQL サーバーのリモートポートへのコネクション転送セッションを開く
このステップでは、Session Manager セッションを再実行します。今回はリモートデータベースサーバーへのコネクション転送セッションを開始する Systems Manager ドキュメントを実行します。ターミナルで次のコマンドを入力し、 ssm-managed-instance-id と remote-database-host-name をセットアップに基づく対応する値に置き換えます。
注: この例では、ローカルポート 1053 を使用していますが、別のローカルポートを選択することもできます。
aws ssm start-session --target <ssm-managed-instance-id> --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"portNumber":["3306"],"localPortNumber":["1053"],"host":["remote-database-host-name"]}'
この演習が終わるまで、これを実行したままにしておいてください。
ステップ 3: (オプション) コネクションの転送が動作していることを確認する
新しいターミナルウィンドウで次のコマンドを実行すると、コネクションの転送が動作していることを確認できます。これによりCLI セッションを介してデータベースに接続できます。
mysql -h 127.0.0.1 --port 1053 -u admin -p
ステップ 4: SQL Workbench/J を使用して接続する
ローカルマシンで SQL Workbench/J を起動します。このデータベースの接続プロファイルが既にある場合は、それを使用できます。それ以外の場合はデータベースに固有の接続パラメーター (ユーザー名、パスワードなど) に基づいて新しい接続プロファイルを作成します。データベースのリモート IP アドレスまたはホスト名を使用する代わりに、URL フィールドでローカルホストの IP アドレスを使用してください。
Jdbc:mysql://127.0.0.1:1053/<database-name>
「OK」を押すと、リモートデータベースに接続されます。
このブログの翻訳はソリューションアーキテクトの辻林 侑が担当しました。原文はこちらです。