1. ホーム
  2. 記事一覧
  3. セッションマネージャーを使用して、キーペアなしでEC2インスタンスへアクセスしてみた

2023.07.10

セッションマネージャーを使用して、キーペアなしでEC2インスタンスへアクセスしてみた

こちらの記事では、AWS Systems Managerの一部の機能であるSession Managerを利用して、EC2インスタンスへキーペアなしでアクセスするまでの方法を解説します。

どうしてセッションマネージャーでEC2アクセスするのか?

Session Managerを使用することで、セキュリティグループのSSH接続用の22番ポートの開放が必要なくなり、アクセス履歴をCloud Trailへ保存できるようになるなどのメリットがあり、セキュリティ面においてより堅牢に運用することが可能です。

AWSが公開しているEC2インスタンスにアクセスするベストプラクティスとしても、Session Managerについて触れられています。

AWS公式

AWS Systems Managerとは

AWS Systems Managerとは、EC2を中心とするAWS環境の運用や、オンプレミス環境の運用を効率化する機能が多数提供されているサービスになります。このサービスを上手に使いこなすことで、日々必要とされる維持、運用作業を効率化することができます。

AWS Systems Managerは略称として「SSM」と表記されることがあります。これには理由があり、AWS Systems Managerとなる以前のサービス名がAmazon Simple Systems Manager(SSM)、Amazon EC2 Systems Manager(SSM)となっていたため、その名残りであると言われています。

AWS Systems Managerの特徴

Session Manager

Session Managerは、AWS Systems Managerが提供する機能のうちの一つで、Webブラウザ(マネジメントコンソール)やAWS CLIからインスタンスへのコマンド操作を実現する機能になります。

Session Managerを使用することで、Amazon EC2インスタンスの他、エッジデバイス、オンプレミスサーバー、仮想マシン (VM)を管理することができます。

Session Managerの公式ドキュメントには、以下のように記載されています。

Session Managerは安全かつ監査可能なノード管理を実現し、インバウンドポートを開いたり、踏み台ホストを維持したり、SSHキーの管理をしたりする必要はありません。

AWS Systems Manager Session Managerより引用

インバウンドポートを開く、つまりSSH接続するための設定で必要なセキュリティグループでの22番ポート解放や、SSH接続をする際に必要なキーペアの作成が不要になるとの説明が書かれています。

今回の記事では実際にこの設定を試してみて、本当に22番ポートの解放、キーペアの作成が必要無いのかを検証していきます。

Session Managerを使用する際に必要なこと

Session Managerを使用してEC2インスタンスへアクセスするには、以下の3つの条件が必要になります。

  • EC2インスタンスにSSMエージェントがインストールされていること
  • EC2インスタンス用のIAMロールを作成すること
  • EC2インスタンスに作成したIAMロールをアタッチすること

この3つの条件をEC2インスタンスに設定することで、EC2インスタンスはマネージドノードと呼ばれるSSMで管理できる状態になります。

EC2インスタンスにSSMエージェントがインストールされていること

SSMエージェントとは、AWSリージョンごとに存在するSSMのリージョンエンドポイントと呼ばれる場所へ定期的な問い合わせ(ポーリング)を実行する、AWSが提供するミドルウェアです。このSSMエージェントがポーリングを行うことで、SSMエージェントがSSMからのコマンド実行などの指示を受け付けます。

通常、問い合わせ先となるSSMのリージョンエンドポイント(Systems Manager APIなど)はインターネット上に存在するため、EC2インスタンスにInternet Gatewayを経由したアウトバウンド通信を許可しておく必要があります。

例外としてVPCエンドポイントと呼ばれる機能を使うことで、インターネットを経由せずにVPC内のリソースとVPC外のリソースを接続することも可能です。

SSMエージェントのインストールの必要性

SSMエージェントに関しては、今回使用するAmazon Linux2にはプリインストールされているためインストールの必要はありません。2023年6月現在の公式ドキュメントでは、以下のAMIにはプリインストールされています。

これ以外のAMIを使用する場合には、SSMエージェントをインスタンスへインストールする必要があるので注意が必要です。

  • 2017 年 9 月以降の Amazon Linux Base AMI
  • Amazon Linux 2
  • Amazon Linux 2 ECS に最適化されたベース AMIs
  • Amazon Linux 2023 (AL2023)
  • Amazon EKS 最適化 Amazon Linux AMIs
  • macOS 10.14.x (Mojave)、10.15.x (Catalina)、11.x (Big Sur)
  • SUSE Linux Enterprise Server(SLES) 12 と 15
  • Ubuntu Server 16.04、18.04、および 20.04
  • 2016 年 11 月以降に公開された Windows Server 2008-2012 R2 AMIs
  • Windows Server 2016、2019、および 2022

EC2インスタンス用のIAMロールを作成する

EC2インスタンスがSSMと通信するためには、AmazonSSMManagedInstanceCoreというポリシーをアタッチしたIAMロールを作成し、IAMロールをEC2へアタッチする必要があります。

Session Managerを使用してEC2へアクセス

ここからは、EC2インスタンスをキーペアを作成せずに起動し、マネジメントコンソールからSSMを利用してインスタンスへ接続できるのかを試してみます。

キーペアを作成せずにEC2インスタンスを作成する

マネジメントコンソールより、EC2ダッシュボードへ移動します。

インスタンスを起動を選択します。

名前とタグはテスト用でssm-ec2としました。

AMIはAmazon Linux2を使用します。

キーペアは「なしで続行」を選択します。これにより、キーペアを使用してのEC2インスタンスへのログインは不可能です。

そして、セキュリティグループの設定で、「SSHトラフィックを許可する」のチェックを外し、22番ポートを解放しないように設定します。

ここまでの設定が完了した後、インスタンスを作成します。

インスタンスの状態が「実行中」になればEC2の起動完了です。

IAMロールの作成

続いて、Session ManagerでEC2へアクセスするために必要なIAMロールを作成します。

IAMのダッシュボードへ遷移します。

ダッシュボードの左側、ナビゲーションよりロールを選択します。

画像の「ロールを作成」をクリックします。

「信頼されたエンティティタイプはAWSのサービスを、ユースケースはEC2を選択し次へ進みます。

許可ポリシーの検索窓へ「ssmmanaged」と入力しエンターを押すと、AmazonSSMManagedInstanceCoreが表示されるため、チェックを入れて次へ進みます。

任意の名前でロール名を入力します。

下へスクロールし、許可ポリシーにAmazonSSMManagedInstanceCoreが追加されていることを確認し、ロールを作成します。

画面上部に以下の画面が表示されればIAMロールの作成完了です。

EC2インスタンスにIAMロールをアタッチする

作成したIAMロールをEC2インスタンスへアタッチします。

EC2インスタンス画面より作成したインスタンスを選択し、アクションタブより「セキュリティ」を選択し、「IAMロールを変更」をクリックします。

「IAMロールを選択」をクリックすると、先ほど作成したロールが表示されるため選択し、「IAMロールの更新」をクリックします。

インスタンスの詳細タブより、IAMロールがアタッチされたことが確認できればアタッチ完了です。

Session ManagerでEC2へアクセスしてみる

作成したインスタンスをチェックした状態で、「接続」をクリックします。

セッションマネージャーを選択し、「接続」をクリックします。

この時、「接続」ボタンがクリックできない場合は、若干時間を置いてリロードする必要があります。

接続が完了すると、ブラウザの別タブでターミナルが開きます。通常のSSH接続であればec2-userでログインしますが、Session ManagerでEC2に接続した場合にはssm-userで接続していることに注意しましょう。

この場合、接続後のカレントディレクトリは/usr/binになっています。

これで、セキュリティグループの22番ポートを解放することなく、キーペアを使用せずにEC2インスタンスへ接続することができました。

まとめ

今回は、AWS Systems Managerの一部の機能であるSession Managerを利用して、EC2インスタンスへキーペアなしでアクセスするまでの方法を解説しました。

Session Managerを使用してEC2インスタンスへ接続するための条件として、

  • EC2インスタンスにSSMエージェントがインストールされていること
  • EC2インスタンス用のIAMロールを作成すること
  • EC2インスタンスに作成したIAMロールをアタッチすること

この3つの条件があることを忘れずに、より堅牢な運用を目指していきましょう。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事