Amazon EC2インスタンスへの接続方法をもう一度見てみる
皆さんこんにちは。まるとです。
個人的に気になったのでAmazon EC2 インスタンスへの接続方法について、改めて見ていきたいと思います。
接続方法について
上記の画像の通り、インスタンスへの接続方法は以下のように複数あります。
- EC2 Instance Connect
- EC2 Instance Connect
- EC2 Instance Connect エンドポイント
- セッションマネージャー
- SSH クライアント
- EC2 シリアルコンソール
せっかくなのでそれぞれの特徴を見ていきます。
EC2 Instance Connect
EC2 Instance Connect
まずは定番のEC2 Instance Connectです。
特徴としては接続する側・される側両方でパブリックIPを使用してインスタンスに接続するため、Amazon EC2 インスタンス自体にパブリックIPが付与されている必要があります。
以下はイメージ図です。
この方法を使用する場合はAWSマネジメントコンソール、または、AWS CLIを使用します。
AWSマネジメントコンソール上の場合...
AWS CLIの場合...
aws ec2-instance-connect ssh --connection-type direct --instance-id <インスタンスID>
最初に説明した通り、本方式を使用するにはAmazon EC2 インスタンス自体にパブリックIPが付与されている必要があります。
そのため、プライベートサブネット等に配置したAmazon EC2 インスタンスやパブリックIPを持たない場合は、この後説明する「EC2 Instance Connect エンドポイント」を使用します。
EC2 Instance Connect エンドポイント
続いて、プライベートIPを使用して接続する「EC2 Instance Connect エンドポイント」を使用する方法について説明します。
EC2 Instance Connect エンドポイントはセキュリティ寄りの学習型カンファレンス、AWS re:Inforce 2023で発表された割と最近のサービスです。
これを使用することで、プライベートサブネットに配置したパブリックIPを持たないAmazon EC2 インスタンスでも、踏み台インスタンスなどを配置することなく、安全に接続することができます。
やってみた記事もありますので、よろしければ合わせてお読みください。
接続方法は接続タイプとEC2 Instance Connectエンドポイントを指定するのみで、あとはEC2 Instance Connectとほぼ同じでかなりシンプルです。
AWS CLIの場合は--connection-type eice
を指定してあげます。デフォルト値でもあるauto
を使用しても問題ないですが、将来的に動作が変更になる可能性が0ではないので、明示的に指定します。
aws ec2-instance-connect ssh --connection-type eice --instance-id <インスタンスID>
セッションマネージャー
続いて、AWS Systems Managerを用いた接続方法です。
AWS Systems ManagerはAmazon EC2 インスタンスなどのリソースを一元管理などが行えるサービスです。
様々な機能がありますが、今回はリモートアクセスなどを提供するセッションマネージャーに焦点を当てていきます。
セッションマネージャーの特徴としてはAWS公式ドキュメントのユーザガイドにも記載がありますが、大きなものだと
- IAMポリシーを使用してアクセス制御
- インバウンドポートを開いたり、踏み台ホスト・SSHキーの管理が不要
- 接続ログやコマンド実行ログなどを取得可能
- etc...
があります。
参考
簡単にですが、構成図は以下のようになります。(上がパブリックサブネットの場合、下がプライベートサブネットの場合)
なお、セッションマネージャーを使用するには以下の要件を満たす必要があります。
- SSM エージェントがインストールされていること(Amazon Linux 2023では最初からインストールされています)
- AWS Systems Managerへのアクセス権があること(Amazon EC2 インスタンスのIAMロールが適切に設定されていること)
- AWS Systems Managerエンドポイントへのアウトバウンドアクセスが許可されている
設定までの過程は以下の記事でも紹介しています。
AWSマネジメントコンソールから接続する場合は「接続」を押下するのみで接続できます。
AWS CLIの場合、Session Manager Pluginのインストールが必要となります。
プラグインのインストール後は以下のコマンドで接続できます。
aws ssm start-session --target <インスタンスID>
なお、AWS Systems Managerのセッション履歴などからいつセッションを開始したのかが確認できます。
また、セッションログをS3などに保存するようにすることで、コマンド履歴なども取得できるようになります。
SSH クライアント
リモートアクセスの定番ですね。SSHクライアントからAmazon EC2 インスタンスに直接接続する方法です。
事前に指定したキーペアを用いて接続を行います。
EC2 シリアルコンソール
最後にEC2 シリアルコンソールを見ていきます。
これまではSSHなどをベースとした接続でしたが、EC2 シリアルコンソールではディスプレイ、マウス、キーボードなどを直接シリアルポートに接続したような形になります。
SSHなどによる接続だとOSのブート画面などは通常確認することができませんが、シリアルポートに接続しているためOSの再起動時でもセッションが切れず、ブートメッセージなども確認できます。
なお、EC2 シリアルコンソールによる接続を行うには、AWS Nitro System上に構築されたインスタンスタイプを使用する必要があります。
その他の要件としては、IAMユーザ/IAMロールにシリアルコンソールを経由したアクセス許可cがあることです。
実際にシリアルコンソールに接続した状態でAmazon EC2 インスタンスの再起動を行うと以下の画像のようにブートメッセージを見ることができます。
例えば、意図せずネットワークの設定を削除して、ネットワークから隔離された場合、EC2 シリアルコンソールを使用することでAmazon EC2 インスタンスに直接ディスプレイ、マウス、キーボードを接続した状態になるので、EBSボリュームを別のAmazon EC2 インスタンスにマウントして...ということをしなくても対処することができます。
ただ、どちらかといえばトラブルシューティング向けかつ利用可能なインスタンスタイプが限られるため、使うシーンはある程度定まってくるのではないかと思います。
終わりに
今回は改めて接続方式をおさらいしてみました。
特にEC2 シリアルコンソールは今まで触ったことがなく、使い方だったり仕組みを学ぶことができて、まとめながら「こうなっているのか〜」など新たな知見を得ることができました。
簡単にではございますが、少しでも皆様のお役に立つことができたら幸いです。
参考文献