継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

KMS を利用をしている IAM ロールを抽出する

タダです.

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 ロールを抽出してみました.