EC2インスタンスで起動したLinuxへウェブブラウザでマネージメントコンソール経由でSSHする方法がいくつかあります。TOP3と言っておきながら2021/08現在では3つしかないのですが、今回はそれぞれの利用シーン・制限/制約について簡単に整理したいと思います。個別の具体的な手順については別のブログで。
第1位 AWS Systems Manager Session Manager
多くの場合でSessin Mnagerが便利でしょう。IAMユーザーを利用して接続するユーザーを管理でき、実行したコマンドはS3へログとして保存されます。SSMにはVPCエンドポイントも用意されているので、プライベートなサブネットに配置したEC2でも利用できます。もしいま踏み台インスタンスを運用しているなら、Sessin Mnagerに寄せることでこれをなくすことができます。
Sessin Mnagerの利用にはSSMエージェントをインストールし、EC2インスタンスのIAMロールにSSMを利用するためのIAMポリシーを付与する必要があります。SSMエージェントはメジャーなLinuxディストリビューションにはほとんど対応しています。Amazon Linux 2とUbuntu(16.04以降)のAMIには事前にインストールされているためすぐに利用が可能です。
第2位 EC2 Instance Connect
対象のEC2インスタンスにパブリックIPが振られているなら、マネージメントコンソールからEC2 Instance Connectを利用した接続も可能です。接続リクエストはCloudTrailに履歴として残ります。事前にEC2インスタンスにEC2 Instance Connectをインストールする必要があり、EC2 Instance ConnectがサポートしているディストリビューションはAmazon Linux 2とUbuntu(16.04以降)のみです。直近のAmazon Linux 2とUbuntu 20.04のAMIにはプリインストールされているようです。
プライベートなネットワークにあるEC2インスタンスへ接続する場合は、ブラウザではなくなりますがEC2 Instance Connect CLIかSSHクライアントを使用できます。こちらの方法では公開鍵・秘密鍵を用意する必要があります。
第3位 EC2 シリアルコンソール
SSHではないですが、実はEC2インスタンスはシリアルポートへのアクセスが利用できます。これはトラブルシュートで利用するのに向いた機能です。OS側のネットワークか何かの設定でSSH接続できなくなってしまったようなときに利用します。ネットワーク周りの設定によらず接続できるのは便利です。ログインはパスワード認証となるため、事前にOSユーザにパスワードの設定をしておく必要があります。ちなみにEC2 シリアルコンソールはウェブブラウザ以外ならSSHクライアントIを利用しても接続が可能です。この方法でも公開鍵・秘密鍵が必要です。
番外編
前述したとおりいくつかの方法ではプライベートなネットワークにあるインスタンスでもシェル, CLIからもアクセスできます。つまりAWSマネージメントコンソールからシェルを触れるAWSサービスであればSSHできます。もちろんもろもろの設定や準備は必要です。ひょっとするとCloudShellからプライベートなインスタンスにもアクセスできる??この検証はまた別のブログで。。。
まとめ
いかがでしたでしょうか??EC2 Instance Connectがどういう位置づけなのかいまいち理解できませんが、このようにいくつかの方法でマネージメントコンソールからSSHもしくはシリアルポートでアクセスすることができます。利用用途にあった方法を選びましょう
方法 | 利用シーン |
---|---|
AWS Systems Manager Session Manager | だいたいコレ |
EC2 Instance Connect | ??? |
EC2 シリアルコンソール | トラブルシューティング |
Yusuke Mine(書いた記事を見る)
I get drunk but it's not enough 'Cause the morning comes and you're not my baby.