✍️

AWSで踏み台サーバーからプライベートサブネットのインスタンスにアクセスする手順

2024/12/27に公開

はじめに

本記事ではAWS環境でのネットワーク構成において、パブリックサブネットとプライベートサブネット間で安全にアクセスするために踏み台サーバーを使用する手法を解説します。
踏み台サーバーを介してアクセスすることでよりセキュアにサーバーに接続することができます。

本記事ではやらないこと

パブリックサブネットにEC2インスタンスを構築しSSH接続する手順は以下の記事をご覧になって実施してみてください。本記事では以下手順は実施済みとします。また、プライベートサブネット上にもサブネット以外は同様の設定で構築を行います。
https://zenn.dev/yu_shi/articles/bc6d7c48e57d45

構成図

今回の例では、パブリックサブネットとプライベートサブネットを持つVPC構成を前提に進めます。

使用端末

  • Macbook Air M1,2020
  • チップ Apple M1
  • メモリ 8GB
  • OS macOS Sonoma バージョン14.6.1

事前確認

プライベートサブネット上に構築したインスタンス(以下、インスタンスAとします)にクライアントPCから直接SSH接続ができないことを確認します。

1.インスタンスA用のセキュリティグループを作成します。
インバウンドルールにタイプ=SSH、ソース=マイIPとして設定します。


2.SSHターミナルから接続を試みます。

以下のコマンドで接続を試みますが、コマンドを実行しようとすると固まってしまい動きません。

% ssh -i "test.pem" ec2-user@1xx.xx.xx.xx


3.SSHターミナル上から踏み台インスタンスに.pemファイルを配布します。
配布にはscpコマンドを使用します。

 % scp -i test.pem test.pem ec2-user@xx.xx.xx.xx:/home/ec2-user/

The authenticity of host 'xx.xx.xx.xx (xx.xx.xx.xx)' can't be established.
ED25519 key fingerprint is SHA256:BprX0CJQvzUe8cEWlqONCPqXAjG2vqarbgRDF4pwRrw.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:13: ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'xx.xx.xx.xx' (ED25519) to the list of known hosts.
test.pem


4.配布されていることを踏み台サーバーにSSHで接続し確認します。

$ ls -l
total 4
-r--------. 1 ec2-user ec2-user 1678 Dec 27 05:28 test.pem

これで事前準備は完了です。


インスタンスAに接続

インスタンスAにクライアントPC上のSSHターミナルから接続します。
sshコマンドのオプション「-J」を使用してログインします。

1.インスタンスAのセキュリティグループを適切に設定します。
インバウンドルールを編集します。
タイプ=SSH、ソース=カスタムでソースには踏み台サーバーのセキュリティグループを設定します。


2.SSHターミナルで踏み台サーバーに接続後、インスタンスAにもSSHできるかを確認します。

% ssh -i "test.pem" ec2-user@ec2-54-199-177-120.ap-northeast-1.compute.amazonaws.com
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Fri Dec 27 08:17:46 2024 from 1.75.153.25
[ec2-user@ip-10-0-6-8 ~]$ ssh -i "test.pem" ec2-user@10.0.128.43
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Fri Dec 27 08:24:08 2024 from 10.0.6.8

無事にログインができています。


3.次に、SSH -JコマンドでローカルのSSHターミナルから直接インスタンスAに接続できることを確認します。

接続が弾かれてしまいました、、、。どうして、、、。

% ssh -i "test.pem" -J ec2-user@54.199.177.120 ec2-user@10.0.128.43                 
ec2-user@54.199.177.120: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
Connection closed by UNKNOWN port 65535

解決方法

クライアントPC側の~/.ssh/配下にconfigというファイルを作成し、以下の記述を行います。
記述する際はviなどのコマンドを使用してください。

Host bation
Hostname xx.xx.xx.xx #踏み台サーバーのIPアドレス
User ec2-user
IdentityFile /AA/BB/⚪︎⚪︎.pem #キーペアの絶対パス

Host private
Hostname xx.xx.xx.xx #インスタンスA(繋ぎたいサーバー)のIPアドレス
User ec2-user
IdentityFile /AA/BB/⚪︎⚪︎.pem #キーペアの絶対パス
ProxyCommand ssh bation -W %h:%p

設定を保存後、以下のコマンドを入力することで直接プライベートサブネットにあるインスタンスに接続することができます。

ssh private

最後に

思ったよりもJump接続に手間取ってしまいました。精進します。

おしまい。

Discussion