タダです.
KMS を利用して暗号化や復号化をしている IAM ロールを調査しようと思い,CloudTrail のログから Athena で抽出するクエリを書くことがありました.この記事で備忘録としてまとめます.
抽出用のクエリ
抽出するためのクエリとして以下を実行しました.なお,CloudTrail ログのテーブルはドキュメントに沿って作りました.
SELECT userIdentity.sessioncontext.sessionissuer.arn as rolearn, eventname, requestparameters FROM "hoge"."cloudtrail_logs_pp" t CROSS JOIN UNNEST(t.resources) unnested (resources_entry) WHERE eventsource = 'kms.amazonaws.com' AND unnested.resources_entry.ARN LIKE '%arn:aws:kms:ap-northeast-1:123456789010:key/xxxx-xxxx-xxxx-xxxx-xxxx' AND useridentity.type != 'AWSService' AND useridentity.type != 'arn:aws:iam::123456789010:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_AdministratorAccess_xxxx';
resources
カラムではドキュメントを参照し,CROSS JOIN UNNEST
で配列のネストを解除しました.加えて,AWS サービスから KMS 呼び出しや IAM Identity Center を利用している場合にはその IAM ロールを除外しました.
抽出結果
抽出した結果は次のような形ででます.rolearn
が KMS を使っている IAM ロールです.eventname
が使っている KMS の API で,requestparameters
がリクエストパラメーターにあたります.
rolearn eventname requestparameters arn:aws:iam::123456789010:role/hoge01 GenerateDataKey {"encryptionContext":{"aws:s3:arn":"arn:aws:s3:::hoge/xxx"},"keyId":"arn:aws:kms:ap-northeast-1:123456789010:key/xxxx-xxxx-xxxx-xxxx-xxxx","keySpec":"AES_256"} arn:aws:iam::123456789010:role/hoge02 GenerateDataKey {"keySpec":"AES_256","encryptionContext":{"aws:s3:arn":"arn:aws:s3:::hoge/xxx"},"keyId":"arn:aws:kms:ap-northeast-1:123456789010:key/xxxx-xxxx-xxxx-xxxx-xxxx"} arn:aws:iam::123456789010:role/hoge03 GenerateDataKey {"keyId":"arn:aws:kms:ap-northeast-1:123456789010:key/xxxx-xxxx-xxxx-xxxx-xxxx","encryptionContext":{"aws:s3:arn":"arn:aws:s3:::hoge/xxx"},"keySpec":"AES_256"}
まとめ
Athena で CloudTrail ログから KMS の利用している IAM ロールを抽出してみました.