AWS Systems Manager を使って EC2 にアクセスする
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 のインストール
- Session Manager の利用権限を付与した IAM ロールのアタッチ
- プライベートサブネットに作成する場合には、サブネットに次のいずれかを設定
- NAT Gateway の利用
- VPC エンドポイントの作成
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
プライベートサブネットに作成する場合の注意点
プライベートサブネットに作成する場合には、サブネットに次のいずれかを設定する。
- 方法1:NAT Gateway の利用
- 方法2:VPC エンドポイントの作成
作成する VPC エンドポイントの詳細は、次のページを参照のこと。
Systems Manager を使用してインターネットアクセスなしでプライベート EC2 インスタンスを管理できるように、VPC エンドポイントを作成するにはどうすればよいですか?
設定例
この記事では、次の設定内容で EC2 インスタンスを作成した。
記載していない項目は初期値のままである。
- 「アプリケーションおよび OS イメージ (Amazon マシンイメージ)」で次の内容を選択する
- OS イメージ:Amazon Linux 2 AMI
- アーキテクチャ:64 ビット(x86)
- 「インスタンスタイプ」で「t2.micro」を選択する
- 「ネットワーク設定」の、「任意の場所からの SSH トラフィックを許可する」の選択を外す
- 「高度な設定」の「IAM インスタンスプロフィール」で、[新しい IAM プロファイルの作成]をクリックする
- 次のポリシーをアタッチした新しい IAM ロールを作成する
AmazonSSMManagedInstanceCore
- 先ほど作成した IAM ロールを選択する
- [インスタンスを起動]をクリックする
- 「キーペアなしで続行」を選択し、[キーペアなしで続行]をクリックする
- [インスタンスを起動]をクリックし、インスタンスを起動する
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