QUICKGUARD ホームページ >

AWS Systems Manager (SSM) Session Manager でインスタンス 操作

2018.10.11

今日は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$ 
sh-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に集約できるのも魅力ですね。