代表的な面接トピック

システムデザイン面接:プライバシー保護データクリーンルームの設計

システム設計難しい
Offer.cc 編集チーム公開日 更新日

質問

広告主とメディアパートナーが、互いの未加工ユーザーレコードを読み取ることなく、オーディエンスの重複やコンバージョン指標を計算できるデータクリーンルームを設計してください。マルチテナンシー、監査、同意撤回、および繰り返しのクエリによる推論からの保護をサポートする必要があります。

プロンプトとスコープ

2つの企業が、メールアドレス、デバイス識別子、またはイベント行を互いにコピーすることなく、重複、コンバージョン、またはアトリビューションの指標を計算したいと考えています。この面接では、「データが元の場所にとどまる」ことが共有契約ではなく実行レイヤーの統制になっているか、そして小規模コホート、繰り返しクエリ、同意撤回、マルチクラウド展開を適切に処理できるかが試されます。

面接官が見ているポイント

システムデザイン面接では通常、最も難易度の高いモデル、認可、障害パスを掘り下げる前にスコープを明確にすることが高く評価されます。データエンジニアリングの面接ガイダンスでも、システムデザイン、ガバナンス、プライバシーを個別の評価領域として挙げています。AWS Clean Roomsは最小権限、暗号化、CloudTrailを重視しており、Salesforceのアーキテクチャガイダンスではゼロコピー処理、ID整合、最小集計しきい値、改ざん検知監査を実行境界に配置しています。優れた回答は、各ルールを適用するコンポーネントとそれが防ぐ攻撃を具体的に挙げます。

最初に明確にすべき質問

参加者の数、データが各クラウドアカウント内にとどまるかどうか、許可される分析と出力の粒度、受信者が正確なカウントを表示できるかどうか、差分プライバシーが必要かどうか、IDマッチングにパートナー提供のトークンを使用するか信頼できるマッピングサービスを使用するか、同意撤回が有効になるまでの許容時間、およびデータレジデンシー、鍵の所有権、監査保持の要件を確認します。1回限りの2者間集計であれば制御されたバッチを使用できますが、自由なSQLを許可する場合は脅威モデルにクエリ言語とプライバシーバジェットを含める必要があります。

30秒で答えるフレームワーク

切り出しの例:「クリーンルームをコントロールプレーン、データコネクタ、ポリシーコンパイラ、分離された実行エンジン、結果パブリッシャーに分割します。生テーブルは参加者のストレージに保持したまま、参加者はメタデータと許可された目的を登録します。エンジンはデータ境界で制限付きクエリを実行し、分離されたサービスがIDマッチングを行います。公開前に、最小コホートしきい値、差分プライバシーバジェット、結果スキャンを適用します。クエリ、ポリシーバージョン、鍵操作はイミュータブルな監査証跡に記録されます。同意撤回は新しいジョブをブロックし、キャッシュされた結果を無効化します。ジョブはテナント、リージョン、鍵によって分離されます。」

ステップバイステップの詳細解説

ステップ1:コラボレーション契約をポリシーに変換する

コントロールプレーンには、参加者、データセット、目的、許可された結合キー、出力列、リージョン、有効期限、同意バージョンを保存します。ポリシーはバージョン管理され署名され、ジョブは送信時にバージョンをロックします。実行の途中でクエリがルールを変更することはできません。テナント、人間のロール、サービスIDは分離されたままであり、リクエスタには承認されたメタデータのみが表示されます。

ステップ2:生データを実行境界内に保持する

コネクタはローカルテーブルまたはゼロコピービューを読み取り、スキーマ、統計情報、ロケーションのみをコントロールプレーンに報告します。ポリシーコンパイラは、リクエストを承認された結合、フィルタ、集計のみに変換します。任意のデータエクスポート、ユーザーレベルの並べ替え、自由形式の関数、ログへの生カラムの出力は拒否されます。マルチクラウド展開では、サービスロールとカスタマー管理キーが分離され、TLSが転送を保護し、鍵のアクセス許可はコラボレーションと中間テーブルにスコープされます。

ステップ3:IDを公開せずにマッチングを行う

生のメールアドレスやデバイス識別子をコントロールプレーンに保存してはなりません。パートナーは共有仕様に基づいて値を正規化してトークンを作成するか、分離されたマッピングサービスがマッチングを実行して不可逆な結合結果のみを返します。正規化バージョン、データ系統(provenance)、衝突処理を記録します。ルールが変更された場合は、異なるセマンティクスの下でトークンを暗黙的に再利用するのではなく、新しいバージョンを作成します。マッチング結果を消費できるのは実行エンジンのみです。

ステップ4:ランタイムでプライバシーを適用する

結果を返す前に、エグゼキュータは最小コホートサイズ、列の許可リスト、クエリ回数、プライバシーバジェットをチェックします。差分プライバシーは集計に調整されたノイズを追加し、各クエリが消費したバジェットを追跡します。バジェットが使い果たされると、以降のクエリはブロックされます。差分プライバシーを使用している場合でも、攻撃者が出力を組み合わせてコホートを絞り込めないように、繰り返しのセグメント化、差分抽出、クロス集計操作を制限します。

ステップ5:監査証拠とともに結果を公開する

パブリッシャーは、承認された集計スキーマ、品質フラグ、プライバシーステータスのみを出力します。中間テーブル、生のトークン、失敗した行を返すことは決してありません。各クエリは、リクエスタ、ポリシーとデータセットのバージョン、クエリダイジェスト、バジェット消費量、受信者、鍵操作を、参加者が削除できないストレージに記録します。結果キャッシュはポリシー、同意、データバージョンにバインドされており、いずれか1つでも撤回されると無効化されます。

ステップ6:撤回、障害、リージョン復旧を処理する

同意撤回が発生すると、まずキュー内のジョブを停止し、エグゼキュータにチェックポイントでのポリシーの再検証を行わせます。公開済みの結果には影響を受けたとマークされ、契約に従って再配布されなくなります。失敗したタスクは冪等なパーティションのみを再実行し、ポリシー外の一時テーブルを読み取ることはありません。リージョン配置はレジデンシールールに従い、リージョンごとに独立した鍵とログを保持します。コントロールプレーンが利用できない場合は、期限切れのポリシーで実行するのではなく、新しいクエリを一時停止します。

質の高い模範解答

「目的、データセット、結合キー、出力列、リージョン、有効期限を指定するバージョン管理されたコラボレーションポリシーを作成します。生テーブルは各参加者のストレージに保持され、コネクタは制御されたビューとスキーマを公開します。ポリシーコンパイラはリクエストを承認された結合、フィルタ、集計に制限し、実行エンジンはデータ境界内で動作します。分離されたマッチングサービスは、正規化された識別子をダウンロード不可能なトークンに変換します。公開前に、最小コホートサイズ、差分プライバシーバジェット、複合クエリチェックを適用し、バジェットを使い果たした場合は拒否します。ポリシーとデータのバージョン、リクエスタ、バジェット、鍵の呼び出し、受信者をイミュータブルな監査ログに記録します。同意撤回は新しいジョブをブロックし、キャッシュを無効化し、チェックポイントでの再検証をトリガーします。リージョンと鍵の分離により、フェイルオーバーをレジデンシールールの範囲内に維持します。」

よくある間違いと改善策

  • 契約に頼ってデータ漏洩を防ごうとする: エグゼキュータとパブリッシャーが生カラム、ユーザーレベルの結果、不正な関数を拒否するように実装します。
  • ハッシュ化を自動的な匿名化として扱う: 正規化、ソルト、鍵、リンク攻撃を脅威モデルに含め、分離されたトークンサービスを採用します。
  • 単一の最小グループチェックのみを設定する: 繰り返しクエリ、差分クエリ、クロスクエリ操作も制限し、プライバシーバジェットを追跡します。
  • 撤回時にコンソールフラグのみを変更する: キュー、実行パイプライン、キャッシュ、配信レイヤー全体でポリシーと同意のバージョンを再確認します。

フォローアップの質問と回答

リクエスタがフィルタを変更し続けた場合、推論をどのように防ぎますか?

プライバシーバジェットを各データセットおよびコラボレーションにバインドし、すべてのクエリに課金します。セグメンテーションのディメンション、結果の頻度、隣接するクエリ間の差分を制限します。どんどん小さなグループを返すのではなく、バジェットまたはリスクのしきい値に達した時点で拒否します。

2つのパーティが異なる方法でメールアドレスを正規化している場合はどうしますか?

ポリシーで正規化バージョンを固定し、分離されたマッチングサービス内で変換を実行し、そのバージョンを記録します。不一致が発生した場合は失敗させて再マッピングを要求します。トークンを暗黙的に受け入れると、偽陰性や誤マッチングが発生するためです。

鍵サービスが利用できない場合、ジョブを別のリージョンに移動できますか?

レジデンシーポリシーと鍵ポリシーで明示的に許可されている場合にのみ可能です。それ以外の場合はチェックポイントを保持したまま一時停止します。リージョン間レプリケーションでは暗号化された制御メタデータと監査レコードのみを転送し、制限された生データや復号可能な中間テーブルは決して転送してはなりません。

クリーンルームが生データを漏洩していないことをどのように検証しますか?

生カラムの選択、ユーザーレベルのソート、しきい値未満のグループ、繰り返しの差分抽出、ログインジェクションに対するネガティブポリシーテストを実行します。実行計画と結果スキーマを検査し、撤回と鍵障害をシミュレートし、監査イベントと実際の呼び出しを照合します。

公開情報ソース

関連する質問

関連面接ツール

システム設計の回答には「回答する」を使用

まず要件を明確にし、スケール、アーキテクチャ、コンポーネント選定、トレードオフの順に進めます。

ツールを見る