Private SubnetのRHEL EC2インスタンスにSSM Agentをインストールする方法
こんにちは。AWS事業本部トクヤマシュンです。
EC2インスタンスをAWS Systems Managerのマネージドインスタンスとして管理するには、SSM Agentがインストールされていることが必要です。
多くの場合、AWSが提供するAMIにはSSM Agentがプリインストールされているため、ユーザーによるインストールは不要です。
参考:SSM Agent がプリインストールされた Amazon Machine Images (AMIs)
ただしRHEL(RedHat Enterprise Linux)などのように、SSM AgentがインストールされていないAMIからインスタンスを起動する場合には、インストールが必要です。
今回はインターネット接続のないPrivate Subnetに配置したRHEL EC2インスタンスに対し、SSM Agentをインストールする機会がありましたので、手順を紹介したいと思います。
ポイント
構築に先駆け、いくつかのポイントをお伝えします。
- Amazon S3に接続するためのVPC Endpointが必要
- Amazon S3に配置されているSSM AgentのRPMパッケージをインストールするため
- インストール時のSSM AgentパッケージのURLはPrivate Networkと同一リージョンのものを指定
- VPC Endpoint経由でAmazon S3にアクセスする場合、同一リージョンに限られるため
- RHEL8ではインストール時に
--disablerepo="*"
オプションをつけて、リポジトリを無効化- オプション無しだと、リポジトリへのアクセスがはたらいて接続できずタイムアウトし、インストールが失敗するため
今回の構成
下図の構成でPrivate SubnetにRHEL8 EC2インスタンスを構築してSSM Agentをインストールし、Session Managerで接続してみます。
VPCエンドポイントは次のものを準備します。
- S3接続用のエンドポイント
- エンドポイントサービス名
- com.amazonaws.ap-northeast-1.s3
- 用途
- AWSが提供している、SSM AgentのRPMファイルが保存されているS3バケットにアクセスするため
- エンドポイントサービス名
- Systems Manager接続用のエンドポイント
- エンドポイントサービス名
- com.amazonaws.ap-northeast-1.ssm
- com.amazonaws.ap-northeast-1.ssmmessages
- com.amazonaws.ap-northeast-1.ec2messages
- 用途
- マネージドインスタンスからSession Managerに接続するため
- エンドポイントサービス名
今回VPCは準備できているものとし、EC2インスタンス構築からはじめていきます。
EC2構築
マネジメントコンソールからEC2インスタンス作成を行ないます。
SSM Agentのインストールはユーザーデータを利用し、EC2インスタンス起動時に自動で行うものとします。
登録するユーザーデータ(RHEL8の場合)
今回RHEL8のインスタンスを作成するため、下記のスクリプトをユーザーデータに登録します。
#!/bin/bash cd /tmp sudo dnf --disablerepo="*" install -y https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm sudo systemctl enable amazon-ssm-agent sudo systemctl start amazon-ssm-agent
スクリプトは次のAWSドキュメントをベースとしています。
起動時に Amazon EC2 Linux インスタンスに AWS Systems Manager Agent (SSM Agent) をインストールする方法を教えてください。
ただし、インターネット接続環境がないPrivate Subnetにインスタンスを起動するため、下記2点の変更を行なっています。
- インストール時のSSM AgentパッケージのURLをap-northeast-1のものに変更
- S3 VPC Endpoint経由でアクセスするため
- パッケージはAWSが提供している
- インストール時に
--disablerepo="*"
オプションをつけて、リポジトリを無効化- オプション無しだと、リポジトリへのアクセスがはたらいて接続できずタイムアウトし、インストールが失敗するため
参考:登録するユーザーデータ(RHEL7の場合)
参考までに、RHEL7のインスタンスを作成する場合のスクリプトも記載しておきます。
#!/bin/bash cd /tmp sudo yum install -y https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm sudo systemctl enable amazon-ssm-agent sudo systemctl start amazon-ssm-agent
RHEL7でyumを利用してインストールする場合には、--disablerepo="*"
オプションは不要でした。
EC2作成画面
実際にインスタンスの作成を行う場合の画面は次のようになります。
すべて設定できたら、EC2を起動します。
Session Manager接続
作成したインスタンスにSession Managerを用いて接続してみます。
セッションマネージャーを選択して「接続」ボタンがオレンジ色になっていたら、マネージドインスタンスとして登録できています。
Session Managerで接続が可能です。
接続できたら、次のコマンドを実行してSSM Agentのステータスを確認します。
systemctl status amazon-ssm-agent
Private SubnetのインスタンスにSSM Agentをインストールし、Session Manager経由で接続できることが確認できました。
最後に
Private Subnetに配置したRHEL EC2インスタンスに対して、SSM Agentをインストールする手順を紹介しました。 本エントリーがどなたかのお役に立てば幸いです。