【初心者向け】RHELでSession Managerを使うためにユーザーデータでSSMエージェントをインストールしてみた

2021.10.19

こんにちは、リサリサです。

Red Hat Enterprise Linux (RHEL) で Session Manager を使おうとしたら、 Session Manager にインスタンスが表示されませんでした。

RHEL にはデフォルトでは SSM エージェントがインストールされていないようです。SSM エージェントを手動でインストールする必要があります。SSH 接続したくないから Session Manager を使いたいのに、SSM エージェントをインストールするには SSH 接続しないといけないじゃないか…と悩んだので記事にしておきます。

EC2 起動時、ユーザーデータに SSM エージェントをインストールするスクリプトを書いておけば、EC2 の初期起動時に自動で SSM エージェントがインストールされるので、SSH 接続せず Session Manager を使用できます。

ユーザーデータとは

簡単に言うと、EC2 の初回起動時に自動で実行されるスクリプトです。

Amazon EC2 でインスタンスを起動するとき、起動後にそのインスタンスにユーザーデータを渡し、一般的な自動設定タスクを実行したり、スクリプトを実行したりできます。2 つのタイプのユーザーデータを Amazon EC2 に渡すことができます。シェルスクリプトと cloud-init ディレクティブです。また、このデータはプレーンテキスト、ファイル (コマンドラインツールを使用してインスタンスを起動する場合に便利です)、または base64 でエンコードされたテキスト (API コールの場合) として、起動ウィザードに渡すこともできます。

引用:起動時に Linux インスタンスでコマンドを実行する

ユーザーデータで SSM エージェントをインストールする

スクリプト

RHEL 8.x、Intel 64-bit (x86_64) の場合

#!/bin/bash
REGION_NAME=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//')
dnf install -y "https://s3.${REGION_NAME}.amazonaws.com/amazon-ssm-${REGION_NAME}/latest/linux_amd64/amazon-ssm-agent.rpm"
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent

RHEL 8.x、ARM 64-bit (arm64) の場合

#!/bin/bash
REGION_NAME=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//')
dnf install -y "https://s3.${REGION_NAME}.amazonaws.com/amazon-ssm-${REGION_NAME}/latest/linux_arm64/amazon-ssm-agent.rpm"
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent

その他の場合

下記のページを参考に3行目を書き換えてみて下さい。

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

コンソールから

通常通り EC2 の起動設定をすすめ、「ステップ3:インスタンスの詳細設定」で「ユーザーデータ」に上記のスクリプトを記載します。

CloudFormationから

EC2 インスタンスの Propertiesに以下のように上記のスクリプトを追加します。

      UserData: 
        Fn::Base64: |
          #!/bin/bash
          REGION_NAME=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//')
          dnf install -y "https://s3.${REGION_NAME}.amazonaws.com/amazon-ssm-${REGION_NAME}/latest/linux_amd64/amazon-ssm-agent.rpm"
          systemctl enable amazon-ssm-agent
          systemctl start amazon-ssm-agent

全文は一応こちらに置いています。IAM ロールと EC2 が作成される template です。

結果

コンソールから起動したもの(rhel-console)も、CloudFormationから起動したもの(rhel-cfn)も、どちらも見えるようになりました!

SSM エージェントのインストールについてだけ書きましたが、AmazonSSMManagedInstanceCoreのあるIAMロールがアタッチされていなかったり、ネットワークに問題がある場合もセッションマネージャが利用できません。

SSM エージェントがインストールされているはずなのにセッションマネージャでインスタンスが表示されない時は以下記事を参照してみてください。

おまけ

ユーザーデータのログは「/var/log/cloud-init-output.log」にあります。「sudo cat /var/log/cloud-init-output.log」などで確認できます。

SSM エージェントのインストールが上手くいかないと SSH 接続して覗くしかなくなりますが、上手く動かない場合は、ここを確認してみるとよいかもしれません。今回は以下のように正しくインストールされているようです。

おわりに

SSM エージェントが入っていない RHEL でも SSH 接続なしで Session Manager が使えました!SSM エージェントがなくて困っている私のような人のお役に立てれば幸いです。

参考

[1]Red Hat Enterprise Linux インスタンスに SSM エージェントを手動でインストールする - AWS Systems Manager

[2]起動時に Linux インスタンスでコマンドを実行する