目的
AWSを利用したシステムの運用時にSystems Managerを利用してEC2インスタンスを操作することもあるかと思います。
その際にEC2インスタンスの操作ログを取得したい場合もあるかと思いますので、操作ログ取得手順をまとめたいと思います。
手順としては、以下となります。
- 操作ログ格納用のS3バケット作成
- EC2インスタンスのIAMロールにS3バケットへのアクセス権限の付与
- Systems Managerのログ出力設定
1. 操作ログ格納用のS3バケット作成
本手順では、「prjtest-dev-log-ssm-20230101」という名称でS3バケットを用意します。
2. EC2インスタンスのIAMロールにS3バケットへのアクセス権限の付与
EC2インスタンスのIAMロールには、以下のIAMポリシーが必要となります。
- AmazonSSMManagedInstanceCore
- AmazonS3FullAccess *1
*1 「AmazonS3FullAccess」ポリシーが必要と記載しましたが、以下の権限を備えたIAMポリシーが紐づいていれば問題ございません。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetEncryptionConfiguration"
],
"Resource": "*"
}
]
}
補足
ちなみにですが、Systems ManagerからEC2インスタンス接続時に、アクセス権限が不足していると以下のエラーが表示される場合がございます。その際はEC2インスタンスのIAMロールを見直し、S3へのアクセス権限が存在するかを確認する必要がございます。
3. Systems Managerのログ出力設定
補足
S3バケットに出力されたログは文字化けしています。
正直なところ原因が良くわかりませんが、メモ帳やサクラエディタで文字コードをutf8にしても文字化けは解消されませんでした。
Windowsユーザーの場合は、Powershellにて以下のコマンドを利用した場合は、文字化けを解消することが出来ます。
今回はAmazon Linux2の文字コードをutf8にしています。
Get-Content [ログファイル名] -Encoding utf8
実運用を考えた時には、何か障害発生時に操作ログを確認することになるかと思います。
全てのログを見るわけではない場合がほとんどだと思いますので、いったん、S3バケットに操作ログを格納し、何かあった際に、上記のコマンドを利用する運用もありかと考えています。
参考