はじめに
Qiitaでの初投稿です。
EC2 Instance Connectを調べる機会があったのでまとめてみました。
EC2 Instance Connectとは
EC2 Instance Connectとは、ざっくり言うとEC2に簡単に、安全にSSH接続できるサービスという感じ。
- IAMによる接続制御ができる
- マネジメントコンソールから接続できる
- CloudTrailで接続リクエストを監査できる
が大きな利点でしょうか。
対応しているOSは現在、AmazonLinux2とUbuntu 16.04以降のみ対応。
Instance ConnectでSSH接続する方法は大きく分けて以下の2つがあります。
1. マネジメントコンソールから接続
上にも書いた通り、マネジメントコンソールからSSH接続ができ、IAMロールによって接続制御ができます。
ただし注意点として、2019年7月現在、接続するEC2のキーペア発行が必須。
使わないのになぜ。。
2. CLIから接続
任意のSSHクライアントで接続できます。
こちらの場合、接続する際にInstanceConnectのAPIが1回限り(しかも60秒間だけ)有効な公開鍵が生成されるため、セキュリティを強化できます。
こちらはキーペアなしで接続できるため、キーペアの管理が不要になります。
ただし、キーペアを発行したインスタンスへの接続はこの方法ではできないみたいなので、EC2 Instance ConnectをコンソールからCLIからとどちらも行うのは無理っぽい。
セッションマネージャーとの違い
マネジメントコンソールからSSHできるって、セッションマネージャーと何が違うのって思った方も多いのではないですかね。私も思いました。
そもそも、セッションマネージャーで接続した場合、ログイン状態ではないんですよね。
なので、接続時に**.bashrc
が読み込まれない**ということがデメリットでもあります。
また、EC2 Instance Connectで接続を行う際はネットワーク経由での接続となるため、EC2はパブリックサブネットに配置し、パブリックIPを割り当てる必要があります。
それに対してセッションマネージャーでは、PrivateLinkを経由させることでプライベートサブネットに配置したEC2にも接続が可能になります。
さらに、セッションマネージャーではセッション操作ログをS3またはCloudWatchLogsに出力することができるため、実行コマンドや出力結果をAWS上にログとして簡単に保存することができるというのもメリットです。(ただし、OS自体にログは残らない)
まとめると
####セッションマネージャー
- プライベートサブネットに配置したEC2に接続可能
- 操作ログをAWS上に簡単に取得できる(OSにログは残らない)
- 接続時、ログイン状態ではない
EC2 Instance Connect
- パブリックサブネットにインスタンスを配置し、セキュリティグループとIAMによる接続制御が必要
- 1回限りの公開鍵が生成され、接続できる
- CloudTrailに接続記録が残る(操作ログはAWS上には残らない)
どちらもメリット・デメリットがあるため、状況に応じて使い分けてください。
セキュリティグループの設定
上のまとめでちらっと書きましたが、EC2 Instance Connectの接続制御は、セキュリティグループでも制御する必要があります。
マネジメントコンソールでの接続の場合、ユーザーのリージョンからのSSHを許可する必要があります。結構大きく開ける必要があるので注意してください。
リージョンのIPはここから確認できます。(2019年7月現在東京リージョンのIPは3.112.23.0/29
)
CLIから接続する場合、接続元のIPからのアクセスのみ許可すればOKです。
最後に
本当は使い方まで書きたかったんですが、特徴書いてみると結構あったので次回に回します。
使ってみると、Instance Connectもっと使いやすくなればな、という印象でしたが、やはり鍵の管理が不要になるのは便利ですし、IAMでのSSH制御等、新たな価値観が作られて行くようで個人的にとても面白かったです。今後のアップデートにも期待です。
今回、こちらのサイトを参考にさせていただきました。
Amazon EC2 Instance Connect のご紹介
Connect Using EC2 Instance Connect
EC2 Instance Connect の特徴や注意点についてまとめてみる