BigQuery Advent Calendar 2021 3日目の記事になります!
BigQueryのデータセットにアクセス出来るアカウント一覧を取りたいという場面があり色々苦労しつつも取り方がわかりました。
ここでいうアクセス出来るとはデータセット内のテーブルのデータを参照出来ることを指しています。
このようなデータを取りたい場合は基本的にCloudAssetInventoryを使えば出来ます。
以下のコマンドでまずは取ってみました
org配下の権限をすべて確認するためこちらのコマンドを叩くにはorgレベルの権限が必要となります。
gcloud asset analyze-iam-policy --organization="XXXXXXX" --full-resource-name='//bigquery.googleapis.com/projects/XXXXXX/datasets/XXXXX' --permissions='bigquery.tables.getData'
これでなんとなく取れたのですが、googleGroupで取れてしまうのでGroupに誰がいるかわかりません。
そこで expand-groups
をつかいます
gcloud asset analyze-iam-policy --organization="XXXXXXX" --full-resource-name='//bigquery.googleapis.com/projects/XXXXXX/datasets/XXXXX' --permissions='bigquery.tables.getData' --expand-groups
こちらにするとグループは展開されました!!
ですが、まだ問題がありプロジェクトレベルでの編集権限ある人など基本ロールをもつアカウントの詳細が表示されませんでした。
一旦他の方法もさぐってみて以下のコマンドだと取れそうだったのですが
gcloud projects get-iam-policy PROJECT_ID --flatten="bindings[].members" --format="table(bindings)" --filter="bindings.role=(roles/owner,roles/editor,roles/viewer)"
こちらで行う場合にはorg配下の全プロジェクトに対してこちらのコマンドを叩かなければいけずあまり現実的ではなさそう
そして、サポートなどに問い合わせた結果、なぜかpermissons
オプションを取ると基本ロールも展開されることがわかりました!!
gcloud asset analyze-iam-policy --organization="XXXXXXX" --full-resource-name='//bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID' --expand-groups
これで、dataset配下のテーブルに対して読み取り権限のある人一覧を取得することが出来ました!
上記のコマンドですと余分な情報が色々出てしまうので、とりあえずデータセットに対してなんかしらの権限ある人をだすでよいのでした、雑ですが以下のように絞り込めばとれそうです。
ほんとはjsonで出力してjqコマンドなどで必要な権限の人だけを取ったりするのがいいのかな
gcloud asset analyze-iam-policy --organization="XXXXXXX" --full-resource-name='//bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID' --expand-groups | grep @ |awk -F ":" '{print $NF}' | sort -u