AWS Systems Manager (SSM) Session Manager でインスタンス 操作
今日は2018年9月12日にリリースされたAWSの比較的新しい機能、
「AWS Systems Manager (SSM) Session Manager」についてまとめてみます。
AWS は使用した事があるけれど Session Manager は初めて、という技術者の方向けの記事になります。
Session Manager は SSH を使用すること無く、かつSSHログインした時と同じようにシェルでEC2インスタンス の操作ができる便利な機能です。
できること
- AWS コンソール画面からのブラウザベースのアクセス、及びコマンドラインインターフェース (CLI) を使用したシェルアクセスができる。
- AWS IAM のアクセス許可設定を用いてインスタンスのアクセス許可ができ、
SSH設定・インバウンドポートオープン不要。 - 簡単な設定で Amazon S3 や Amazon CloudWatch Logs へログを残すことができる。SNS 通知も可能
仕組み
クライアントから直接サーバに接続しているのではなく、SSM を介して インスタンス上の SSMエージェントと通信することで 制御を行っています。
必要な設定
- ユーザーアカウントの権限設定→AmazonSSMFullAccess の権限が必要です。
- EC2インスタンス の権限設定→IAMロールにAWS管理ポリシー AmazonEC2RoleforSSM の割り当てが必要です。
- SSMエンドポイントへのアクセス
→EC2インスタンス上のSSMエージェントは、SSM のエンドポイントにHTTPSアクセスできる必要があります。
そのため、インターネットへのアウトバウンド許可、または VPC エンドポイントを使用するように
SSMを設定する必要があります。
- SSMエージェントのインストール→SSM エージェントのバージョンは 2.3.62 以上が必要です。
ブラウザベースの操作
まずは、AWS コンソール画面から ブラウザベースの操作をしてみましょう。
今回は Amazon Linux 2 AMI からインスタンスを作成しました。
2018/10/3 現在 最新のAmazon Linux 2 AMI に含まれるSSM エージェントのバージョンは 2.2.619.0 ですので、新規に作ったサーバについても更新が必要です。
せっかくなので、同じAWS Systems Manager (SSM)の機能であるRun CommandでSSM エージェントの更新をしてみましょう。
AWS Systems Manager > Run Command から、AWS-UpdateSSMAgent を選択して実行するだけです。
更新後のSSM エージェントのバージョンは 2.3.68.0 でした。
では、早速 Session Manager でアクセスしてみます。
AWS Systems Manager > セッションマネージャー で ターゲットインスタンスを選択し、セッションの開始ボタンをクリックするだけで、SSHでログインした時と同じようにシェルを使った操作ができます。
ssm-user というユーザでログインされています。また、sudo su で root になることができます。
一通りの事は Session Manager から実行できそうですね。
AWS CLIからの操作
CLIで Session Manager を操作するには、以下が必要です。
- AWS CLIバージョン1.16.12以上
- AWS CLI用のセッションマネージャプラグインのインストール
実行環境
- OS : Amazon Linux AMI release 2018.03
- aws-cliバージョン : 1.16.13
AWS CLIのバージョンを確認して、必要があればアップデートしてください。
Session Manager プラグインはオプションになっていますので、CLIのバージョンアップとは別にインストールが必要です。
$ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
$ sudo yum install -y session-manager-plugin.rpm
これで準備完了です。
では、Session Manager を起動してみましょう。
$ aws ssm start-session --target i-0a557d0338e58ee1b
Starting session with SessionId: qg-08133493d93a36dd2
sh-4.2$ pwd
/usr/bin
sh-4.2$ whoami
ssm-user
sh-4.2$ cd /
sh-4.2$ ls -l
total 12
lrwxrwxrwx 1 root root 7 Aug 11 02:01 bin -> usr/bin
dr-xr-xr-x 4 root root 332 Aug 11 02:03 boot
drwxr-xr-x 15 root root 2800 Oct 4 12:29 dev
drwxr-xr-x 80 root root 8192 Oct 3 08:28 etc
drwxr-xr-x 4 root root 38 Oct 3 08:28 home
lrwxrwxrwx 1 root root 7 Aug 11 02:01 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Aug 11 02:01 lib64 -> usr/lib64
drwxr-xr-x 2 root root 6 Aug 11 02:01 local
drwxr-xr-x 2 root root 6 Oct 19 2017 media
drwxr-xr-x 2 root root 6 Oct 19 2017 mnt
drwxr-xr-x 4 root root 27 Aug 11 02:02 opt
dr-xr-xr-x 92 root root 0 Oct 4 12:29 proc
dr-xr-x--- 3 root root 103 Oct 3 04:45 root
drwxr-xr-x 27 root root 900 Oct 4 12:29 run
lrwxrwxrwx 1 root root 8 Aug 11 02:01 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 Oct 19 2017 srv
dr-xr-xr-x 13 root root 0 Oct 4 12:29 sys
drwxrwxrwt 8 root root 172 Oct 4 13:22 tmp
drwxr-xr-x 13 root root 155 Aug 11 02:01 usr
drwxr-xr-x 19 root root 269 Oct 3 04:45 var
sh-4.2$ sudo su -
[root@ip-10-1-25-67 ~]# exit
logout
sh-4.2$ exit
exit
Exiting session with sessionId: qg-08133493d93a36dd2.
CLI上からも、SSHログインした時と同じようにインスタンスの操作が行えました。
exit
で切断することができます。
CloudWatch Logs へログ出力
CloudWatch Logs へ コマンドのログ を記録してみましょう。
EC2インスタンス のIAMロールにCloudWatch へのアクセス権限が必要ですが、 AmazonEC2RoleforSSM を割り当てている場合には 既に含まれています。
あらかじめ CloudWatch で出力先のロググループを作成しておいてから AWS Systems Manager > セッションマネージャー の 設定 タブからログ出力の設定をします。
設定後、 Session Manager でアクセスした後にセッション履歴を見ると、出力場所に CloudWatch Logs が現れます。
ログを見てみると なんだか余分な行がいっぱい・・・。セッションを張っている間中、定期的にログを出力しているようですね。
セッションの終了時にまとめてログが保存されるらしく、CloudWatch Logs で見られるようになるまでに時間がかかっていました。
S3 へログ出力
S3へもログ出力の設定をしてみます。
あらかじめS3にバケットを作成しておいてから、 セッションマネージャー の 設定画面で バケットを指定します。
設定後に Session Manager でアクセスすると、セッション履歴の出力場所に Amazon S3 が現れます。
出力されたログの中を覗いてみると、、おや? こちらはコマンドと結果だけが出力されているようですね。
Script started on 2018-10-10 02:22:41+0000
[?1034hsh-4.2# /usr/bin/ssm-session-logger /var/lib/amazon/ssm/i-0a557d0338e58ee1b/session/orchestration/root-0600d7a959f0ffb53/Standard_Stream/ipcTempFile.log
[?1034hsh-4.2$
[Ksh-4.2$ whoami
ssm-user
sh-4.2$ pwd
/usr/bin
sh-4.2$ sudo su -
Last login: Wed Oct 10 02:21:14 UTC 2018 on pts/0
]0;root@ip-10-1-25-67:~[?1034h[root@ip-10-1-25-67 ~]# exit
logout
sh-4.2$ exit
exit
sh-4.2# exit
exit
Script done on 2018-10-10 02:23:46+0000
Session Manager でのアクセス方法とログ記録の出力についてまとめてみました。
ブラウザベースでもCLIでも、sshログインした時と同じ感覚でシェルの実行ができましたし、ログ記録の設定も簡単でした。セキュリティの管理をIAMに集約できるのも魅力ですね。