AWS Systems Managerのセッションマネージャーを使用してEC2インスタンスにログインする方法と、CloudWatch Agentを使用したログ収集の設定を説明します。この方法ではSSHやRDPを使用せずに、より安全にインスタンスにアクセスし、ログを一元管理できます。
ステップ1: IAMロールの作成
AWS Management Consoleでセッションマネージャーとログ送信用のIAMロールを作成します。
1.1 新しいロールの作成
- AWS Management Consoleにログインします
- IAM(Identity and Access Management) に移動します
- 左側のナビゲーションペインで「ロール」をクリックします
- 「ロールを作成」ボタンをクリックします
- 「信頼されたエンティティの種類を選択」で「AWS サービス」を選択します
- 「ユースケース」から「EC2」を選択します
- 「次へ」をクリックします
1.2 ポリシーの追加
- 「権限を追加」画面で、以下のポリシーを検索して追加します:
必須ポリシー:AmazonSSMManagedInstanceCore
- 検索ボックスに「AmazonSSMManagedInstanceCore」と入力
- 検索結果から該当するポリシーのチェックボックスをチェック
- このポリシーはセッションマネージャーとSSMエージェント用です
必須ポリシー:CloudWatchAgentServerPolicy
- 検索ボックスに「CloudWatchAgentServerPolicy」と入力
- 検索結果から該当するポリシーのチェックボックスをチェック
- このポリシーはCloudWatch Agentがログを送信するための権限です
確認画面の例:
以下のポリシーが追加されていることを確認してください:
☑ AmazonSSMManagedInstanceCore
☑ CloudWatchAgentServerPolicy
1.3 タグの追加(オプション)
- 「次へ」をクリックしてタグの追加画面に進みます
- 必要に応じてタグを追加します(例:Environment = Production)
- 「次へ」をクリックします
1.4 ロール情報の確認と作成
- ロール名を入力します(例:
EC2-CloudWatch-SSM-Role) - ロールの説明を入力します(例:
EC2 instances for CloudWatch and SSM) - 「信頼されたエンティティ」が以下のようになっていることを確認します:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - 「ロールを作成」をクリックします
1.5 既存のロールにポリシーを追加する場合
既にEC2インスタンスに割り当てられているロールがある場合は、そのロールにポリシーを追加することもできます。
- IAM コンソールの「ロール」から、対象のロール名をクリックします
- 「権限」タブを開きます
- 「ポリシーを追加」ボタンをクリックします
- 「既存のポリシーを直接アタッチ」を選択します
- 「CloudWatchAgentServerPolicy」を検索して選択します
- 「ポリシーを追加」をクリックします
追加後の確認:
アタッチされたポリシー:
- AmazonSSMManagedInstanceCore
- CloudWatchAgentServerPolicy
ステップ2: EC2インスタンスにIAMロールを割り当てる
- EC2ダッシュボードに移動します
- インスタンスの一覧から、セッションマネージャーでログインしたいインスタンスを選択します
- 「アクション」→「セキュリティ」→「IAMロールを変更」を選択します
- 作成したIAMロール(例:
EC2-CloudWatch-SSM-Role)を選択し、「IAMロールを更新」をクリックします
ステップ3: セッションマネージャーでの接続確認
- AWS Management ConsoleでSystems Managerに移動します
- 左側のナビゲーションペインから「セッションマネージャー」を選択します
- 「セッションの開始」ボタンをクリックします
- 接続したいEC2インスタンスを選択します
- 「接続」をクリックします
- 新しいタブでターミナルが表示され、インスタンスに接続されます
注: Amazon Linux 2023にはSSMエージェントがプリインストールされているため、追加のインストール作業は不要です。
ステップ4: CloudWatch Agentのインストールと設定
Amazon Linux 2023ではCloudWatch Agentを使用することを推奨します。
4.1 CloudWatch Agentのダウンロードとインストール
# パッケージの更新
sudo yum update -y
# CloudWatch Agentのダウンロード
wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
# インストール
sudo rpm -U ./amazon-cloudwatch-agent.rpm
4.2 CloudWatch Agent設定ファイルの作成
CloudWatch Agentの設定方法は2つあります。
方法A: 対話形式のウィザードを使用(推奨)
CloudWatch Agentの設定ウィザードを使用して、対話的に設定ファイルを生成できます。
# 設定ウィザードの実行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
ウィザードでは以下のような項目について聞かれます:
-
On which OS are you planning to use the agent? →
3(Linux) を選択 -
Are you going to use EC2 Instance Profile credentials or IAM User credentials? →
1(EC2 Instance Profile) を選択 -
Do you want to monitor any host metrics? →
yesを選択 -
Do you want to monitor CPU metrics? →
yes -
Do you want to monitor mem metrics? →
yes -
Do you want to monitor disk metrics? →
yes -
Do you want to monitor netstat metrics? →
no -
Do you want to add custom metrics to monitor? →
no -
Do you want to monitor any log files? →
yes -
Log file path →
/var/log/messagesと/var/log/secureなどを追加 -
Log group name →
/aws/ec2/system-logsなどを入力 -
Log stream name →
{instance_id}を入力
ウィザード完了後、設定ファイルが以下の場所に生成されます:
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
生成された設定ファイルを確認します:
sudo cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
方法B: 手動で設定ファイルを作成
手動で設定ファイルを作成する場合は、以下の手順に従います。
sudo mkdir -p /opt/aws/amazon-cloudwatch-agent/etc/
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json を作成します:
{
"agent": {
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/messages",
"log_group_name": "/aws/ec2/system-logs",
"log_stream_name": "{instance_id}",
"timezone": "Local"
},
{
"file_path": "/var/log/secure",
"log_group_name": "/aws/ec2/secure-logs",
"log_stream_name": "{instance_id}",
"timezone": "Local"
}
]
}
}
},
"metrics": {
"namespace": "CWAgent",
"metrics_collected": {
"cpu": {
"measurement": [
{
"name": "cpu_usage_idle",
"rename": "CPU_IDLE",
"unit": "Percent"
},
{
"name": "cpu_usage_iowait",
"rename": "CPU_IOWAIT",
"unit": "Percent"
}
],
"totalcpu": false,
"metrics_collection_interval": 60
},
"mem": {
"measurement": [
{
"name": "mem_used_percent",
"rename": "MEM_USED",
"unit": "Percent"
}
],
"metrics_collection_interval": 60
},
"disk": {
"measurement": [
{
"name": "used_percent",
"rename": "DISK_USED",
"unit": "Percent"
}
],
"metrics_collection_interval": 60,
"resources": [
"/"
]
}
}
}
}
4.3 CloudWatch Agentの起動と有効化
# CloudWatch Agentの起動
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config \
-m ec2 \
-s \
-c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
# ステータス確認
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a query \
-m ec2
4.4 CloudWatch Agentの自動起動設定
# systemdサービスの有効化
sudo systemctl enable amazon-cloudwatch-agent
sudo systemctl start amazon-cloudwatch-agent
# ステータス確認
sudo systemctl status amazon-cloudwatch-agent
ステップ5: CloudWatch Logsの確認
- AWS Management ConsoleでCloudWatchに移動します
- 左側のナビゲーションペインから「ログ」→「ロググループ」を選択します
- 設定したロググループ(例:
/aws/ec2/system-logs)が表示されていることを確認します - ロググループをクリックして、ログストリームを確認します
- ログストリームをクリックして、収集されたログを確認します
トラブルシューティング
CloudWatch Agentが起動しない場合
# ログの確認
sudo cat /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
# 設定ファイルの妥当性確認
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a validate-config \
-m ec2 \
-c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
# 再起動
sudo systemctl restart amazon-cloudwatch-agent
ログファイルにアクセスできない場合
CloudWatch Agentがログファイルの読み取り権限を持たない場合があります。推奨される解決策は、CloudWatch Agentを root ユーザーとして実行することです。
設定ファイルの agent セクションに run_as_user を "root" に設定します:
{
"agent": {
"run_as_user": "root"
},
...
}
この設定により、CloudWatch Agentは root 権限で実行され、すべてのログファイルにアクセスできます。これは最も簡単で確実な方法です。
設定を変更した後は、以下のコマンドで再起動してください:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
-a fetch-config \
-m ec2 \
-s \
-c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
sudo systemctl restart amazon-cloudwatch-agent
ログが表示されない場合
- IAMロールに
CloudWatchAgentServerPolicyが割り当てられているか確認します - CloudWatch Agentが実行中か確認します:
sudo systemctl status amazon-cloudwatch-agent - ログファイルのパスが正しいか確認します
- セキュリティグループでアウトバウンドがブロックされていないか確認します
まとめ
これで、Amazon Linux 2023上でセッションマネージャーを使用したログインと、CloudWatch Agentを使用したログ収集の設定が完了しました。この方法はSSHよりもセキュアで、ログ管理も容易です。必要に応じてさらなる設定やアラーム設定を行ってください。