AWS SessionManager 検証

AWS SessionManagerのアップデート内容

概要

AWS Systems Manager Session Manager

SEssionManagerの開始

SSM Agentのインストール

Amazon EC2 Linux インスタンスに SSM エージェント を手動でインストールする

AmazonLinuxならデフォルトでインストールされている

# 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 火 2019-07-16 19:49:21 JST; 2 days ago
 Main PID: 2524 (amazon-ssm-agen)
   CGroup: /system.slice/amazon-ssm-agent.service
           mq2524 /usr/bin/amazon-ssm-agent

SessionManager で利用するユーザーがOS上に存在するか確認し、居ない場合 Agent を再起動すると作られる

# getent passwd ssm-user
# systemctl restart amazon-ssm-agent
# getent passwd ssm-user
ssm-user:x:10002:10002::/home/users/ssm-user:/bin/bash

SSM権限の追加

EC2 インスタンスに に割り当てているロールに SSM 権限を追加

コンソール上からの SSM 疎通確認


新しいタブが開いてサーバに接続できる

デフォルトの ssm-user には sudo 権限があり root 化も可能
下記のように設定されている

sh-4.2$ id
uid=10002(ssm-user) gid=10002(ssm-user) groups=10002(ssm-user)

# cat /etc/sudoers.d/ssm-agent-users
# User rules for ssm-user
ssm-user ALL=(ALL) NOPASSWD:ALL

デフォルトだと IAM アカウントを持っていて、 EC2 に SSM 権限付与していると誰でも接続できてしまうのでIAM アカウントの管理は大事になる
どのサーバにアクセスさせるか等の権限制御は IAM 単位で設定できる
S3 や CloudWatch を設定しておけば 操作ログの取得や利用時の通知などできる?

ログインユーザーの指定

SSM 接続時のログインユーザーは RunAs を有効化し、SSM 権限を付けたロールか IAM ユーザーにタグをつけることで指定できる
SessionManager RunAs の有効化、ログインしたい OSユーザーを指定

ロールにログインしたいOSユーザーでタグを指定

確認

ちゃんと変わってる

リモートのWindowsクライアントから接続する

SessionManagerPluginの利用

AWS CLI と AWS SessionManagerPlugin をインストールする
AWS CLI 用の Session Manager Plugin をインストールする

> aws --version
aws-cli/1.16.198 Python/3.7.4 Windows/10 botocore/1.12.188

> session-manager-plugin

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.

> ssh -V
OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4

profile

> aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ******************** shared-credentials-file
secret_key     ******************** shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config

ユーザーHomeにSSH設定ファイルを作成

> C:\Users\username\.ssh\config
host i-* mi-*
    ProxyCommand C:\Users\username\AppData\Local\Programs\Python\Python37\Scripts\aws.cmd ssm start-session --target %h --document-name AWS-StartSSHSession --parameters "portNumber=%p"

接続

> ssh usernamei@i-instansid
The authenticity of host 'i-instansid (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:n+Sh9wthRD+toq4g1wshn3MQBEHSygY+HxJYFz0LUlM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'i-instansid' (ECDSA) to the list of known hosts.
Password:
Password:
Last failed login: Thu Jul 18 22:01:43 JST 2019 from 127.0.0.1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Thu Jul 18 22:00:04 2019 from 172.20.2.235

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

https://aws.amazon.com/amazon-linux-2/
1 package(s) needed for security, out of 1 available
Run "sudo yum update" to apply all updates.

[usernamei@localhost ~]$
[usernamei@localhost ~]$
[usernamei@localhost ~]$
[usernamei@localhost ~]$ exit

セッション、マネージャ側にも記録が残っている

リモートからでも OUT 通信で SSH が空いていれば簡単につなげることができる
AWS 側で security group に穴を開ける必要もないし GIP も節約でき、踏み台サーバを用意する必要もない
IAM 管理が大変そうだけどなかなかに便利。 AWSコンソール上からつなげるだけでも緊急用に良さそう

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)
Share Comments
comments powered by Disqus