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