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 データベースに接続する方法を紹介します。

] Image showing overall solution architecture. On the left hand side, we show a client opening up SSH session to a Systems Manager managed instance. The SSM is forwarding port 1053 on localhost to TCP port 3306 on remote SQL server

図 1: プライベートネットワーク上にあるリモートホストに接続するための全体的なソリューション

前提条件

AWS CLIを使用して、AWS Systems Manager Session Managerのセッションを起動できます。この記事では CLI を使用します。

ステップ 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-idremote-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>

A screenshot from 'SQL Workbench' showing 'Connection Profile' window with the relevant fields filled out. These fields include Driver, URL, Username, and Password

図 2: SQL Workbench – 接続プロファイル

「OK」を押すと、リモートデータベースに接続されます。

A screenshot from 'SQL Workbench/J' showing the SQL query and subsequent results in the bottom section resulting from running that query indicating the success connection

図 3: SQL Workbench でのクエリ結果

このブログの翻訳はソリューションアーキテクトの辻林 侑が担当しました。原文はこちらです。

筆者について

Faraz Rehman

Faraz Rehman は、サンフランシスコ ベイエリアを拠点とする AWS のシニアソリューションアーキテクトです。過去数年間、彼は ISV のお客様が AWS でビジネスクリティカルな本番規模のワークロードを構築および運用するのを支援することに注力してきました。彼はクラウドの運用、管理、およびガバナンスの専門知識を有しています。