【正解】D
【0からの解説】
①前提知識
・AEAD 暗号化関数:AEAD(Authenticated Encryption with Associated Data、認証付き暗号)は、データの機密性と改ざん検知を同時に提供する暗号方式です。BigQuery では SQL の中で値単位に暗号化・復号できる関数群が用意されています(KEYS.NEW_KEYSET / KEYS.NEW_WRAPPED_KEYSET で鍵のセット(キーセット)を作成し、AEAD.ENCRYPT で暗号化、AEAD.DECRYPT_STRING / AEAD.DECRYPT_BYTES で復号)。人(行)ごとに別々のキーセットを使い分けられるのが特徴です。
・暗号シュレッディング(crypto-deletion / crypto-shredding):暗号鍵を削除することで、その鍵で暗号化されたデータを読み取り不能にする手法です。データ本体を探して消さなくても、コピーやバックアップに残ったデータも含めて復号できなくなります。
・CMEK(顧客管理の暗号鍵):Cloud KMS の鍵で、テーブルやデータセット単位の保存時の暗号化を制御する仕組みです。
・ポリシータグによる列レベルのアクセス制御・動的データ マスキング:誰が列の平文を見られるかを IAM で制御する仕組みで、保存されているデータ自体は暗号化されないまま(BigQuery 標準の保存時暗号化のみ)です。
②問題文の要件の整理
・非常に機密性の高い個人データ、厳格なプライバシー規制
・従業員が離職したら、機密データの「値」を読み取り不能にする(=誰に権限があるかではなく、値そのものを復元できなくする)
③正解の理由
従業員ごとにキーセットを作成して鍵用のテーブルに保持し、その従業員の機密値を AEAD.ENCRYPT で暗号化して保存しておきます。従業員が離職したら、その従業員のキーセット(鍵テーブルの該当行)を削除するだけで、その従業員のデータはどのテーブルやコピーにあっても復号できなくなります(暗号シュレッディング)。他の従業員のデータには影響しません。Google のドキュメントでも、顧客ごとに異なる鍵で暗号化しておけば、複数のテーブルに散在するデータを暗号削除できる、という AEAD の代表的なユースケースが紹介されています。キーセットを Cloud KMS の鍵でラップ(エンベロープ暗号化)すれば、鍵そのものの保護も強化できます。
【誤りの選択肢】
A:ポリシータグによる列レベルのアクセス制御は「誰がその列を読めるか」を制御するだけで、データは読み取り可能な状態のまま残ります。離職者の権限を取り消しても、権限を持つ他のユーザーやエクスポート / コピー先では値をそのまま読めるため、「値を読み取り不能にする」要件を満たしません。
B:動的データ マスキングもポリシータグに基づいて、クエリ結果の表示をユーザーごとにマスクする機能で、保存されている値自体は変わりません。権限の取り消しはアクセス制御にすぎず、値を読み取り不能にはしません。
C:CMEK はテーブルやデータセット単位で保存データを保護する鍵です。鍵を破棄するとその鍵で保護されたテーブル全体が読めなくなり、在籍中の他の従業員のデータまで失われます。従業員ごとに別のテーブルと鍵を用意するのは現実的ではなく、粒度が粗すぎます(Cloud KMS の鍵バージョンの破棄には既定で 30 日の破棄予定期間もあります)。
【参考】
エンベロープ暗号化 | Cloud Key Management Service顧客管理の暗号鍵(CMEK) | Cloud Key Management Service鍵バージョンの破棄と復元 | Cloud Key Management Service