AWS Systems Manager 経由で SSH トンネルを使用してプライベート VPC リソースにアクセスするにはどうすればよいですか?

最終更新日: 2022 年 9 月 28 日

AWS Systems Manager 経由で SSH トンネルを使用してプライベート VPC リソースにアクセスすることを考えています。これを行うにはどうすればよいですか?

簡単な説明

SSH トンネルを作成するには、Session Manager を使用できます。Session Manager は AWS Systems Manager の機能で、リモートホストのポート転送を使用できます。この機能は SSM Agent バージョン 3.1.1374.0 以降でサポートされています。ポート転送は、以下の手順の代替手段です。リモートホストのポート転送の詳細については、「セッションを開始する」を参照してください。

Session Manager は Systems Manager インフラストラクチャを使用して、インスタンスとの SSH のようなセッションを作成します。Session Manager は実際の SSH 接続をトンネルし、ローカルマシンからVirtual Private Cloud (VPC) 内の別のリソースに直接トンネルできます。作成するマネージドインスタンスは、AWS リソースへの踏み台ホストまたはゲートウェイとして機能します。

この設定の利点は次のとおりです。

  • セキュリティの強化: この設定は、1 つの Amazon Elastic Compute Cloud (Amazon EC2) インスタンス (踏み台ホスト) だけを使用して、アウトバウンドポート 443 を Systems Manager インフラストラクチャに接続します。これにより、インバウンド接続なしで Session Manager を使用できます。ローカルリソースは、踏み台ホストとして機能しているインスタンスからのインバウンドトラフィックのみを許可する必要があります。したがって、インバウンドルールをパブリックに開く必要はありません。
  • 使いやすさ: ローカルマシンからプライベート VPC のリソースに直接アクセスできます。

注意: Systems Manager を使用して、ターミナルまたは単一のポートフォワーディングにより EC2 インスタンスにアクセスする方法については、Session Manager の設定を参照してください。

前提条件

Session Manager の前提条件を満たします

AWS コマンドラインインターフェイス (AWS CLI) 用の Session Manager プラグインをインストールします

Session Manager 経由の SSH 接続を有効にし、SSH接続要件を確認します。

注意: SSH 機能を使用するには、以下がインストールされている必要があります。

1.    SSM Agent v2.3.672.0 またはそれ以降。

2.    ローカルマシンの Session Manager プラグイン v1.1.23 以降。

3.    AWS CLI v1.16.12 以降をローカルマシンにインストールします。

解決方法

セッションマネージャーを使用して SSH トンネルを開始するには、次の手順に従います。

注意: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

1.    SSH トンネルを開始するには、次のコマンドを実行します。

ssh -i /path/my-key-pair.pem username@instance-id -L localport:targethost:destport

2.    手順 1 で作成したターゲットポートでトンネルへのアクセスをテストするには、次のコマンドを実行します。

telnet 127.0.0.1 localport

前の例では、127.0.0.1localporttargethost:destport にアクセスするように変換しています。

設定の例

シナリオ 1

SSM ホストを踏み台ホストとして使用して、EC2 インスタンスで実行されている MySQL データベースにアクセスするためのトンネルをローカルマシンから作成します。

使用するリソース

instance1: 踏み台ホストとして機能し、AWS Systems Manager によって管理される EC2 インスタンスです。

    ホスト名 = ec2-198-51-100-1.compute-1.amazonaws.com Instance id = i-0123456789abcdefa

instance2: デフォルトのポート 3306 で MySQL データベースを実行する EC2 インスタンスです。

    ホスト名 = ec2-198-51-100-2.compute-1.amazonaws.com

手順

1.    ローカルマシン (たとえばノート PC) から SSH コマンドを実行し、Session Manager ベースの SSH を使用して instance1 に接続します。このコマンドは、instance2 のポート 3306 へのトンネルを確立し、ポート 9090 のローカルマシンに表示されます。

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 9090:ec2-198-51-100-2.compute-1.amazonaws.com:3306

注意: 前の例では、ポート 9090 はローカルマシン上で使用できます。

2.    ステップ 1 で使った使用可能なポート (この例では 9090) を使用して、ローカルマシンからデータベースにアクセスします。

mysql -u user -h 127.0.0.1 -P 9090 -p password

注意: instance2 に存在するセキュリティグループネットワークアクセスコントロールリスト (ネットワーク ACL)、セキュリティルール、またはサードパーティーのセキュリティソフトウェアが、instance1 からのトラフィックを許可している必要があります。前の例では、instance2 は、instance1 からのポート 3306 のアクセスを許可する必要があります。

シナリオ 2

ローカルマシンから 1 つの SSH 接続で 3 つのトンネルを作成します。

  • instance1 の SSH ポートに接続する
  • RDS インスタンスで MySQL データベースにアクセスする
  • instance3 でウェブサーバーにアクセスする

使用するリソース

instance1: 踏み台ホストとして機能し、AWS Systems Manager によって管理される EC2 インスタンスです。

    ホスト名 = ec2-198-51-100-1.compute-1.amazonaws.com Instance id = i-0123456789abcdefa

RDS インスタンス: プライベートサブネットにある MySQL RDS インスタンスです。

    Hostname = DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com

instance3: プライベートサブネットにある EC2 インスタンスです。

    ホスト名 = ec2-198-51-100-3.compute-3.amazonaws.com

手順

1.    SSH コマンドを使用して、3 つのトンネルでセッションを開始します。

注意: コマンドには 3 つの異なるトンネルの呼び出しがあります。

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 8080:ec2-198-51-100-1.compute-1.amazonaws.com:22 -L 9090:DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com:3306 -L 9091:ec2-198-51-100-3.compute-1.amazonaws.com:80

注意: 前の例では、ポート 8080、9090、および 9091 はローカルマシン上で使用できます。

2.    ローカルマシンから instance1 へ、SSH にアクセスします。ローカルポート 8080 は、instance1 の SSH ポート (22) にトンネリングします。キーペアユーザー名は、トンネル先 (この例では instance1) のインスタンス用です。

ssh -i /path/key-pair_instance1.pem username_of_instance1@127.0.0.1 -p 8080

3.    RDS インスタンスのデータベースにアクセスします。ローカルポート 9090 は、RDS インスタンスのポート 3306 にトンネリングします。MySQL ワークベンチを使用できます。これで、GUI を使用して DB サーバーにアクセスできます。その際のホスト名は 127.0.0.1、ポートは 9090 です。または、シェルコマンドプロンプトで次のコマンドを実行します。

mysql -u user -h 127.0.0.1 -P 9090 -p password

4.    ローカルマシンから instance3 のウェブサイトにアクセスするには、ブラウザを開いてウェブサイトに移動します。

http://127.0.0.1:9091

重要: RDS インスタンスinstance3 に存在するセキュリティグループネットワーク ACL、セキュリティルール、またはサードパーティーのセキュリティソフトウェアのいずれかが instance1 からのトラフィックを許可している必要があります。前の例では、instance3instance1 からポート 80 へのアクセスを許可する必要があります。