【正解】A
【0からの解説】
① 前提知識・
IAM ポリシー バインディング: 「誰に(プリンシパル)」「どのロールを」付与するかの組み合わせです。Google グループをプリンシパルにすると、グループのメンバー全員にロールが付与され、メンバーの追加・削除だけでアクセスを管理できます。
・
IAM Conditions: ロールの付与に条件を付ける機能です。日時の属性 request.time を使えば、例えば
request.time >= timestamp("…-10-01T00:00:00Z") && request.time < timestamp("…-11-01T00:00:00Z") のように、指定した期間だけ有効な一時的アクセスを宣言的に設定できます。Cloud Storage で IAM Conditions を使うには、バケットで均一なバケットレベルのアクセス(uniform bucket-level access)を有効にします。
・
roles/storage.objectViewer(Storage オブジェクト閲覧者): オブジェクトの一覧表示と読み取りだけができる読み取り専用ロールです。
・グループ経由でアクセスしても、Cloud Audit Logs のデータアクセス監査ログ(Cloud Storage では有効化が必要)には
実際にアクセスした個人のアカウントが記録されるため、個人単位で追跡できます。
② 要件と制約語の整理・外部監査人は
単一の Google グループで管理する(ガバナンス ポリシー)。
・
一時的な
読み取り専用アクセス、対象は audit-evidence-bucket。
・
個々の監査人の ID まで追跡可能であること。
・
10 月の 1 か月間だけ有効であること。
・
管理上のオーバーヘッドを避けること。
③ 正解 A が要件をどう満たすか・Google グループに roles/storage.objectViewer を付与することで、ガバナンス ポリシーどおり「単一のグループ」「読み取り専用」を満たします。
・時間ベースの IAM Condition により、10 月 1 日から 11 月 1 日までの間だけアクセスが有効になり、期限が来れば自動的にアクセスが失効します。誰かが手動でロールを外す必要も、スクリプトを保守する必要もないため、管理上のオーバーヘッドが最小です。
・各監査人は自分の Google アカウントでアクセスするため、監査ログで個人を特定できます。
【誤りの選択肢】
B:署名付き URL は、URL を知っている人なら誰でもアクセスできる「持参人払い」型の仕組みで、アクセスは署名したサービス アカウントの権限で行われるため、個々の監査人の ID まで追跡できません。オブジェクトごとに URL を生成・配布する手間もかかり、新しく追加された証跡ファイルにも対応できません。さらに V4 署名付き URL の有効期限は最長 7 日間であり、1 か月後の 11 月 1 日を有効期限にすること自体ができません。
C:スケジュールに合わせて IAM バインディングを追加・削除すれば動作はしますが、Cloud Scheduler や Cloud Run functions(旧 Cloud Functions)のコードを自前で作成・保守する必要があり、ジョブの失敗で権限が外れないなどのリスクもあります。IAM Conditions で宣言的に実現できることを独自実装で置き換えるもので、「管理上のオーバーヘッドを避ける」要件に反します。
D:Workforce Identity 連携は、外部の ID プロバイダ(IdP)のユーザーを Google Cloud に直接サインインさせる仕組みで、外部 IdP の属性を「Google グループにマッピングする」ものではありません。プロバイダのセッション有効期間は最長でも 12 時間であり、1 か月には設定できません。またセッション時間はアクセス期間(10 月中のみ)を制限する仕組みでもないため、期間限定アクセスの要件を満たせません。IdP 連携の構築という不要な管理負荷も発生します。
【参考】
IAM Conditions の概要 | Identity and Access Management (IAM)Identity and Access Management | Cloud Storage