はじめに
AWS Systems Manager のSession Managerを利用してLinuxの操作ログを取得しようと思います。
うまくログが取れない場合に確認するべき点をメモしておきます。
利用サービス
以下のサービスを利用します
- AWS Systems Manager(以下SSMと表記)
- Session Manager(以下セッションマネージャーと表記)
- EC2(Linux)
- Windowsは検証していませんが、セッションマネージャーから利用できるPowerShellの結果も同様になることが想定されます
- S3
- ログの保存先に利用します
本題
ログを保存するにはEC2側でS3にログを書き込むための権限が必要です。
EC2に割り当てる権限
EC2には以下の権限を持つIAMロールを割り当てます
- セッションマネージャーを利用するための権限
- AmazonSSMManagedInstanceCore(AWS 管理ポリシー)
- 権限過剰ですがEC2の管理に必須の権限と認識しているのでこちらを設定しています(権限を限定したい場合)
- AmazonSSMManagedInstanceCore(AWS 管理ポリシー)
- 独自で作成した以下のポリシー
- json形式で記述します(今回は put-Session-Manager-log-to-S3.json という名前を使用します)
- <S3バケット名> の部分をログ保存先のバケットに書き換えて使用します
put-Session-Manager-log-to-S3.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::<S3バケット名>/*",
"arn:aws:s3:::<S3バケット名>"
]
}
]
}
今回の内容とは異なるがAWSのドキュメントを参考にすれば解決できそうなケース
以下のケースの場合は参考のリンク先をご確認下さい。
- 「AmazonSSMManagedInstanceCore」ではなくセッションマネージャーだけの権限に限定したい場合
- S3を暗号化している場合
- S3ではなくCloudWatch Logsにログを保存する場合
#参考
Session Manager 用のカスタム IAM インスタンスプロファイルを作成する
Session Manager と Amazon S3 および CloudWatch Logs のアクセス許可を持つインスタンスプロファイルを作成する (上記ページ内の関連部分)