話題の記事

AWS Systems Manager Session Manager for Shell AccessでMacからLinux EC2インスタンスに端末でアクセスする

2018.09.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
本日AWS Systems Managerの新機能Session Manager for Shell Accessがリリースされ、SSHなしでEC2インスタンスにシェルアクセスできるようになりました。

上記ブログではブラウザからアクセスする様子が紹介されているので、本ブログではMacからCLIによるターミナル経由でのアクセス方法をご紹介します。

動作確認環境

  • macOS : High Sierra 10.13.6
  • EC2(Linux) : amzn2-ami-hvm-2.0.20180810-x86_64-gp2 (東京リージョン ami-08847abae18baa040)

要件

以下のAWSドキュメントに記載があります。

今回手元で試す際には以下のアップデートが必要でした。

  • Mac
    • AWS CLIのバージョンアップ
    • Session Manager Pluginのインストール
  • Amazon Linux
    • SSM Agentのバージョンアップ
    • IAMロールの設定

Macのセットアップ

セッションマネージャーをCLIで利用するためには、AWS CLIバージョン1.16.12以上であることと、セッションマネージャープラグインのインストールが必要です。以下のコマンドを実行します。

$ pip install --upgrade awscli
$ curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -
o "sessionmanager-bundle.zip"
$ unzip sessionmanager-bundle.zip
Archive:  sessionmanager-bundle.zip
   creating: sessionmanager-bundle/
   creating: sessionmanager-bundle/bin/
  inflating: sessionmanager-bundle/LICENSE
  inflating: sessionmanager-bundle/install
  inflating: sessionmanager-bundle/seelog.xml.template
  inflating: sessionmanager-bundle/VERSION
  inflating: sessionmanager-bundle/bin/session-manager-pluginsuzaku:~ ryuta
$ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
Password:
Creating install directories: /usr/local/sessionmanagerplugin/bin
Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin
Installation successful!
$

Amazon Linuxのセットアップ

最近のAmazon LinuxにはSSM Agentがプリインストールされていますが、セッションマネージャーに対応するバージョンは2018/09/12現在Amazon Linux 2のyumリポジトリにアップされていませんでした。そのためRPMパッケージをダウンロードしインストールします。

$ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
$ sudo systemctl restart amazon-ssm-agent

また、インスタンスからSystem ManagerのAPIにアクセスするためのIAMロールの設定も必要です。今回はAWSが管理するマネージドポリシーAmazonEC2RoleforSSMをIAMロールに設定し、EC2に設定しました。

動作確認

では、接続してみます。セッションマネージャー経由の接続は、AWS CLIのaws ssm start-sessionコマンドを実行します。オプションにはIPアドレスの代わりにEC2のインスタンスIDを指定するのがユニークですね(^^ 可変のパブリックIPアドレスのときにも便利そうです。

$ aws ssm start-session --target i-XXXXXXXXXXXXX


Starting session with SessionId: takiponep-XXXXXXXXXXXXX
sh-4.2$

接続出来ました!netstatで通信状況を見てみると。。。

$ netstat -tn
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 172.31.39.199:47750     52.119.222.76:443       ESTABLISHED
tcp        0    771 172.31.39.199:40018     52.119.218.91:443       ESTABLISHED
tcp        0      0 172.31.39.199:52448     52.119.222.59:443       ESTABLISHED
tcp        0      0 172.31.39.199:39852     52.119.218.91:443       ESTABLISHED
tcp        0      0 172.31.39.199:34516     54.240.225.173:443      ESTABLISHED

SSHを使っていないことがわかりますね!セッションマネージャーを介してEC2からは外向きの通信のみで完結する仕組みになっているので、内向きセキュリティグループの調整や固定グローバルIPの管理ともおさらば出来そうです!

まとめ

Systems Managerのセッションマネージャーで手元のMacからEC2インスタンスに接続する様子をご紹介しました。いくつかの制約に気を付けつつ、バシバシ活用していきましょう!