本記事はリンクアンドモチベーションAdventCalendar2024の13日目の記事です。
はじめに
こんにちは!リンクアンドモチベーションでSREをしている井川と申します。
本記事は、AWSのプライベートサブネットのEC2にSSH接続を試した際の学びをまとめたものです。
今回は「プライベートサブネットのEC2にSSH接続する」という具体的なGoalを設定しながら、それに必要な設定や手順を整理していきます。
また、複数の方法を試し、それぞれのメリット・デメリットについても触れるので、ぜひ最後までご覧ください。
プライベートサブネットのEC2へのSSH接続イメージ
プライベートサブネットは、インターネットから直接アクセスできないため、一度踏み台サーバーを経由する必要があります。
踏み台サーバーとは、パブリックサブネットに置く中継用のサーバーで、この踏み台サーバーにSSH接続をしてそこから改めて目的のサーバーにSSH接続をします。
ちなみに、NATゲートウェイは使わないのかという疑問を持たれるかもしれませんが、NATゲートウェイでは外部から接続できません。
というのも、NATゲートウェイはパブリックサブネットのリソースからインターネットにアクセスするためのもので、外部からのアクセスを許可していないためです。
プライベートサブネットのEC2へのSSH接続手順
手順は以下の通りです。
-
インターネットからSSH接続できるEC2をパブリックサブネットに作成する
-
踏み台サーバーからのSSH接続を許可するセキュリティグループを作成する
(パブリックサブネットに作成したEC2のプライベートipを指定する) -
上記セキュリティグループを紐付けたEC2をプライベートサブネットに作成する
しかし、上記設定では、踏み台サーバーから目的サーバーにSSH接続する際に、キーペアが見つからず接続できません。
その問題を解決する方法が2種類あります。
キーペアを踏み台サーバーに保存する方法とSSH Agent Forwardingを利用する方法です。
それぞれ方法を解説していきます。
キーペアを踏み台サーバーに保存する方法
この考え方はシンプルです。
ローカルに保存したキーペアを参照できない場合、踏み台サーバーにそのキーペアをコピーすれば良いというものです。
scpというコマンドを用いて、ローカルに保存したキーペアを踏み台サーバーにコピーします。
scp -i 踏み台サーバー用のキーペア 送信したいファイル(目的サーバー用のキーペア) ec2-user@踏み台サーバーのIPアドレス:~/.ssh
これにより、下記の通りプライベートサブネットのEC2にSSH接続できます。
まず、ローカルにあるキーペアを使って踏み台サーバーにSSH接続します。
ssh -i キーペア ec2-user@踏み台サーバーのIPアドレス
そして、踏み台サーバーにあるキーペアを使って目的サーバーへSSH接続します。
ssh -i ~/.ssh/キーペア ec2-user@目的サーバーのIPアドレス
ただし、この接続方法だと、パブリックサブネットのEC2にキーペアを保存することになるため、設定ミスや攻撃により漏洩するリスクがあります。
そのため、パブリックサブネットのEC2にキーペアを保存せずプライベートサブネットのEC2にSSH接続をする方法でも試してみます。
SSH Agent Forwardingを利用する方法
ssh-agentという秘密鍵の管理を効率化するプログラムを利用します。
まずは、今回使っているキーペアを登録します。
ssh-add xxxx.pem
そして、踏み台サーバーにSSH接続する際に-A
オプションをつけることで踏み台サーバーでssh-agentに登録されたキーペアを利用できます。
ssh -A ec2-user@踏み台サーバーのIPアドレス
その上で、踏み台サーバーから目的サーバーへSSH接続します。
オプションをつける必要はありません。
ssh ec2-user@目的サーバーのIPアドレス
まとめ
今回、踏み台サーバーを用いてプライベートサブネットのEC2にSSH接続する中で、認証のための方法が2種類あることをまとめました。
2つを比較すると、キーペアを踏み台サーバーに保存する方法が簡単ですが、セキュリティのリスクがあるため、SSH Agent Forwardingを利用する方法の方が安全に思えます。
しかし、現在はSession Managerを使った、踏み台サーバーを用いない接続方法もあるため、そちらも学んで今後の実業務に活かしていきたいと思います。