Google CloudでService Accountを作成したものの、色々な事情で使われなくなることもあります。
未使用のService Accountが残っているとセキュリティ的な問題に繋がりかねないので、定期的な棚卸しが必要です。
以下のクエリを使うと監査ログから直近30日間で利用実績のないService Accountを抽出できます。
なお、ここで参照しているテーブルたちの作成方法については以下の記事をご覧下さい。
with service_accounts as (
select
json_value(resource.data, '$.email') as email,
from <Cloud Asset Inventoryのresource情報>
where asset_type = 'iam.googleapis.com/ServiceAccount'
), audit_logs as (
select
date(timestamp, 'Asia/Tokyo') as date,
protopayload_auditlog.authenticationInfo.principalEmail as email,
from <Audit LogのActivityログ>
union all
select
date(timestamp, 'Asia/Tokyo') as date,
protopayload_auditlog.authenticationInfo.principalEmail as email,
from <Audit LogのData Accessログ>
), usage_counts as (
select
email,
count(*) as count
from audit_logs
where date > current_date('Asia/Tokyo') - interval 30 day
group by email
)
select
email,
ifnull(count, 0) as count,
from service_accounts
left join usage_counts using(email)
order by count asc