notebook

都内でWEB系エンジニアやってます。

AWS Session Managerお試し

SessionManagerを使えばSSH経由でなくてもEC2に接続できるということで試しも兼ねて調べた

SessionManagerを使うにあたっての前提として対象のインスタンスにSSMエージェントがインストールされている必要がある

SSMエージェントとは

SystemManager経由で各インスタンス(リソース)に対して更新、管理、および設定を可能にするもの

要はいろいろな操作をSystemManager経由で行うためにインスタンス側でよしなにやってくれるためのエージェントという感じ

SSM エージェント について - AWS Systems Manager

docs.aws.amazon.com

SSMエージェントを使い始めるための手順などは次に書いてあるとおり

SSM エージェント の使用 - AWS Systems Manager

docs.aws.amazon.com

最新のAmazonLinux2やUbuntuだと最初からインストールされている場合もある

SSMエージェントが入っていない場合は下記参考にインストールする

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

docs.aws.amazon.com

古い記事だとIAMRoleにAmazonEC2RoleforSSMを設定すると書いてあるが現在はAmazonSSMManagedInstanceCoreのよう(※2020-03-13現在)

  • SSMを実行可能なロールの作成をする

f:id:swfz:20200317040121p:plain

最低限のポリシーをアタッチ

f:id:swfz:20200317040125p:plain

対象インスタンスのIAMRoleに上記で設定したロールをアタッチして準備OK

再起動させたらSessionManagerの画面リストに出てきた

f:id:swfz:20200317040128p:plain

ここから セッションを開始するとブラウザ上でコンソールが出てくる

f:id:swfz:20200317040133p:plain

端末からの実行

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

dev.classmethod.jp

上記に従いサクッと実行しようと思ったらエラーになった

プラグインが必要な模様

  • 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

docs.aws.amazon.com

今回は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を調べる