#はじめに
LightsailにSSMエージェントを入れてセッションマネージャーで接続できるようにしてみました。
ちょっとつまづいたところもあったのでそこら辺の流れも一緒に記載してます。
環境
一応、今回対応した環境情報を記載しておきます。
AWS:Lightsail
インスタンスイメージ:Redmine Bitnami 認定 4.0.5
OS:Ubuntu 16.04.6 LTS
IAMサービスロールの作成
まずは以下の内容で信頼ポリシーを作成しテキストファイルに保存します。ファイル保存時は、必ずファイル拡張子 (.json) を付けることを忘れずに。
ちなみにここでは SSMService-Trust.json というファイルにしています。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ssm.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
保存したテキストファイルを元にIAMロールを作成します。
$ aws iam create-role --role-name SSMServiceRole --assume-role-policy-document file://SSMService-Trust.json
{
"Role": {
"Path": "/",
"RoleName": "SSMServiceRole",
"RoleId": "AROA2ZM2YJEL3NN5MIHKZ",
"Arn": "arn:aws:iam::777777777777:role/SSMServiceRole",
"CreateDate": "2020-02-05T01:25:23Z",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {
"Service": "ssm.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
}
}
}
$ aws iam attach-role-policy --role-name SSMServiceRole --policy-arn --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
アクティベーションコードの作成
次にアクティベーションコードの作成を行います。
$ aws ssm create-activation \
> --default-instance-name redmineLightsail \
> --iam-role SSMServiceRole \
> --registration-limit 5 \
> --region ap-northeast-1 \
> --tags "Key=Environment,Value=Production"
{
"ActivationId": "511f4a9c-23b2-4d03-a59e-8123977917c3",
"ActivationCode": "JhVFOpJgb6n1gSrENEvP"
}
作成がうまくいくと ActivationId と ActivationCode が返ってくるのでメモしておきます。
SSMエージェントのインストール
それではエージェントのインストールを行います。
$ mkdir /tmp/ssm
$ curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 30.1M 100 30.1M 0 0 4492k 0 0:00:06 0:00:06 --:--:-- 5889k
$ sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
Selecting previously unselected package amazon-ssm-agent.
(Reading database ... 117121 files and directories currently installed.)
Preparing to unpack /tmp/ssm/amazon-ssm-agent.deb ...
Preparing for install
-> Systemd detected
active
amazon-ssm-agent 2.3.672.0 1480 stable/… aws* classic
-> Amazon-ssm-agent is installed in this instance by snap, please use snap to update or uninstall.
dpkg: error processing archive /tmp/ssm/amazon-ssm-agent.deb (--install):
subprocess new pre-installation script returned error exit status 1
Errors were encountered while processing:
/tmp/ssm/amazon-ssm-agent.deb
ん?何やら既にインストールされているというエラーが。。。snap
という文字が見えるのでどうやらsnapパッケージが既にインストールされているようです。
$ sudo snap list amazon-ssm-agent
Name Version Rev Tracking Publisher Notes
amazon-ssm-agent 2.3.672.0 1480 stable/… aws✓ classic
確認してみたところやはりインストールされていました。
そういうことなのでとりあえずこのまま続けてみます。
$ sudo systemctl stop snap.amazon-ssm-agent.amazon-ssm-agent.service
$ sudo systemctl status snap.amazon-ssm-agent.amazon-ssm-agent.service
● snap.amazon-ssm-agent.amazon-ssm-agent.service - Service for snap application amazon-ssm-agent.amazon-ssm-agent
Loaded: loaded (/etc/systemd/system/snap.amazon-ssm-agent.amazon-ssm-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-02-03 15:40:55 UTC; 1 day 10h ago
Main PID: 1151 (amazon-ssm-agen)
Tasks: 8
Memory: 9.1M
CPU: 4.090s
CGroup: /system.slice/snap.amazon-ssm-agent.amazon-ssm-agent.service
└─1151 /snap/amazon-ssm-agent/1480/amazon-ssm-agent
Feb 03 16:15:59 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: 2020-02-03 16:15:58 ERROR Health ping failed with error - AccessDeniedException: User: a
Feb 03 16:15:59 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: status code: 400, request id: eeed9ec8-0836-4e32-8d24-9f6609332ac3
Feb 03 17:15:58 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: 2020-02-03 17:15:58 INFO Backing off health check to every 2400 seconds for 7200 seconds
Feb 03 17:15:59 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: 2020-02-03 17:15:58 ERROR Health ping failed with error - AccessDeniedException: User: a
Feb 03 17:15:59 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: status code: 400, request id: 0df4b870-a371-45e3-9bd9-2288298b9598
Feb 03 19:15:58 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: 2020-02-03 19:15:58 INFO Backing off health check to every 3600 seconds for 10800 second
Feb 03 19:15:59 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: 2020-02-03 19:15:58 ERROR Health ping failed with error - AccessDeniedException: User: a
Feb 03 19:15:59 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: status code: 400, request id: 8e31b497-d38c-4804-a5f5-1fc19b548236
Feb 03 22:15:58 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: 2020-02-03 22:15:58 ERROR Health ping failed with error - AccessDeniedException: User: a
Feb 03 22:15:58 redmine-hengjiu amazon-ssm-agent.amazon-ssm-agent[1151]: status code: 400, request id: 5729d8d5-3162-4b74-85d2-3a9bcb504f30
何やらここでもエラーが発生しているようです。
ですがそもそも何もしていない状況で起動してたらエラーは出ますよね。とりあえずこのままアクティベートしてみます。
$ sudo /snap/amazon-ssm-agent/current/amazon-ssm-agent -register -code "JhVFOpJgb6n1gSrENEvP" -id "511f4a9c-23b2-4d03-a59e-8123977917c3" -region "ap-northeast-1"
2020/02/05 01:45:59 Failed to load instance info from vault. RegistrationKey does not exist.
Error occurred fetching the seelog config file path: open /etc/amazon/ssm/seelog.xml: no such file or directory
Initializing new seelog logger
New Seelog Logger Creation Complete
2020-02-05 01:46:00 ERROR Error adding the directory to watcher: no such file or directory
2020-02-05 01:46:00 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-3c475554443332111
ERRORが気になりますが、最終的にSuccessfullyと出てるのでOKかなと思ったのですがダメでした。
管理コンソールに登録はされているのですが、接続ができない状況でした。
ということでやはり、一旦削除して入れ直すことにします。
$ sudo snap remove amazon-ssm-agent
amazon-ssm-agent removed
今度はsnapパッケージではなく.debパッケージでインストールします。
$ sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb
(Reading database ... 117121 files and directories currently installed.)
Preparing to unpack /tmp/ssm/amazon-ssm-agent.deb ...
Preparing for install
-> Systemd detected
active
Failed to stop amazon-ssm-agent.service: Unit amazon-ssm-agent.service not loaded.
Unpacking amazon-ssm-agent (2.3.842.0-1) ...
Setting up amazon-ssm-agent (2.3.842.0-1) ...
Starting agent
Created symlink from /etc/systemd/system/multi-user.target.wants/amazon-ssm-agent.service to /lib/systemd/system/amazon-ssm-agent.service.
Processing triggers for ureadahead (0.100.0-19.1) ...
今度はちゃんとインストールされました。
$ sudo service amazon-ssm-agent status
● amazon-ssm-agent.service - amazon-ssm-agent
Loaded: loaded (/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-02-05 02:17:58 UTC; 38s ago
Main PID: 28330 (amazon-ssm-agen)
CGroup: /system.slice/amazon-ssm-agent.service
└─28330 /usr/bin/amazon-ssm-agent
Feb 05 02:17:58 redmine-hengjiu systemd[1]: Started amazon-ssm-agent.
Feb 05 02:17:58 redmine-hengjiu amazon-ssm-agent[28330]: Error occurred fetching the seelog config file path: open /etc/amazon/ssm/seelog.xml: no such file or d
Feb 05 02:17:58 redmine-hengjiu amazon-ssm-agent[28330]: Initializing new seelog logger
Feb 05 02:17:58 redmine-hengjiu amazon-ssm-agent[28330]: New Seelog Logger Creation Complete
Feb 05 02:17:58 redmine-hengjiu amazon-ssm-agent[28330]: 2020-02-05 02:17:58 INFO Entering SSM Agent hibernate - AccessDeniedException: User: arn:aws:sts::666877
Feb 05 02:17:58 redmine-hengjiu amazon-ssm-agent[28330]: status code: 400, request id: e2ebf98a-40d8-4a58-81eb-9f18123aa733
Feb 05 02:17:58 redmine-hengjiu amazon-ssm-agent[28330]: 2020-02-05 02:17:58 INFO Agent is in hibernate mode. Reducing logging. Logging will be reduced to one lo
では、いよいよアクティベートします。
$ sudo service amazon-ssm-agent stop
先ほど作成したアクティベーション情報を使って実行します。
$ sudo amazon-ssm-agent -register -code "JhVFOpJgb6n1gSrENEvP" -id "511f4a9c-23b2-4d03-a59e-8123977917c3" -region "ap-northeast-1"
Error occurred fetching the seelog config file path: open /etc/amazon/ssm/seelog.xml: no such file or directory
Initializing new seelog logger
New Seelog Logger Creation Complete
2020-02-05 02:18:52 ERROR Registration failed due to error registering the instance with AWS SSM. RegistrationLimitExceeded:
status code: 400, request id: f7fd3939-3fb7-418d-85c7-1494f4fe742f
bitnami@redmine-hengjiu:~$ sudo amazon-ssm-agent -register -code "EFGt8VfQ/b3WIeacWd0w" -id "2e202742-2340-467e-b7aa-24cae9391956" -region "ap-northeast-1"
Error occurred fetching the seelog config file path: open /etc/amazon/ssm/seelog.xml: no such file or directory
Initializing new seelog logger
New Seelog Logger Creation Complete
2020-02-05 02:20:41 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-3c475554443332111
Successfullyということで成功したみたいなので起動させてみます。
$ sudo service amazon-ssm-agent start
今回はコンソールからちゃんと接続できました。
それではcliで接続したいと思います。
$ aws ssm start-session --target mi-3c475554443332111
SessionManagerPlugin is not found. Please refer to SessionManager Documentation here: http://docs.aws.amazon.com/console/systems-manager/session-manager-plugin-not-found
どうやらcliでセッションマネージャーを使うには SessionManagerPlugin というのをインストールする必要があるみたいです。
SessionManagerPluginのインストール
cliで接続するためのpluginをインストールします。今回はmac環境です。
$ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 4680k 100 4680k 0 0 1782k 0 0:00:02 0:00:02 --:--:-- 1782k
$ unzip sessionmanager-bundle.zip
Archive: sessionmanager-bundle.zip
creating: sessionmanager-bundle/
creating: sessionmanager-bundle/bin/
inflating: sessionmanager-bundle/seelog.xml.template
inflating: sessionmanager-bundle/VERSION
inflating: sessionmanager-bundle/LICENSE
inflating: sessionmanager-bundle/install
inflating: sessionmanager-bundle/bin/session-manager-plugin
$ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
Password:
Creating install directories: /usr/local/sessionmanagerplugin/bin
Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin
Installation successful!
インストールが成功したかは以下のコマンドで確認できます。
$ session-manager-plugin
The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.
ということで改めてコマンドを実行してみます。
$ aws ssm start-session --target mi-3c475554443332111
Starting session with SessionId: kohei-3c475554443332111
無事接続できました。
おわりに
Lightsailは手軽に利用できてすごく助かるのですが、ファイアウォールがポートレベルでの制御となるのがちょっと難点でした。
ですが、セッションマネージャを使うことでその難点を解消できるだけでなく、IP制御すらしなくて済んでしまいました。
[参考]
・ステップ 2: ハイブリッド環境の IAM サービスロールを作成する
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-service-role.html
・ステップ 4: ハイブリッド環境のマネージドインスタンスのアクティベーションを作成する
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-managed-instance-activation.html
・ステップ 6: ハイブリッド環境に SSM エージェント をインストールする (Linux)
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-managed-linux.html
・Linux インスタンスから SSM エージェント をアンインストールする
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-uninstall-agent.html
・macOS で Session Manager Plugin をインストールおよびアンインストールする
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-macos
・AWS CLI Command Reference - start-session
https://docs.aws.amazon.com/cli/latest/reference/ssm/start-session.html#start-session