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