初めてのAWS Session Manager（SSM）

# 概要

　いまさらですが、先日開催されたJAWS DAYS 2019で[SSH使わずにEC2に接続できるSession Manager](https://jawsdays2019.jaws-ug.jp/session/1311/)を知り、現状自社サービスにおいてもSSH管理が課題になっていましたので、さっそく試してみました
　
　いつ、だれが、何をしたのかはすべてログ（実行結果も含めて）に保存されるので、問題発生時にトレース用としても使えます！
　設定自体は非常に簡単なので、どんなものなのかを試してみたい方は是非試してみてる価値はあります！
　※以下の手順は新規インスタンスにSSM用ロールを追加していますが、既存インスタンスに追加する場合は[こちら](https://aws.amazon.com/jp/blogs/news/easily-replace-or-attach-an-iam-role-to-an-existing-ec2-instance-by-using-the-ec2-console/)を参照ください
　※すぐに試してみたい方向けの内容なので権限設定等はガバガバなのでご注意ください！


# 手順

## ロールの作成

1. 「IAM」-「ロール」-「ロール作成」
![1.create_role.png](https://qiita-image-store.s3.amazonaws.com/0/30522/cc3cfdff-7cac-d285-f885-af7279abc449.png)

2. 「AWSサービス」-「EC2」ロールを選択
![2.select_role_type_ec2.png](https://qiita-image-store.s3.amazonaws.com/0/30522/cd55d1ff-80b9-4528-3d64-52a75d468eee.png)

3. ポリシーから「AmazonEC2RoleforSSM」を選択
   権限の絞り込みをしたい場合は、「ポリシーの作成」から作成してください
![3.select_policy.png](https://qiita-image-store.s3.amazonaws.com/0/30522/6d5b006c-0d20-c6ad-17ec-dfb9941bb3c3.png)

4. タグやロール名を付けて作成

## EC2の作成

Session Managerからコントロールするためには、EC2に[ssm-agent](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ssm-agent.html)がインストールされている必要があります。最新のAmazon Linux 2のAMIであれば最初から入っています

1. インスタンスを新規作成し、インスタンスの詳細の設定で作成したIAMロールを選択すればOK！
![ec2_select_iam_role.png](https://qiita-image-store.s3.amazonaws.com/0/30522/1a46a69e-5631-20af-a1d8-6fb0acdfd68f.png)

## Session Manager

1. サービス「Systems Manager」-「セッションマネージャー」-「セッションの開始」  
    ※実行中のセッションがあれば、セッションマネージャーの一覧に表示される
2. 前述で作成したEC2インスタンスを選択し、「セッションの開始」
![session_start.png](https://qiita-image-store.s3.amazonaws.com/0/30522/337a3a6f-2b9b-6e61-df32-33ab1cad626e.png)

3. 新しいタブにターミナルが立ち上がる（若干動作がもっさり）
   接続ユーザはssm-userになるが、sudo実行が許可されている
   ※参考： [[小ネタ]新機能Session Managerで使うssm-userの権限が気になった話](https://dev.classmethod.jp/cloud/aws/why-does-ssm-user-use-sudo/)
4. ターミナルの「終了」を押下するとセッションが終了され、セッション履歴が保存されます
   操作ログをS3出力設定していれば、S3の指定していたバケットにログファイルが出力されます
![session_history.png](https://qiita-image-store.s3.amazonaws.com/0/30522/670e71f5-f394-c2be-5194-77aea1b4aae6.png)
## 操作ログ（サンプル）

以下のように標準出力された内容がすべてログファイルに出力されます

```text:ssm-log
Script started on 2019-02-24 10:00:54+0000
[?1034hsh-4.2# /usr/bin/ssm-session-logger /var/lib/amazon/ssm/i-0ddd6efc384ff9fc9/sess 
ion/orchestration/xxxxx-xxxxxxxx/Standard_Stream/ipcTempFile.log  
false
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

sh-4.2$ ls -la

total 127096

dr-xr-xr-x  2 root root       24576 Feb 24 09:54 .

drwxr-xr-x 13 root root         155 Jan 14 18:29 ..

-rwxr-xr-x  1 root root       41344 Jul 31  2018 [

-rwxr-xr-x  1 root root      107744 Sep 12 22:17 a2p

-rwxr-xr-x  1 root root       28712 Aug  2  2018 ac

-rwxr-xr-x  1 root root       28976 Jan  3 20:00 addr2line

～中略～

-rwxr-xr-x  2 root root      189440 Jul 27  2018 zipinfo

-rwxr-xr-x  1 root root       95896 Aug  1  2018 zipnote

-rwxr-xr-x  1 root root       99968 Aug  1  2018 zipsplit

-rwxr-xr-x  1 root root        2041 Jul 27  2018 zless

-rwxr-xr-x  1 root root        2859 Jul 27  2018 zmore

-rwxr-xr-x  1 root root        5343 Jul 27  2018 znew

lrwxrwxrwx  1 root root           6 Jan 14 18:29 zsoelim -> soelim

sh-4.2$ sh-4.2# exit
exit

Script done on 2019-02-24 10:02:40+0000

```

# 注意点

SSMで接続すると`/var/log/ssm/`配下にSSM接続時の操作ログが残ります。
なので、このログでディスク容量が圧迫される可能性もあるので、ログサイズとローテーションの設定を必ずしておきましょう！
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/monitoring-ssm-agent.html