6
4

More than 1 year has passed since last update.

BigQueryのデータセットにアクセス出来るアカウント一覧の取得方法

Last updated at Posted at 2021-12-02

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
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4