SessionManagerを使えばSSH経由でなくてもEC2に接続できるということで試しも兼ねて調べた
SessionManagerを使うにあたっての前提として対象のインスタンスにSSMエージェントがインストールされている必要がある
SSMエージェントとは
SystemManager経由で各インスタンス(リソース)に対して更新、管理、および設定を可能にするもの
要はいろいろな操作をSystemManager経由で行うためにインスタンス側でよしなにやってくれるためのエージェントという感じ
SSM エージェント について - AWS Systems Manager
SSMエージェントを使い始めるための手順などは次に書いてあるとおり
SSM エージェント の使用 - AWS Systems Manager
最新のAmazonLinux2やUbuntuだと最初からインストールされている場合もある
SSMエージェントが入っていない場合は下記参考にインストールする
Amazon EC2 Linux インスタンスに SSM エージェント を手動でインストールする - AWS Systems Manager
古い記事だとIAMRoleにAmazonEC2RoleforSSM
を設定すると書いてあるが現在はAmazonSSMManagedInstanceCore
のよう(※2020-03-13現在)
- SSMを実行可能なロールの作成をする
最低限のポリシーをアタッチ
対象インスタンスのIAMRoleに上記で設定したロールをアタッチして準備OK
再起動させたらSessionManagerの画面リストに出てきた
ここから セッションを開始
するとブラウザ上でコンソールが出てくる
端末からの実行
AWS Systems Manager Session Manager for Shell AccessでMacからLinux EC2インスタンスに端末でアクセスする | Developers.IO
上記に従いサクッと実行しようと思ったらエラーになった
プラグインが必要な模様
- error
SessionManagerPlugin is not found. Please refer to SessionManager Documentation here: http://docs.aws.amazon.com/console/systems-manager/session-manager-plugin-not-found
よく読むとプラグインのインストールも必要だったが飛ばしてしまっていたのでインストールする
OSによってインストール手順が違うので下記参照
(Optional) Install the Session Manager Plugin for the AWS CLI - AWS Systems Manager
今回はCentOS7なのでrpmを取ってきてyumでインストールした
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
- セッションを開始する
$ aws ssm start-session --target i-0885acfxxxxxxxxxx Starting session with SessionId: hoge-03cf7369b9c7be3cd sh-4.2$
無事つながった
ssm-userで接続されるがsudo su -
でrootにもなれるようなのでトラブル対応でも活用できそう
cli経由でセッションを張れるのであればシステムのデプロイ時にSSH経由でなくSessionManagerでコマンド実行できるかなーと思ったができなそう
そういう用途であればRun Command
のほうがあっているっぽいので次はRunCommandを調べる