CloudWatchロググループとプライベートサブネットEC2インスタンスの経路確保確認
プライベートサブネットのEC2インスタンス(AmazonLinux2)、VPC、CloudWatch Logsの3者間を意識して経路確保を行う。プライベートサブネットのEC2インスタンスでCloudWatchエージェントのインストールと有効化を確認、CloudWatchで「ログストリーム」ではなく、「ロググループ」が既に作られていることも事前に確認しておく。
CloudWatchLogs用VPCエンドポイントの確認
- com.amazonaws.リージョン.logs
- com.amazonaws.リージョン.monitoring
1はCloudWatchLogs、2はCloudWatch(カスタム)メトリクス
CloudWatchLogs用のVPCエンドポイントのセキュリティグループを選んでいることを確認。
Private DNS names enabled(プライベートDNS名を有効化にする)をtrue(有効化)にします。
VPCエンドポイントポリシーは絞ったほうがいいですが、フルアクセスでいきます。このへんは別記事でまとめたいと思います。
つくったら、「com.amazonaws.リージョン.logs」のVPCエンドポイントの「タブ」の「詳細」で「DNS名」をメモっておく。
プライベートサブネットEC2インスタンスのセキュリティグループの確認
https 443のアウトバウンドをプライベートサブネットEC2のセキュリティグループからCloudWatchLogs用のVPCエンドポイント達用のセキュリティグループにトラフィックを送られるようにする。
CloudWatchLogs用VPCエンドポイントのセキュリティグループの確認
CloudWatchLogs用のVPCエンドポイントのセキュリティグループは、CloudWatchLogs用のVPCエンドポイントがhttps 443のインバウンドをログを取りたいプライベートサブネットのEC2から受けられるようにする。
プライベートサブネットEC2インスタンスのamazon-cloudwatch-agentの設定
プライベートサブネットEC2インスタンスのfile_config.jsonに上記でメモった「com.amazonaws.リージョンを選ぶ.logs」のVPCエンドポイントの「DNS名」をjsonの”endpoint_override”に書き込む
file_config.jsonの場所
/etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d/file_config.json
こんな感じのところに書き込む
{
"logs": {
"endpoint_override": "vpce-XXXXXXXXXXXXXXXXXXXXXXXXX.logs.リージョン.vpce.amazonaws.com",
......
},
}
endpoint_override 設定しなくてもロググループのログストリームが問題なく機能してる・・・。なんでだろ?VPCエンドポイントポリシーがフルアクセスだから?あまり気持ちの良いことではない・・・。
プライベートサブネットEC2インスタンスのIAMロールのIAMポリシー確認
- CloudWatchAgentServerPolicy
- AmazonSSMManagedinstanceCore
がアタッチされていることを確認。2は、SSMでCloudWatchエージェントをインストールする場合に必要。
最後にCloudWatchロググループのログストリームにログが送られているか目視で確認してください。