Systems Manager 経由で SSH トンネルを使用してプライベート VPC リソースにアクセスするにはどうすればよいですか?
AWS Systems Manager 経由の SSH トンネルを使用してプライベートの Amazon Virtual Private Cloud (Amazon VPC) リソースにアクセスしたいと考えています。
簡単な説明
SSH トンネリング (または SSH ポート転送) は、暗号化された SSH 接続を介してデータを転送するための方法です。SSH トンネルを使用すると、安全なチャネルを介してリモートマシンにローカルポートへの接続を転送できます。SSH トンネルは、Session Manager を使用して作成します。Session Manager とは、リモートホストにポート転送を使用できる AWS Systems Manager の機能です。この機能は SSM エージェントバージョン 3.1.1374.0 以降で利用できます。ポート転送は、以下の手順の代替的な手段となります。詳細については、「セッションの開始 (リモートホストへのポート転送)」を参照してください。
Session Manager は、Systems Manager インフラスを使用して、SSH に似たインスタンスでのセッションを作成します。Session Manager は実際の SSH 接続をトンネリングし、ローカルマシンから直接に Amazon VPC 内の別のリソースにトンネリングすることを可能にします。作成済みのマネージドインスタンスは、AWS リソースへの踏み台ホストまたはゲートウェイとして機能します。
この構成の利点は次のとおりです。
- セキュリティの強化: この設定は 1 つの Amazon Elastic Compute Cloud (Amazon EC2) インスタンス (踏み台ホスト) を使用し、アウトバウンドポート 443 を Systems Manager インフラストラクチャに接続します。これにより、インバウンド接続しなくても Session Manager を使用できます。踏み台ホストとして機能するインスタンスからのインバウンドトラフィックのみをローカルリソースが許可することが必須となります。これにより、インバウンドルールをパブリックに開く必要性を排除します。
- 使いやすさ: プライベート VPC のリソースに、ローカルマシンから直接アクセスします。
**注:**ターミナルまたは単一のポート転送で EC2 インスタンスにアクセスする方法については、「Session Manager のセットアップ」を参照してください。
前提条件
次の前提条件を作成します。
- Session Manager の前提条件を満たしてください。
- AWS コマンドラインインターフェイス (AWS CLI) 用の Session Manager プラグインをインストールします。
- Session Manager を介した SSH 接続を許可して、 SSH 接続要件を満たしします。
**注:**SSH 機能を使用するには、以下がインストールされている必要があります。
- SSM エージェント v2.3.672.0 以降
- ローカルマシン内の Session Manager プラグイン v1.1.23 以降
- ローカルマシン内の AWS CLI v1.16.12 以降
解決策
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
Session Manager を使用して SSH トンネルを開始するには、次の手順を実行してください。
1. 以下のコマンドを実行して SSH トンネルを開始します。
ssh -i /path/my-key-pair.pem username@instance-id -L localport:targethost:destport
2. 以下のコマンドを実行して、作成されたターゲットポート内でトンネルへのアクセスをテストします。
telnet 127.0.0.1 localport
前の例では、127.0.0.1 とローカルポートは、targethost:destport にアクセスするように変換されます。
設定例: ローカルマシンから MySQL データベースへのトンネルを、SSM ホストを踏み台ホストとして使用することで作成する
MySQL データベースにアクセスできるようにするためのローカルマシンからのトンネルを作成します。データベースは EC2 インスタンスで実行することが必要であり、また、SSM ホストを踏み台ホストとして使用する必要があります。
使用されたリソース
instance1: 踏み台ホストとして機能するとともに AWS Systems Manager によって管理される EC2 インスタンス
Hostname = ec2-198-51-100-1.compute-1.amazonaws.com, Instance id = i-0123456789abcdefa
instance2: デフォルトのポート 3306 内で MySQL データベースを実行している EC2 インスタンス
Hostname = ec2-198-51-100-2.compute-1.amazonaws.com
1. ローカルマシン (ノートパソコンなど) の、以下の SSH コマンドを実行して instance1 に接続します。このコマンドは、Session Manager を基礎とする SSH を使用し、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 が、instance1 からのトラフィックを許可する必要があります。instance2 内に存在するすべてのセキュリティグループ、ネットワークアクセス制御リスト (ネットワーク ACL)、セキュリティルール、およびサードパーティによるセキュリティソフトウェアがこれに含まれます。以前の例では、instance2 は instance1 からのポート 3306 アクセスを許可する必要があります。
設定例: 単一の SSH 接続を使用することでトンネルを作成して、MySQL データベースと Web サーバーインスタンスにアクセスする
ローカルマシンから単一の SSH 接続で 3 つのトンネルを作成し、以下のことを行います。
- instance1 の SSH ポートに接続する
- RDS instanceの MySQL データベースにアクセスする
- instance3 のウェブサーバーにアクセスする
使用されたリソース
instance1: 踏み台ホストとして機能するとともに AWS Systems Manager によって管理される EC2 インスタンス
Hostname = ec2-198-51-100-1.compute-1.amazonaws.com, Instance id = i-0123456789abcdefa
RDS instance: プライベートサブネットにある MySQL RDS インスタンス
Hostname = DBinstanceidentifier.abcdefg12345.region.rds.amazonaws.com
instance3: プライベートサブネットにある EC2 インスタンス
Hostname = 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 instance のデータベースにアクセスします。ローカルポート 9090 は、RDS instance のポート 3306 にトンネリングします。MySQL ワークベンチの GUI を使用して、hostname である 127.0.0.1、ポートである 9090 を介して DB サーバーにアクセスします。または、シェルのコマンドプロンプトで次のコマンドを実行します。
mysql -u user -h 127.0.0.1 -P 9090 -p password
4. instance3 内で Web サイトにアクセスするには、ローカルマシンからブラウザーを開き、Web サイトに移ります。
http://127.0.0.1:9091
**重要:**RDS instance と instance3 に存在するセキュリティグループ、network ACL、セキュリティルール、またはサードパーティ製セキュリティソフトウェアは、instance1 からのトラフィックを許可する必要があります。以前の例では、instance3 は instance1 からのポート 80 アクセスを許可する必要があります。
関連情報
インターネットゲートウェイを使用しない場合の Session Manager によるコンフィギュレーション設定の自動化
session-manager-without-igw (GitHub ウェブサイト内で)
使用したい GUI を使用して、Amazon RDS または Amazon EC2 データベースインスタンスにリモートで安全に接続することができます。
インターネットにアクセスしなくても、Systems Manager を使用し、プライベート EC2 インスタンスを管理できるようにVPC エンドポイントを作成するにはどうすればよいですか?
関連するコンテンツ
- 質問済み 2ヶ月前lg...
- 質問済み 1年前lg...