LoginSignup
2
1

【AWSまとめ】プライベートサブネットのEC2に、ローカルからEC2 instance connect endpointを使ってSSH接続する

Last updated at Posted at 2024-02-22

踏み台サーバーじゃなくて、EC2 instance connect endpointを使ってプライベートサブネットのEC2にSSH接続する。

最近まで、セキュリティの側面から、パブリックサブネットに所謂、踏み台サーバー(EC2)を置いて、その踏み台サーバーを経由してプライベートサブネットの配置した計算用サーバー(EC2)にアクセスしていました。
この手法は、確かにセキュアなのですが、同時に二つのサーバーを稼働させる必要がありコストがかかります。そこで、踏み台サーバーを使わないEC2 instance connect endpointを使ってプライベートサブネットにSSH接続する方法についての複数の情報源をもとにして、ここでまとめてみます。

構造イメージ

image.png

VPCのリソース構成

image.png

やること

1. セキュリティグループを作る
2. EC2 instance connect endpointを作る
3. EC2を作る
4. AWS CLIをインストールする
5. SSH接続してみる
6. 【追記】 VSCodeからプライベートサブネットのEC2インスタンスにSSH接続する

1.セキュリティグループを作る

まずEC2 instance connect endpointのセキュリティグループを設定します。こちらのセキュリティグループのインバウンドルールでは、使用中の環境からのSSH接続を許可する。一方で、アウトバウンドルールでは、プライベートサブネットに配置されたEC2に紐づいたセキュリティグループを送信先とします。

・インバウンドルール
image.png

・アウトバウンドルール
image.png

〇 次に、プライベートサブネットに紐づいたセキュリティグループを設定します。こちらのセキュリティグループのインバウンドルールでは、EC2 instance connect endpointに紐づいたセキュリティグループを許可する。一方のアウトバウンドルールでは、すべてのトラフィックを許可する。
※すべてのトラフィックを許可するのはセキュリティ上よくないので警告がでます。本来は、NATgatewayにセキュリティグループを紐づけて、そのセキュリティグループを送信先にした方がいいです。

・インバウンドルール
image.png

・アウトバウンドルール
image.png

2.EC2 instance connect endpointを作る

作成方法は、以下のサイトを参照してください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/create-ec2-instance-connect-endpoints.html#describe-eice

・サービスカテゴリは、「EC2インスタンス接続エンドポイント」を選択してください。
image.png

・VPCを選択したら、セキュリティグループは、さっき作ったEC2 instance connect endpoit用のセキュリティグループにチェックを入れる。
image.png

・サブネットは、Public Subnetを選択する。
image.png

3.EC2を作る

EC2の作り方いろいろなところで紹介されていると思いますので、コンソール上の曽さは、そちらを参照してみてください。
※ただし、基本的なことなのですが、SSH接続する時に秘密鍵が必要なことと、セキュリティグループは、上で作ったプライベートサブネットに配置されたEC2用のセキュリティグループを指定する。あと、もちろん、サブネットはプライベートサブネットを指定してください。

〇EC2をつくったらコンソール上の[接続]からインスタンスコネクトエンドポイントしてみます。

・EC2インスタンスのダッシュボード画面で、作成したEC2にチェックを入れて[接続]を押します。

image.png

・画面が移動したら以下の設定をして、右下の[接続]を押してください。

image.png

・するとコマンドラインの画面が現れます!

image.png

4.AWS CLIをインストールする

コンソール上での設定は、あらかた終わりましたので、いよいよローカル環境からのSSH接続をやってみます。

注意したいこと

私は、このAWS CLIのインストールを忘れてて、ずっとSSH接続できない、というトラブルにはまってました。参考にしたサイトで紹介されていた方法では、このAWS CLIのインストールが省略されていたからです。多分、あまりにも基本的な準備なので分かっている前提だったんだと思います。でも、正直忘れやすい部分だと思います。エラーメッセージからも、AWS CLIのインストール忘れを連想しにくいので、なおさらです。
 あと、アクセスキーシークレットアクセスID の生成もお忘れなきように、AWS CLI の使用に必要です。

〇 AWS CLIのインストールは以下のサイトの方法に従ってできます。

  • 今回は、windows環境でやっていきます。
    image.png

  • AWS CLIのインストールが終わったら、

 aws --version

を実行して、バージョン情報がでたら、完了です。

image.png

  • aws configureによって、ユーザーを認識を行ってください。
aws configure

以下のように、アクセスキー、シークレットアクセスIDを打ち込んでいってください。

AWS Access Key ID [****************FPXI]:
AWS Secret Access Key [****************/y7R]:
Default region name [ap-northeast-1]:
Default output format [json]:

以上でAWS CLI関連はOKです。

5.SSH接続してみる

コマンドプロンプトで、以下のコマンドを実行します。

ssh -i 秘密鍵のパス ubuntu@EC2インスタンスのID -o ProxyCommand="aws.exeのパス ec2-instance-connect open-tunnel --instance-id %h"

以下が、私の環境のコマンドです。

ssh -i GORIN.pem ubuntu@i-0a508e8f2f0eea205 -o ProxyCommand="C:\Program Files\Amazon\AWSCLIV2\aws.exe ec2-instance-connect open-tunnel --instance-id %h"

すると、SSH接続できて、EC2インスタンス内のコマンドラインの画面に推移できます。

image.png

[補足] NAT Gatewayの設置をお忘れずに!!

以上までの操作で、NAT gatewayの設置部分のデモンストレーションを載せていませんでした。
NATgatewayは、EC2インスタンスからの出ていく通信のみを可能するものです。
設置時には、ElasticIPを割り当て必ず! パブリックサブネットに配置してください。さらにNatGateway設置後は、private subnetが紐づいているPrivate route tableのルート編集をしてください。下の画像のように、ターゲットをNATGatewayにします。

image.png

これで、Private subnetに配置されたEC2インスタンスから、通信をインターネットに出すことができます。これをしないと、パッケージのインストールができないので、sudo apt-get updateとかをやってもインターネットにアクセスできないのでエラーがでます。

おわり

以上の操作で、踏み台サーバーを使わずにPrivate sunbetのEC2インスタンスに接続できるようになります。特に、AWS CLIの部分は、要注意です。aws.exeの配架場所とか、秘密鍵のパスとか、インスタンスIDが正しいかどうか、エラーの原因となりがとだった気がします!
NatGatewayのところは、詳しい設置操作は、別の参考情報をご参照ください。

6. 追記 VSCodeからプライベートサブネットのEC2インスタンスにSSH接続する。

続けて、VSCodeを使って、プライベートサブネットのEC2インスタンスにSSH接続する場合はの設定方法は、以下のリンク先をご参照ください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1