【正解】A
【0からの解説】
①前提知識:BigQuery の IAM では「ジョブ(クエリなど)を実行する権限」と「データ(データセット・テーブル)にアクセスする権限」が別々のロールに分かれています。
・roles/bigquery.jobUser(BigQuery ジョブユーザー):プロジェクト内でジョブを作成・実行する権限(bigquery.jobs.create)を持ちます。クエリはジョブとして実行されるため、SQL を実行するにはこの権限が必要です。データそのものへのアクセス権は含みません。
・roles/bigquery.dataOwner(BigQuery データオーナー):データセットとテーブルの読み取り・作成・更新・削除(bigquery.tables.updateData など)や、データセットの情報取得(bigquery.datasets.get)を含みます。データセットの一覧表示には bigquery.datasets.get 権限が必要で、プロジェクト レベルで付与すればプロジェクト内のデータセットを列挙できます。
②要件と制約語の整理:(a) テーブルに対してクエリを実行する → ジョブ実行権限、(b) テーブルを更新する → データの書き込み権限、(c) プロジェクト内のすべてのデータセットを一覧表示する → bigquery.datasets.get、(d)「最小権限の原則に従う(least privilege)」→ 必要な権限をカバーする組み合わせのうち、余計な権限が最も少ないもの。
③正解の理由:jobUser でクエリ ジョブを実行し、dataOwner でテーブルの読み書きとデータセットの一覧表示を行えるため、A はすべての要件を満たします。厳密には dataOwner はデータセットのアクセス制御(IAM ポリシー)の変更やデータセットの削除まで含むため、選択肢にない roles/bigquery.dataEditor の方がさらに絞り込まれたロールです。しかし提示された選択肢の中で、要件をすべて満たしつつ管理者ロールほど広くないのは A だけです。試験では「要件を満たす最小の組み合わせ」を選択肢の中から比較して選びます。
【誤りの選択肢】
B:roles/bigquery.connectionUser は外部データソースへの接続(BigQuery 接続)を使用する権限、roles/bigquery.dataViewer はデータの読み取り専用権限です。テーブルの更新ができず、またジョブ実行権限(bigquery.jobs.create)も含まれないためクエリも実行できません。要件を満たしません。
C:roles/bigquery.admin は BigQuery のすべてのリソースに対する完全な管理権限で、要件はすべて満たしますが、予約の管理や他ユーザーのジョブの取り消し、全データセットの削除など不要な権限まで付与してしまいます。最小権限の原則に反します。
D:roles/bigquery.studioUser は BigQuery Studio(ノートブックや保存したクエリなど)を利用するためのロールで、テーブルの更新権限は含みません。roles/bigquery.filteredDataViewer は行レベルのアクセス ポリシーによってフィルタされた行だけを閲覧できる読み取り専用ロールで、通常は行アクセス ポリシーを通じて付与されるものです。テーブル更新の要件を満たしません。
【参考】
データセットの一覧表示ロールと権限 | Identity and Access Management (IAM)