サマリ
- ControlTowerでログアーカイブアカウントに保管しているCloudTrailを検索しようとしたらエラーが出た
- テーブル設計はドキュメント通りで問題無くクエリ可能なはず
- IAM側の権限は必要十分だった
本文
Athenaを使ってAWSが生成するログを検索する場合のテーブル定義については以下にまとまっているのでこれを使ってサクッとテーブルを作る
AWS のサービス ログのクエリ
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/querying-aws-service-logs.html
クエリを投げるとオブジェクトに対しての権限が足りない旨が表示されている。
この権限が足りないってのがハマったポイントでした。実際にオブジェクトを見に行ったら権限エラーが出たんですが、詳細を呼んでみると復号化が出来ていないみたいだったのでピンと来ました。
他のアカウントのユーザーに KMS キーの使用を許可する
https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/key-policy-modifying-external-accounts.html
ドキュメントを参考にControlTowerの管理アカウントのKMSにポリシを追加する。
{
"Sid": "Allow a LOG ACCOUNT to use this KMS key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT_ID:root"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
手元の検証用なのでロール単位ではなく、アカウントレベルで今回は許可を与えた。
結論
ControlTowerででKMSの暗号化を有効化していて、KMSのキーポリシに許可を書いていないだけだった。