[アップデート] CloudTrail Lake のデータを簡単に CloudWatch Logs にインポート可能になりました
CloudTrail Lake に保存されたデータを簡単に CloudWatch にインポートできるようになりました。
専用の IAM ロールを用意して、インポートタスクを実行するだけで、古いログを CloudWatch に取り込むことができます。
CloudTrail Lake は簡単に CloudTrail の分析基盤を構築できる点がメリットですが、CloudWatch ログに各種ログが揃っているとそれらを関連付けた分析がしやすくなります。
例えば、何らかの SLI に違反した際にアプリケーションログと CloudTrail ログから直近実行された API を関連付けて調査しやすくなります。
運用時の調査を AI に任せることも考えても、各種ログを統一された方法で分析できることのメリットはやはり大きいです。
この辺りのメリットを重視して CloudWatch で CloudTrail ログを扱おうと思った際、既存のログを簡単にインポートできるのは嬉しいですね。
やってみる
まず、公式ドキュメントに記載されている権限を付与した取り込み用の IAM ロールを作成します。
The provided IAM role must trust the "cloudtrail.amazonaws.com" principal and have the following permissions:
・cloudtrail:GetEventDataStoreData
・logs:CreateLogGroup
・logs:CreateLogStream
・logs:PutResourcePolicy
・(If source has an associated AWS KMS Key) kms:Decrypt
・(If source has an associated AWS KMS Key) kms:GenerateDataKey
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/API_CreateImportTask.html
cloudTrailImportRole という名前で作成しました。

付与した権限
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ImportCloudTrailData",
"Effect": "Allow",
"Action": [
"cloudtrail:GetEventDataStoreData",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutResourcePolicy"
],
"Resource": ["*"]
}
]
}
信頼ポリシーでは CloudWatch ログではなく、cloudtrail.amazonaws.com を指定する必要があります。

信頼ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
AWS CLI の create-import-task を利用してインポートタスクを作成します。
$ aws logs create-import-task \
--import-source-arn $IMPORT_SOURCE_ARN \
--import-role-arn $IMPORT_ROLE_ARN
{
"importId": "5a76bc13-1234-4feb-9b69-9ea1113c062b",
"importDestinationArn": "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxx:log-group:aws/cloudtrail/21432a84-8457-4225-8ac9-50c41bd790ad",
"creationTime": 1767186431228
}
describe-import-tasks を利用することでインポートタスクの状態を確認できます。
今回は CloudTrail Lake 有効化直後に実行したので即座に完了していました。
$ aws logs describe-import-tasks --import-id 5a76bc13-1234-4feb-9b69-9ea1113c062b
{
"imports": [
{
"importId": "5a76bc13-1234-4feb-9b69-9ea1113c062b",
"importSourceArn": "arn:aws:cloudtrail:ap-northeast-1:xxxxxxxxxxxx:eventdatastore/21432a84-8457-4225-8ac9-50c41bd790ad",
"importStatus": "COMPLETED",
"importDestinationArn": "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxx:log-group:aws/cloudtrail/21432a84-8457-4225-8ac9-50c41bd790ad",
"importStatistics": {
"bytesImported": 66560667
},
"importFilter": {
"startEventTime": 1767162131477,
"endEventTime": 1767186431167
},
"creationTime": 1767186431167,
"lastUpdatedTime": 1767186461187
}
]
}
※ インポートしたデータは 70MB 程度だったためにすぐ完了しただけで、データ量に応じてインポート時間が伸びると考えられます。
上記コマンド実行後、ログクラスが Infrequent Access の CloudWatch ロググループとしてインポートが完了しました。

インポートタスク自体に料金がかかりませんが CloudWatch の取り込み料金は発生するので、古いログは Infrequent Access でインポートした方がメリットが大きいだろうということでしょう。
最近追加されたファセットが利用できなかったり、フィールドインデックスが使えなかったりする点には注意が必要ですが、CloudWatch Insights によるクエリは可能です。

また、インポート時に Unix 時間で指定して取り込むログの期間を制限することが可能です。
aws logs create-import-task \
--import-source-arn $IMPORT_SOURCE_ARN \
--import-role-arn $IMPORT_ROLE_ARN \
--import-filter startEventTime=1767162131477,endEventTime=1767172131477
{
"importId": "5a76bc13-1234-4feb-9b69-9ea1113c062b",
"importDestinationArn": "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxx:log-group:aws/cloudtrail/21432a84-8457-4225-8ac9-50c41bd790ad",
"creationTime": 1767186431228
}
上手く活用することで、インポート不要な期間がある場合にログの取り込み料金を抑えることが可能です。
最後に
CloudTrail Lake から CloudWatch に過去データを簡単にインポートできるようになりました。
re:Invent 2025 で CloudWatch Logs に複数のアップデートが入り、アプリケーション関連のログもセキュリティ系のログもまとめて CloudWatch Logs に集約するのがとても便利だなと思ってきています。
CloudWatch MCP サーバー 経由での分析も便利ですし。
CloudTrail Lake のセットアップの楽さは非常に良いと思っているのですが、今後は CloudWatch で分析する方針も検討していきたいですね。







