AWS Systems Manager を使って EC2 にアクセスする

Today I Learned

AWS Systems Manager

AWS Systems Manager(SSM) は、AWS 上に構築した EC2 インスタンスなどのリソースを管理、制御できるサービスである。
この記事では、SSM のセッションマネージャーの機能を使って、キーペアを使わずに EC2 インスタンスへ接続するための設定を記載する。

セッションマネージャー機能を使うメリット

EC2 インスタンスへの接続にセッションマネージャー機能を使ったときのメリットは次のとおり。

  • キーペアを管理する必要がない
  • SSH 接続のために 22 番ポートを開ける必要がない
  • プライベートなサブネットに EC2 を構築した場合は、インターネットに晒す必要がない

前提

  • AWS CLI v1.16.12 以降 のインストールおよびプロファイルの作成
    この記事では、AWS CLI v2.1.7 で動作を確認した。

STEP1:EC2 インスタンスの作成

EC2 インスタンスを作成する。 重要なのは、次の 3 つである。

SSM Agent のインストール

EC2 の作成ウィザードで、「高度な設定」の「ユーザーデータ」欄にインストールコマンドを記載する。
インストールコマンドは、SSM Agent の利用のページで、OS イメージごとに記載されている。
なお、Amazon Linux 2 を利用する場合には、標準でインストールされているのでインストールする必要がない。

以下は、RHEL 8.x に SSM Agent をインストールする場合の入力例である。

ユーザーデータ
#!/bin/bash
sudo yum install -y https://s3.region.amazonaws.com/amazon-ssm-region/latest/linux_arm64/amazon-ssm-agent.rpm

スクリーンショット:「ユーザーデータ」の入力例

Session Manager の利用権限を付与した IAM ロールのアタッチ

EC2 の作成ウィザードで、以下のポリシーを付与した IAM ロールをインスタンスにアタッチする必要がある。

  • AmazonSSMManagedInstanceCore

プライベートサブネットに作成する場合の注意点

プライベートサブネットに作成する場合には、サブネットに次のいずれかを設定する。

設定例

この記事では、次の設定内容で EC2 インスタンスを作成した。
記載していない項目は初期値のままである。

  1. 「アプリケーションおよび OS イメージ (Amazon マシンイメージ)」で次の内容を選択する
    • OS イメージ:Amazon Linux 2 AMI
    • アーキテクチャ:64 ビット(x86)
  2. 「インスタンスタイプ」で「t2.micro」を選択する
  3. 「ネットワーク設定」の、「任意の場所からの SSH トラフィックを許可する」の選択を外す
  4. 「高度な設定」の「IAM インスタンスプロフィール」で、[新しい IAM プロファイルの作成]をクリックする
  5. 次のポリシーをアタッチした新しい IAM ロールを作成する
    • AmazonSSMManagedInstanceCore
  6. 先ほど作成した IAM ロールを選択する
  7. [インスタンスを起動]をクリックする
  8. 「キーペアなしで続行」を選択し、[キーペアなしで続行]をクリックする
  9. [インスタンスを起動]をクリックし、インスタンスを起動する

STEP2: AWS CLI 用の Session Manager プラグインのインストール

次のコマンドで、SSH 接続する端末に Session Manager プラグインをインストールする。
参考:AWS CLI 用の Session Manager プラグインをインストールする

$ 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

インストール後に、次のコマンドを実行する。インストールが成功したことを示すメッセージが表示されれば OK。

$ session-manager-plugin

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.

STEP3:セッションマネージャーで EC2 インスタンスに接続する

次のコマンドで EC2 インスタンスに接続する。
セッションが開始されたことを示すメッセージとプロンプトが表示されれば OK 。

$ aws ssm start-session --target EC2_INSTANCE_ID --profile PROFILE_NAME

Starting session with SessionId: chickp-0b12c54d8bfe987dd
sh-4.2$

whoami コマンドを実行すると、SSM 接続用の「ssm-user」というユーザーアカウントで接続されていることがわかる。

sh-4.2$ whoami
ssm-user