まえがき

cloudpack 木村(富)です。

プライベートサブネットに作成したEC2へ接続するため、踏み台サーバとしてパブリックサブネットに作成したEC2インスタンスを経由してログインすることにしました。

プライベートサブネットのEC2インスタンスにログインする方法はいくつかありますが、今回は Amazon Linux 2 を用いてパブリックサブネットの踏み台EC2インスタンスを経由した一時的なログイン方法を記載します。
踏み台EC2インスタンスを経由したプライベートサブネットのEC2インスタンス環境に数回ログインするだけなどに便利かと思います。

内容

パブリックサブネットのEC2インスタンス:踏み台サーバ Amazon Linux 2
プライベートサブネットのEC2インスタンス:ログインサーバ Amazon Linux 2

パブリックサブネットのEC2インスタンスからプライベートサブネットのEC2インスタンスへSSHログインする。

VPCにてパブリックサブネットとプライベートサブネットを作成し、EC2インスタンスを各サブネットに設定してください。

以下参考例です。
※検証環境を想定しているためアベイラビリティゾーン(AZ)の数を[ 1 ]にしています。

<VPC設定>
・作成するリソース:VPCなど
・名前タグの自動生成:任意に記載してください
・アベイラビリティゾーン (AZ) の数:1
・パブリックサブネットの数:1
・プライベートサブネットの数:1
・NAT ゲートウェイ:なし
・VPC エンドポイント:なし

前提

  • 以降手順のパブリックサブネットのEC2をパブリックインスタンス 、プライベートサブネットのEC2をプライベートインスタンス と記述します。
    • キーペアをパブリックインスタンスとプライベートインスタンスとで分けています。
    • キーペア(秘密鍵)をローカル環境(自PC)にダウンロードして権限を変更します。7

パブリックインスタンスキーペア(秘密鍵):iretmedia-public.pem
プライベートインスタンスキーペア(秘密鍵):iretmedia-private.pem

chmod 600 iretmedia-public.pem
chmod 600 iretmedia-private.pem

手順

1.パブリックインスタンスにログインしてみる

パブリックインスタンスのパブリックIPアドレスとパブリックインスタンスキーペア(秘密鍵)を使用してログインします。

ssh -i [パブリックインスタンス作成時に作成したキーペアを指定] ec2-user@[パブリックインスタンスのパブリックIPアドレス]
※以下例
ssh -i iretmedia-public.pem ec2-user@52.198.xxx.xxx

2.ローカルにあるプライベートインスタンス用のキーペア(iretmedia-private.pem)をパブリックインスタンスに置く

パブリックインスタンスにログインしていたらログアウトしてローカル環境の状態にしてください。

  • scpコマンドを使用してパブリックインスタンスのログインユーザーのホームディレクトリ直下に置いています。
scp -i [パブリックインスタンス作成時に作成したキーペアを指定] [プライベートインスタンス作成時に作成したキーペアを指定] ec2-user@[パブリックインスタンスのパブリックIPアドレス]:~/
※以下例
scp -i iretmedia-public.pem iretmedia-private.pem ec2-user@52.198.xxx.xxx:~/

パブリックインスタンスの[ /home/ec2-user ]直下に[ iretmedia-private.pem ]があれば問題ありません。

3.プライベートインスタンスのセキュリティグループ(SG)にパブリックインスタンスの.プライベートIPアドレスを追加する

  • プライベートインスタンスのSGにパブリックインスタンスのプライベートIPアドレスを追加します。
    • この設定をしないとパブリックインスタンスから.プライベートインスタンスにログインできません。
    • パブリックインスタンスのプライベートIPアドレスは停止/起動でIPアドレスは変更されませんのでそのまま使用可能です。

4.パブリックインスタンスからプライベートインスタンスにログインする

  • 上記手順[ 1.パブリックインスタンスにログインしてみる]より、パブリックインスタンスにログインする。
    • パブリックインスタンスからプライベートインスタンスのプライベートIPアドレスを用いてログインする
※パブリックインスタンスにログイン直後(/home/ec2-user)の状態から以下のコマンド入力
ssh -i [プライベートインスタンス作成時に作成したキーペアを指定] ec2-user@[プライベートインスタンスのプライベートIPアドレス]
※以下例
ssh -i iretmedia-private.pem ec2-user@10.0.xxx.xxx
  • 以下のようになっていればプライベートインスタンスにログインしています。
[ec2-user@ip-[プライベートインスタンスのプライベートIPアドレス] ~]$

ローカル環境からパブリックインスタンスを経由してプライベートインスタンスにSSHログインする

  • ローカル環境からプライベートインスタンスにSSHログインするため、ローカル環境にパブリックインスタンスとプライベートインスタンスの2つのキーペア(秘密鍵)が必要になります。
パブリックインスタンス:iretmedia-public.pem
プライベートインスタンス:iretmedia-private.pem
ssh -o ProxyCommand='ssh -i [パブリックインスタンス作成時に作成したキーペアを指定] -W %h:%p ec2-user@[パブリックインスタンスのパブリックIPアドレス]' -i [プライベートインスタンス作成時に作成したキーペアを指定] ec2-user@[プライベートインスタンスのプライベートIPアドレス]
※以下例
ssh -o ProxyCommand='ssh -i iretmedia-public.pem -W %h:%p ec2-user@52.198.xxx.xxx' -i iretmedia-private.pem ec2-user@10.0.xxx.xxx
  • 以下のようになっていればプライベートインスタンスにログインしています。
[ec2-user@ip-[プライベートインスタンスのプライベートIPアドレス] ~]$

まとめ

パブリックインスタンスのパブリックIP、プライベートIP、プライベートインスタンスのプライベートIPなど本記事を記載しているときもややこしくなっておりました。
本記事にてなるべく正確に把握できるようにと思い記述いたしました。
理解の一助になれば幸いです。

その他

プライベートサブネットへのSSHログインは他にもございます。
機会があれば別途作成したいと思います。