【正解】B
【0からの解説】
①前提知識
・Google Cloud のリソース階層は「組織 → フォルダ → プロジェクト → リソース(BigQuery データセットなど)」の構造で、上位で付与した IAM ロールは下位のすべてのリソースに継承されます。フォルダで1回付与すれば、そのフォルダ内の既存のプロジェクトだけでなく、今後追加されるプロジェクトにも自動的に適用されます。
・BigQuery データ閲覧者(roles/bigquery.dataViewer)は、テーブルやビューのデータとメタデータの読み取りを許可するロールで、データの変更・削除の権限は含みません。
・BigQuery メタデータ閲覧者(roles/bigquery.metadataViewer)は、データセットやテーブルのスキーマなどのメタデータだけを参照できるロールで、テーブルのデータ自体は読み取れません。
②要件と制約語の整理
・フォルダ内の「すべてのプロジェクトのすべての BigQuery データ」を読み取れること。
・変更・削除はできないこと(最小権限の原則)。
・プロビジョニングの「運用のオーバーヘッドを削減」すること。
③正解の理由
B はフォルダに BigQuery データ閲覧者ロールを1回付与するだけで、IAM の継承によりフォルダ配下の全プロジェクト・全データセットのデータを読み取れるようになります。読み取り専用のロールなので最小権限を満たし、プロジェクトやデータセットが増えても追加作業が不要なため、運用のオーバーヘッドも最小です。チームに承認された範囲がまさに「フォルダ内のすべての BigQuery データ」なので、フォルダでの付与は過剰な権限にもなりません。なお、実際にクエリを実行するには、ジョブを実行するプロジェクトで BigQuery ジョブユーザー(roles/bigquery.jobUser)なども必要ですが、選択肢の中でデータの読み取り権限を最小の運用負荷で与えるのは B です。
【誤りの選択肢】
A:権限の範囲としては正しいものの、プロジェクトごとに個別に付与する必要があり、プロジェクトが増えるたびに付与作業が発生します。フォルダ1か所で付与できる B に比べて運用のオーバーヘッドが大きく、要件に反します。
C:データセットごとに付与するのは最もきめ細かい方法ですが、全プロジェクトの全データセットに付与作業が必要で、データセットが追加されるたびにも作業が発生します。「すべての BigQuery データ」へのアクセスが承認済みである以上ここまで細かくする必要はなく、運用負荷が最も大きくなります。
D:BigQuery メタデータ閲覧者はスキーマなどのメタデータしか参照できず、テーブルのデータを読み取れないため、データ分析という目的を果たせません。
【参考】
BigQuery の IAM ロールと権限リソース階層を使用したアクセス制御 | Identity and Access Management (IAM)