タダです.
AWS のマルチアカウント運用を行っていると,各システムアカウントのログをログ管理用アカウントに集約して管理することがあると思います.今回はログ集約アカウント(この記事ではアカウント B とします)に対して別の AWS アカウント(こちらはアカウント A とします)から Athena でクエリを行った時の備忘録記事です.
事前準備
まず事前準備としてアカウント B 側で以下の作業を行います.
- S3 バケットポリシー更新
- Glue のデータカタログポリシー変更
- S3 オブジェクト所有者の変更
S3 バケットポリシー更新
CloudTrail ログが格納されたバケットポリシーを更新します.以下の定義を追記して更新しました.
{ "Sid": "Policy_For_CrossAccount_GetObject", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[アカウントA]:root" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::[ログバケット名]", "arn:aws:s3:::[ログバケット名]/*" ] }
参考情報
Glue のデータカタログポリシー変更
Athena で使う Glue のデータカタログには以下のポリシーを設定しました.
{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::[アカウントA]:root" }, "Action" : "glue:*", "Resource" : [ "arn:aws:glue:ap-northeast-1:[アカウントB]:catalog", "arn:aws:glue:ap-northeast-1:[アカウントB]:database/*", "arn:aws:glue:ap-northeast-1:[アカウントB]:table/*" ] } ] }
参考情報
S3 オブジェクトの所有者の変更
デフォルトの設定ですと,オブジェクトの所有者は aws_cloudtrail_ap-northeast-1
になっていて,Athena でクエリを行っても権限不足のエラーが出たのですが,S3 のオブジェクト所有者の変更を行いました.これを行うことで設定変更後以降のオブジェクトの所有者は アカウントの管理者の名前に変更されます.
Athena 実行アカウントの設定
次にアカウント A 側の設定です.アカウント A 側で次の設定を行いました.
- Athena 実行ユーザーへの権限追加
- Athena のデータソースの追加
- Athena のクエリ実行ログ出力先の追加
Athena 実行ユーザーへの権限追加
アカウント A での実行ユーザー権限を追加します.検証目的だったこともあり,自分の設定では IAM Identity Center の Administrator ロールを使っていたのですが,そこにクロスアカウント用の権限を追加しました(本来は別ロール作るべきですが,面倒くさがりその辺をしてませんでしたmm).
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:ap-northeast-1:[アカウントB]:catalog", "arn:aws:glue:ap-northeast-1:[アカウントB]:database/[データベース名]", "arn:aws:glue:ap-northeast-1:[アカウントB]:table/[テーブル名]/*" ] } ] }
Athena のデータソースの追加
Athena のデータソースに S3 - AWS Glue Data Catalog
でアカウント B の情報を埋めていきます.
Athena のクエリ実行ログ出力先の追加
Athena のクエリ実行ログ出力先の追加をします.Athena V2 になってから使うのが初めてだったためこの設定も必要でした.
Athena の実行
以上の設定をして CloudTrail のテーブル作成を行ってクエリ発行したら,CloudTrail のログを見えました.
まとめ
Athena のアカウント跨ぎでのクエリ実行を行ったので備忘録にしました.