AWSセッションマネージャーでEC2にSSH接続する


概要

AWS EC2に対してSSHでのログインを行う際に、踏み台サーバからのログイン・直接SSH接続などのオンプレライクな接続方法が今更ながらイケてないなと感じ、セッションマネージャー(SSM)を用いたインスタンスへのログインを試してみました。

他の先人の方々の記事を参考に試してみたという自分用メモですので特に目新しい記事にはなっておりません。

そもそもセッションマネージャーとは

セッションマネージャーとはなんぞやというあたり、またその利点については詳しく書いてあるリンク貼っておきます。

AWS Systems Manager (SSM) を やってみよう
セッションマネージャー越しにSSHアクセスすると何が嬉しいのか

要するに、SSMの機能の一部の「セッションマネージャー」とやらを使うと、以下のような利点がありますよと言うことです。(と理解しています)

  • 踏み台サーバが不要
  • IAMで認証・認可できる
  • SSH用のインバウンド設定する必要無い

設定手順

手順についても他の方の記事等参考にさせていただきました。

初めてのAWS Session Manager(SSM)
EC2インスタンスにWindowsとMacからセッションマネージャーを利用して接続してみた

IAMロール作成

SSMを利用するためのIAMロールを作成します。

  1. 「IAMロール」 > 「ロールの作成」

  2. 「AmazonEC2RoleforSSM」を選択 > ロール名等指定して作成

インスタンス作成

SSH接続対象のインスタンスを作成します。

  1. 「EC2」 > 「インスタンスを起動」 > 先程作成したIAMロールを付与

クライアント端末(Mac)の設定

aws-cli はインストール済み、また設定も完了していることを前提とします。ここでは Session Manager plugin のインストール方法のみ記載します。(cli の設定等は 設定手順に貼ったリンク参照)

bash
$ cd /tmp
$ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
$ unzip sessionmanager-bundle.zip
$ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

接続

aws-cli を用いてセッションマネージャー経由で作成したインスタンスにログインを行います。

bash
$ aws ssm start-session --target <インスタンスID>

感想

踏み台とか余計な設定とかなくなってラッキー
セッション履歴をS3に保存できるみたいでそういった管理もうまくできそう。
以下の点が未検証なので確認したいと思っています。

  • インスタンス作成時に登録した認証鍵を持っていないユーザでも適切なIAMさえあればログイン可能なのか
    • AWS公式ドキュメント に書いてありました。そもそも鍵の管理をしなくても接続できるということも利点の一つですね。
  • グローバルIPのないEC2(プライベートサブネット内のEC2)に対してのセッションマネージャーを用いたSSH方法
    • こちらの記事 にあるようにplivatelinkを用いた方法で実現できるようです