🐡

BigQueryの承認済みルーティンを使って、最小権限の原則を維持しつつテーブル関数を呼び出せるようにする

に公開

はじめに

BigQueryにあるテーブルのデータを利用するため、テーブル関数を呼び出す方法を考えていた。サービスアカウント経由でテーブル関数を呼び出してみたところ、テーブル関数を利用するためにはテーブル全体に対する読み取り権限が必要であることに気がついた。

ではテーブルに対するbigquery.tables.getDataを付与すれば良いかと考えた。しかし、当該テーブルは大容量なテーブルになっており、サービスアカウントやユーザーに対してテーブル全体の権限を付与すれば、スキャン量が増大して思わぬ課金に繋がる可能性がある。最小権限の原則の観点においても望ましい権限設計ではない。

つまり、テーブル関数を呼び出すためにはテーブル全体に対する読み取り権限を付与する必要があるが、それは最小権限の原則を破ってしまう問題に陥った。この問題を解決するにはどうしたらいいかを考えて、最終的にはなんとかなったので、対処法をメモしておく。

TL;DR

BigQueryの承認済みルーティンを利用した。

承認済みルーティンとは

まず「ルーティン」とはBigQueryの一部機能に対する総称で、ユーザー定義関数やテーブル関数、ストアドプロシージャなど、5つの機能が該当する。

https://cloud.google.com/bigquery/docs/routines-intro?hl=ja

通常、これらのルーティンを呼び出すためには、そのルーティンが利用するテーブルに対する読み取り権限が必要だ。しかし、承認済みルーティンを利用することで、ルーティンが利用するテーブルに対する読み取り権限を付与することなく、ルーティンを呼び出すことができる。

https://cloud.google.com/bigquery/docs/authorized-routines?hl=ja

手順については公式ドキュメントに書いてあるのでここでは書かない。

終わりに

BigQueryには、承認済みルーティン以外にも「承認済み」シリーズがあり、この手の自体に対応するためには便利そうだった。
https://cloud.google.com/bigquery/docs/authorized-datasets?hl=ja
https://cloud.google.com/bigquery/docs/authorized-views?hl=ja

GitHubで編集を提案

Discussion