11
2

More than 1 year has passed since last update.

AWS Session Managerを今更ながら認識した件

Last updated at Posted at 2022-12-19

この記事はSupershipグループ Advent Calendar 2022の20日目の記事です。

はじめに

いまだにSSHは鍵交換して、22ポートを開けて、踏み台サーバー経由するなどが当たり前と思っていたのですが、弊社のccoeチームからsession-managerについて共有を受け、今更ながら存在を知り、感激したので、自分の備忘としても書いておきたいと思います。

SessionManagerでできること

AWSのサポートドキュメントに記載があるのですが、一部抜粋いたします。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager.html

  1. 22ポートを開放などが不要

  2. 踏み台サーバーが不要

  3. SSH キーを管理不要

  4. コンソールと CLI からワンクリックでマネージドノードへアクセス可能

  5. セッションアクティビティーのログ記録がCloudwatchやS3と連携可能

セットアップ手順

基本的には下記ドキュメントにしたがって進めていくだけです。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started.html

1. 前提

  • サポートされるOS
    大半のOSはサポートされているので特に問題になることはないかと。今回はAmazon Linux 2 を利用します。
  • SSM Agent
    Amazon Linux 2 を AMI として利用していればデフォルトで稼働しているため、とくに考慮する必要なさそうです。
  • サブネット
    今回は手軽に試すことが目的なので、パブリックなサブネット上のEC2インスタンスへの接続を試しています。プライベートサブネット接続はVPCエンドポイントの作成などを実施が必要です。
    参考:セッションマネージャーをプライベートサブネットから利用してみる

2. Session Manager 許可を持つ IAM ロールを確認または作成する

ひとまずデフォルトのAmazonSSMManagedInstanceCoreポリシーを割り当てたIAMロールを作成する。
image.png

3.EC2インスタンスに該当IAMロールを設定する

先ほど作成したIAMロールをEC2インスタンスにアタッチする。
image.png

が、設定直後ではまだコンソールからは接続できない。。。。
image.png

けど、放置して10分ぐらい経過すると接続できる!!(謎)
image.png

画面はこんな感じ
image.png

ちなみに、SSM-Agentのステータス確認するとこんな感じ

sh-4.2$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
   Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2022-12-14 09:25:41 UTC; 1h 5min ago
 Main PID: 3096 (amazon-ssm-agen)
   CGroup: /system.slice/amazon-ssm-agent.service
           ├─3096 /usr/bin/amazon-ssm-agent
           ├─3189 /usr/bin/ssm-agent-worker
           ├─3488 /usr/bin/ssm-session-worker shinsuke.nakamura@supership.jp-0541172aa93d0a9b7
           ├─3500 sh
           ├─3579 /usr/bin/ssm-session-worker shinsuke.nakamura@supership.jp-0441ce03c59c8333d
           └─3591 sh

Dec 14 09:25:42 ip-172-31-3-48.ap-northeast-1.compute.internal amazon-ssm-agent[3096]: 2022-12-14 09:25:41 INFO [amazon-ssm-agent] u...IPC
Dec 14 09:25:42 ip-172-31-3-48.ap-northeast-1.compute.internal amazon-ssm-agent[3096]: 2022-12-14 09:25:41 INFO [amazon-ssm-agent] a...2.0
Dec 14 09:25:42 ip-172-31-3-48.ap-northeast-1.compute.internal amazon-ssm-agent[3096]: 2022-12-14 09:25:41 INFO [amazon-ssm-agent] O...d64
Dec 14 09:25:42 ip-172-31-3-48.ap-northeast-1.compute.internal amazon-ssm-agent[3096]: 2022-12-14 09:25:41 INFO [CredentialRefresher...her
Dec 14 09:25:42 ip-172-31-3-48.ap-northeast-1.compute.internal amazon-ssm-agent[3096]: 2022-12-14 09:25:42 INFO [amazon-ssm-agent] [...ess
Dec 14 09:25:43 ip-172-31-3-48.ap-northeast-1.compute.internal amazon-ssm-agent[3096]: 2022-12-14 09:25:42 INFO [amazon-ssm-agent] [...ted
Dec 14 09:25:43 ip-172-31-3-48.ap-northeast-1.compute.internal amazon-ssm-agent[3096]: 2022-12-14 09:25:42 INFO [amazon-ssm-agent] [...nds
Dec 14 09:48:27 ip-172-31-3-48.ap-northeast-1.compute.internal useradd[3358]: new group: name=ssm-user, GID=1001
Dec 14 09:48:27 ip-172-31-3-48.ap-northeast-1.compute.internal useradd[3358]: new user: name=ssm-user, UID=1001, GID=1001, home=/hom...ash
Dec 14 10:31:17 ip-172-31-3-48.ap-northeast-1.compute.internal sudo[3602]: ssm-user : TTY=pts/1 ; PWD=/var/log ; USER=root ; COMMAN...gent
Hint: Some lines were ellipsized, use -l to show in full.

4.CLIから接続する

コンソールからだと作業もしづらいので、やはりCLIからの接続も試してみます。

1 AWSCLI のインストール

$ brew install awscli

2 プラグインのインストール

$ 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

3 sshconfigファイルに追記

$ vim ~/.ssh/config
# SSH over Session Manager
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

4 事前に作成した秘密鍵を使ってSSH接続

$ ssh -i "test_session_manager.pem" ec2-user@<インスタンスID>

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
19 package(s) needed for security, out of 38 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-31-3-48 ~]$

いけました!便利!
もちろんインバウンドポートは全く開放していません。

気になったこと

ssm-user権限

コンソールから接続するとデフォルトのOSユーザーはssm-userです。
これは一応sudoできるので、特に問題ないですが、最初あれっと思ったので
下記を参考にさせていただきました。
Session Managerでec2-userやrootとして作業する | AWS Systems Manager

監査ログはどこに?

監査ログはどこに記録されているのかわからなかったのですが、デフォルトでは設定されていないようなので下記から設定が必要でした。
image.png
image.png

以下で設定してみます。
image.png

下記のようなログが出ました。
スクリーンショット 2022-12-20 12.30.51.png

バッチリ取れてますね。

Script started on 2022-12-15 04:18:47+0000
[?1034hsh-4.2$ 
[Ksh-4.2$ 

sh-4.2$ 

sh-4.2$ 

sh-4.2$ test[K[K[K[Kdf -h

Filesystem      Size  Used Avail Use% Mounted on

devtmpfs        474M     0  474M   0% /dev

tmpfs           483M     0  483M   0% /dev/shm

tmpfs           483M  352K  483M   1% /run

tmpfs           483M     0  483M   0% /sys/fs/cgroup

/dev/xvda1      8.0G  1.6G  6.5G  20% /

sh-4.2$ whoami

ssm-user

sh-4.2$ 
Script done on 2022-12-15 04:18:47+0000

まとめ

SessionManagerを使って、ポート開放や踏み台サーバーなしで簡単にSSH接続ができました。
SessionManagerの機能は2018年にリリースされていたようなので、大変今更感が強いのですが、まだ使っていない方がいたら使わない手はないと思いますので、ぜひお試しください。

最後に

Supershipではプロダクト開発やサービス開発に関わる人を絶賛募集しております。
ご興味がある方は以下リンクよりご確認ください。

Supership 採用サイト

是非ともよろしくお願いします!

参考

https://www.bioerrorlog.work/entry/session-manager-ec2-user
https://baresupport.jp/blog/2022/03/14/82/
https://qiita.com/comefigo/items/b705325d082018ab2348
https://dev.icare.jpn.com/dev_cat/aws_ssm_session_manager_introduction/

11
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
2