背景
- BigQueryの権限設定、Terraformなどを使ってIaCとして管理することが多い
- しかし、様々な事情で手動で管理しなければいけないケースもたまにある
- 個別のデータセットに対する権限付与の場合、Web Consoleからぽちぽちとやればよい
- 「データセットAに対する権限と同じやつをお願いね!」となった場合、結構めんどい
- 既存の権限が数十個のGoogleグループに付与などされているとぽちぽちするのは疲れる
やり方: bqコマンドとjqを組み合わせる
既存のデータセットに対する権限設定はbqコマンドでjson形式でひっこ抜けます。
jsonをjqコマンドで加工してあげて完成。
% jq -s add \ <(bq show --format=prettyjson my-project:dataset_a | jq '{access: .access}') \ <(bq show --format=prettyjson my-project:dataset_b | jq 'del(.access)') \ > result.json % bq update --source result.json my-project:dataset_b
その他の議論ポイント
データセットAとデータセットBに共通の閲覧権限を持たせたいという場合、Google Group側でメールグループを管理し、それに対しデータセットの権限付与をする、という形式もありかもしれない。具体的には
- dwh-viewer-groups@my-project.com
- my-group-a@my-project.com
- my-group-b@my-project.com
- my-group-c@my-project.com
という階層関係のメールグループを作り、BigQueryのデータセットの権限はdwh-viewer-groups@my-project.com
だけ付与。権限の追加や削除はGoogle Groupのみで変更する、という形。所属している組織のGoogle Groupの運用体制によってはこちらを採用する場合があってもよさそう。