Snowflake Data Clean Room の差分プライバシー¶
データ内のエンティティのプライバシーを保護するために、Snowflake Data Clean Roomsは、 差分プライバシー を提供します。差分プライバシーは数学ベースのプライバシーシステム [1] で、1回のクエリとデータセットの繰り返しクエリの両方にエンティティレベルのデータ保護を提供します。データプロバイダーは、クリーンルームに差分プライバシーを構成することで、データのエンティティレベルの強力なプライバシー保護と低ノイズレベルを実現できます。
差分プライバシーは単純な集計要件に代わるものであり、敵対者が1エンティティだけ異なるデータに対して十分な数の「近い」クエリを生成した場合、個人情報が漏洩する可能性があります(差分攻撃 として知られています)。
差分プライバシーは、マスキングされた行への結合を阻止し、分析者から有用なデータを隠すコストで列値を完全に隠す、データマスキングの良い代替方法でもあります。差分プライバシーは、保護された列への結合を可能にし、また、保護された行のプライバシーを保護するのに十分なノイズを加えることで、分析者が保護されたデータを表示することを可能にします。ただし、分析者がデータを使用できないほどのノイズは追加しません。
重要
Snowflake Data Clean Roomsの差分プライバシーツールを構成して、お客様のデータプライバシー要件を満たすことは、お客様の責任となります。これらのツールはデフォルトでは構成されていません。
clean roomにおける差動プライバシーの仕組み¶
Clean roomは、 Snowflake差分プライバシーとは 異なる、独自の差分プライバシー実装を提供します、このドキュメントを読んで、その動作と設定の違いを理解してください。
差分プライバシーはデータ内の エンティティ のプライバシーを保護します。Clean roomには、エンティティを列内の一意な値として定義します。Clean roomには、機密性が高いと思われるデータをどの列に含めるかを定義します。例えば、社会保障番号やメールアドレスはおそらく機密性の高いエンティティですが、色はそうではありません。差分プライバシーが適用されたclean roomは、テーブルごとに1つまたは複数のエンティティ列を識別します。どの列をエンティティ列にするかは指定できません。
clean roomの差分プライバシーはまた、各エンティティに関する数値結果にノイズを追加します。
そのノイズを減らすために、ユーザーが複数の異なるクエリ結果を比較する場合があります。これが 差分化攻撃 です。差分攻撃を防ぐために、差分プライバシーはアカウントに割り当てられた プライバシーバジェット を計算および監視します。各クエリには、そのクエリによって開示されるエンティティのプライバシーを把握するためのコストがあります。このコストは、クエリ、データ、同じユーザーからの以前のクエリに基づいて数学的に判断されます。クエリのコストがプライバシーバジェットの残数の限界を超えると、クエリは失敗します。超えなければ、クエリが続行され、コストはユーザーの1日のプライバシーバジェットに追加されます。プライバシーバジェットは毎日更新されます。
clean roomの差分プライバシーによって、クエリに集計上の制約が適用されることはありませんが、データまたはテンプレートに 集約上の制約を追加 することは可能です。
Tip
Snowflakeのプライバシーポリシー により、保護されたテーブルからはビューを作成できないため、プライバシーポリシーが設定されているテーブルへのリンクを作成することはできません。
UI で差分プライバシーを有効化および管理する¶
clean room UI で、プロバイダーはプライバシーをテンプレートレベルで設定できますが、コンシューマーは差分プライバシー設定を有効にすることも、変更することもできません。clean room UI で使用される標準Snowflakeテンプレートは、テンプレートごとに異なる差分プライバシーを設定できます。
clean room UI を使用してテンプレートの差分プライバシーを有効または無効にするには:
Clean Rooms ページの Created ` タブを開きます。
clean roomのタイルで Edit または
» Edit を選択します(clean roomで分析の実行が許可されているかどうかで異なります)。
Configure Analysis & Query に達するまで Next を選択します。
ページの下部で、 Privacy Settings を展開します。 Differential Privacy を選択または選択解除し、そのテンプレートの設定(ユーザーのプライバシーバジェットやクエリコストなど)を行います。このクエリでは、しきい値をセットして最小グループサイズを適用することもできます。
別のテンプレートの設定を行うには、まず現在のテンプレートの値をセットし、次にテンプレートセレクタで別のテンプレートを選択します。
UI でのプライバシーバジェットの管理¶
プライバシーバジェットの残りを見る
クエリを実行したり、クエリ結果を表示したりすると、 Privacy Settings セクションにバジェットの合計と使用金額が表示されます。
他のユーザーのプライバシーバジェットをセットする
UI では、プロバイダーはプライバシーバジェットをセットできますが、コンシューマーはできません。
clean roomを編集し、 Configure Analysis & Query ページに移動します。
テンプレートを選択します。
ページの下部にある Privacy Settings を展開すると、ユーザーのプライバシーバジェットと、クエリのコストが表示されます。
API で差分プライバシーを有効化および管理する¶
clean room API では、どちらの側も差分プライバシーをコラボレーションレベルで有効化および構成できます。
すべてのカスタムテンプレートが、clean roomで同じ差分プライバシー設定を使用します。Snowflakeが提供するテンプレートを、 UI で個別のプライバシー設定で構成できます。
以下のプロシージャを使用して差分プライバシーを構成します:
consumer.enable_templates_for_provider_run
- プロバイダーが実行するすべての分析のデフォルト値で、差分プライバシーをオフまたはオンにします。consumer.set_privacy_settings
- プロバイダーが実行する分析(カスタムテンプレートなど)で、差分プライバシーを個別に指定します。provider.set_privacy_settings
- コンシューマーが実行する分析(カスタムテンプレートなど)で、差分プライバシーを個別に指定します。provider.add_custom_sql_template
- 感度 パラメーターを指定し、テンプレートのエプシロン(ノイズレベル)を、コンシューマーにセットされたベースラインのエプシロンより上または下に増減します。provider.add_consumers
- コンシューマーごとにプライバシーを指定します。同じカスタマーを異なるプライバシー設定で複数回追加し、プライバシー設定を変更できます。provider.suspend_account_dp_task
- このアカウントのすべてのclean roomの差分プライバシーバジェットの監視をオフにします。プライバシーの差はなくなりました。provider.resume_account_dp_task
- このアカウントのすべてのclean roomの差分プライバシーバジェットの監視をオンにします。差分プライバシーの設定が適用されます。
clean roomのプライバシー設定が SAMOOHA_CLEANROOM_cleanroom_ID.admin.privacy_budget
に保存されます。 APPLICATION_ID
はテンプレート名(すべてのカスタムテンプレートの場合はNULL )、 PARTY_ACCOUNT は設定が適用されるユーザーです。
API でのプライバシーバジェットの管理¶
プライバシーバジェットの残りを見る
コンシューマーは consumer.view_remaining_privacy_budget
プロシージャを呼び出すことができます。プロバイダーが残りのプライバシーバジェットを確認するコードを作成する方法はありません。
他のユーザーのプライバシーバジェットをセットする
プロバイダー は
provider.set_privacy_settings
またはprovider.add_consumers
を呼び出します。コンシューマー は
consumer.set_privacy_settings
を呼び出して、プロバイダーが実行する分析のバジェットをセットします。
設定可能なプライバシー¶
以下のプライバシー値を、以下のようなさまざまなプロシージャを使用してセットできます:
differential
(整数) - 1または0。1であれば差分プライバシーが有効になり、0 であれば無効になります。epsilon
(浮動): 結果に加えるノイズの量を示すゼロより大きい数値。ゼロより小さい値(0.1-1.0)を指定すると、プライバシー保護が強化されますが、結果のノイズが増えます。デフォルト: 0.1。noise_mechanism
(文字列) - 結果にノイズを加えるために使用するアルゴリズム。Laplace
またはGaussian
を指定します。privacy_budget
(整数) - ユーザーに付与するプライバシーバジェットの量を0以上の数値で指定します。0を指定すると、差分プライバシーが有効であれば、クエリを実行できなくなります。デフォルトは10です。threshold
(整数) - Snowflakeが提供するテンプレートにthreshold_value
を適用する場合は1を、threshold_value
を無視する場合は0を指定します。デフォルトは0です。clean room UI の差分プライバシーのトグルで管理できます。threshold_value
(整数) - データに含まれるグループの最小行数。Snowflakeが提供するテンプレートのうち、指定されたものだけで使用されます。
その他のプライバシー機能¶
結果にノイズを追加する¶
差分プライバシーを実装せず、手動で結果にノイズを追加したい場合は、以下のclean room関数をテンプレートまたはカスタムコードで使用します。このコードを実行するには、ユーザーに十分なプライバシーバジェットが必要であり、十分でなければエラーになります。差分プライバシーが無効なタスクであれば、ユーザーは実質的にバジェットを無限に持つことになります。
cleanroom.addnoise(<val>, <epsilon>, <noiserand>, [<gaussian>], [<delta>])
説明: 差分プライバシーが保証されるまで、キャリブレートされたノイズを数値に追加します。この関数は、clean roomからのみ呼び出すことができます。ユーザーやテンプレートの差分プライバシーを有効にする必要はなく、差分プライバシータスクを有効にする必要もありません。この関数はテンプレートまたは UDP/UDTP で使用します。
引数:
val
(DOUBLE) - ノイズを追加する元の値。epsilon
(DOUBLE) - プライバシーバジェットのパラメーター。値が小さいほど(0.1-1.0)、プライバシー保護が強化されますが、ノイズが増えます。0より大きい値を指定します。noiserand
(DOUBLE) - 0 から 1 の間のランダムな値で、各結果にランダム性を与えます。固定値を渡すのではなく、ランダム値ジェネレーターを使ってその場で計算します。gaussian
(BOOLEAN, オプション) - TRUE を指定すると、LaplacianのノイズではなくGaussianのノイズが使用されます。デフォルトは FALSE です。delta
(DOUBLE, オプション) -gaussian
に TRUE を指定した場合の、Gaussianメカニズムのデルタパラメーター(小さい方が良い)。デフォルトは0.000001です。
戻り値: DOUBLE プライバシーを保持するためにノイズを追加した後の元の値。
推奨事項:
集計 (COUNT, SUM, AVG) にのみ適用され、個別のレコードには適用されません。
結果を四捨五入し、精度が高くなりすぎるのを抑えてください。
この関数にはプライバシーバジェットが必要です。ユーザーのバジェットが足りなければエラーになることに注意してください。
グループの最小サイズの制約を同時に適用して、保護を強化してください。
例:
以下のテンプレート例では、clean room全体にエプシロン値を使用し、ハッシュ化されたメールのカウント値にノイズを追加します。
CALL samooha_by_snowflake_local_db.provider.add_custom_sql_template(
$cleanroom_name,
$template_name,
$$
SELECT
cleanroom.addNoise(
count(distinct p.hashed_email), -- Value
{{ privacy.epsilon | sqlsafe }}, -- Epsilon
UNIFORM(0::FLOAT, 1::FLOAT, RANDOM()) -- Noiserand
) AS noisy_count
FROM
IDENTIFIER({{ source_table[0] }}) p
$$);
集計ポリシーとグループ最小サイズを設定する¶
データを集計する必要があり、グループの最小サイズを指定する場合は、 集計ポリシー をソーステーブルにセットするか、テンプレートで集計を適用することができます。
差分プライバシーコストの管理¶
個々のユーザーやテンプレートの差分プライバシーが有効でない場合でも、差分プライバシーを適用すべきかどうかが、すべてのクエリを対象にシステムによってチェックされるため、 コストが発生します。このコストをなくしたい場合は、アカウントの差分プライバシーを無効にします:
まず、ウェブアプリを使用して、すべてのクリーンルームの差分プライバシーをオフにします。
ウェブアプリにログインします。
失敗していないすべてのクリーンルームで、共有や公開されていない場合でも、差分プライバシーを無効にします。
Clean rooms » Created » Edit を選択します。
Configure Analysis & Query に達するまで Next を選択します。
ページの下部で、 Privacy Settings を展開します。 Differential Privacy が選択されている場合は選択を解除し、 Next と Finish をクリックして変更を保存します。選択されていない場合は、 Cancel をクリックし、次のクリーンルームに進んでください。
最後に、Snowsightの provider.suspend_account_dp_taskプロシージャ を呼び出して、アカウントの差分プライバシーバックグラウンドタスクを一時停止します。
重要
バックグラウンドタスクを無効にした後、クリーンルームで差分プライバシーを有効にすると、そのアカウントのタスクが自動的に再有効化されます。
いくつかの注意点とトラブルシューティング
クリーンルームのために差分プライバシーを無効にすることを忘れて、バックグラウンドタスクを中断した場合、差分プライバシーは、すでにそれをインストールしているユーザーのために、そのクリーンルームで機能しないかもしれません。
クリーンルームがインストールされる前に、クリーンルーム内で差分プライバシーが有効になっている場合、クリーンルームのインストールは失敗します。この場合、クリーンルームの差分プライバシーを無効にするか、以下に示すようにタスクを再度有効にする必要があります。
後でアカウントの差分プライバシーを有効にしたい場合は、 アカウント内のクリーンルームの差分プライバシーを有効にするか、Snowsightで provider.resume_account_dp_taskプロシージャ を呼び出します。