プライバシーバジェットの操作

このトピックでは、差分プライバシーを実装したデータプロバイダーがプライバシーバジェットを管理するために実行できるタスクについて説明します。プライバシーバジェットの紹介と、プライバシーバジェットがクエリによってエンティティの機密情報が漏洩するのを防ぐ方法については、 プライバシーロスの制限 をご参照ください。

プライバシーポリシーの本文でプライバシーバジェット名を定義すると、プライバシーバジェットが自動的に作成されます。プライバシーバジェットは、 プライバシーポリシー と別個に作成することはできません。

プライバシーバジェットを管理するには、プライバシーバジェットを指定するプライバシーポリシーに対する OWNERSHIP 権限が必要です。

プライバシーバジェットの表示

各プライバシーバジェットには、プライバシーポリシーに対する名前空間が設定されます。同じ名前のプライバシーバジェットが複数存在することもありますが、それぞれがプライバシーポリシーに固有のものです。プライバシーポリシー内で、プライバシーバジェットにはさらに、 プライバシーロス が発生するコンシューマーアカウントに対する名前空間が設定されます。その結果、複数のアカウントが同じ名前とプライバシーロスの上限が設定されたプライバシーバジェットを持つ可能性がありますが、Snowflakeは各アカウントの累積プライバシーロスを個別に集計します。

プライバシーバジェットを表示すると、プライバシーロスの上限と、そのバジェットに関連付けられているユーザーによって発生した累積プライバシーロスを見ることができます。この情報を使って、累積プライバシーロスがプライバシーバジェットの上限に近づいているかどうかを判断することができます。

注釈

プライバシーバジェットに関連する累積プライバシーロスには、データプロバイダーのアカウント以外のアカウントで発生したプライバシーロスは含まれません。

プライバシーバジェットを表示するには、以下の2つのオプションがあります。どちらのオプションでも、プライバシーバジェットが表示されるのは、プライバシーバジェットに関連するアナリストがプライバシーロスを被った場合、または管理者が プライバシーバジェットをリセット した場合のみです。

  • アカウント内のすべてのプライバシーバジェットをクエリするには、 Account Usageスキーマの PRIVACY_BUDGETS ビューを使用します。ACCOUNTUSAGE スキーマの PRIVACY_BUDGETS ビューには、アカウント内のすべてのプライバシーバジェットが含まれます。これを使って、所有するすべてのプライバシーポリシーに関連するプライバシーバジェットを表示することができ、特定のプライバシーバジェットに焦点を当てるために結果を名前でフィルタリングすることができます。たとえば、 patients_policy プライバシーポリシーに関連する特定のプライバシーバジェットに焦点を当てるには、以下のクエリを実行します。

    SELECT * FROM snowflake.account_usage.privacy_budgets
      WHERE policy_name='patients_policy' AND budget_name='analyst_budget';
    
    Copy
  • 特定のプライバシーポリシーに関連するプライバシーバジェットを表示するには、 CUMULATIVE_PRIVACY_LOSSES テーブル関数を使用します。 CUMULATIVE_PRIVACY_LOSSES テーブル関数を使用すると、特定のプライバシーポリシーに関連するプライバシーバジェットを取得できます。ACCOUNTUSAGE スキーマの PRIVACY_BUDGETS ビューとは異なり、この関数には一定の遅延時間がなく、累積プライバシーロスのリアルタイムの値を返します。この関数を呼び出すときは、プライバシーポリシーの名前を完全修飾する必要があります。

    たとえば、 my_policy_privacy ポリシーで指定されているプライバシーバジェットを表示するには、以下を実行します。

    SELECT *
      FROM TABLE(SNOWFLAKE.DATA_PRIVACY.CUMULATIVE_PRIVACY_LOSSES(
        'my_policy_db.my_policy_schema.my_policy_privacy'));
    
    Copy

プライバシーバジェットの設定

Snowflakeでは、プライバシーロスに対するプライバシーバジェットの上限と、集計ごとに費やされるプライバシーバジェットの最大量(差分プライバシーでは イプシロン と総称されます)を調整することができます。これらの制御は、プライバシーポリシーの本文で以下のパラメーターを指定することによって設定します。

  • BUDGET_LIMIT --- 累積プライバシーロスに対するプライバシーバジェットの上限を設定します。

  • MAX_BUDGET_PER_AGGREGATE -- 集計ごとのプライバシーバジェットの最大額(つまり、クエリ内の各集計関数で発生する最大のプライバシーロス)を設定します。

たとえば、 ALTER PRIVACY POLICY コマンドを使って、既存のプライバシーバジェットのプライバシー制御を調整するには、次を実行することができます。

ALTER PRIVACY POLICY users_policy SET BODY ->
  PRIVACY_BUDGET(BUDGET_NAME=>'analysts',
  BUDGET_LIMIT=>300,
  MAX_BUDGET_PER_AGGREGATE=>0.1);
Copy

これらの制御は、 CREATE PRIVACY POLICY コマンドを実行してプライバシーポリシーを作成するときに定義することもできます。

注意

BUDGET_LIMITMAX_BUDGET_PER_AGGREGATE、または BUDGET_WINDOW パラメーターを変更すると、 ALTER PRIVACY POLICY コマンドで指定されていないパラメーターはデフォルト値に戻ります。つまり、前の例では、Snowflakeがプライバシーバジェットをリセットする頻度を決定する BUDGET_WINDOW パラメーターがデフォルト値に戻ります。

プライバシー制御設定の詳細については、 プライバシーコントロールの調整 をご参照ください。

プライバシーバジェットの更新

更新期間について

Snowflakeは、定期的にプライバシーバジェットの累積プライバシーロスを0にリセットし、アナリストが新しいクエリセットを実行できるようにします。この更新期間はバジェット枠として知られています。この自動更新により、アナリストがテーブルに追加された新しいデータにアクセスできるようにします。理論的には、アナリストはこの新しいデータについて何も情報を得ていないため、さらにクエリを実行させるのが適切です。

デフォルトのバジェット枠は週単位です。

更新期間の変更

プライバシーバジェットの更新期間を変更するには、プライバシーポリシーの privacy_budgetbudget_window 値を更新します。例:

ALTER PRIVACY POLICY users_policy SET BODY ->
  PRIVACY_BUDGET(BUDGET_NAME=>'analysts', BUDGET_WINDOW=>'daily');
Copy

注意

BUDGET_LIMITMAX_BUDGET_PER_AGGREGATE、または BUDGET_WINDOW パラメーターを変更すると、 ALTER PRIVACY POLICY コマンドで指定されていないパラメーターはデフォルト値に戻ります。つまり、前の例では、 BUDGET_LIMITMAX_BUDGET_PER_AGGREGATE がデフォルト値に戻ります。

累積プライバシーロスのリセット

アナリストがポリシーによって保護されたデータに対してクエリを実行すると、Snowflakeはそれらのクエリの累積プライバシーロスを集計します。 RESET_PRIVACY_BUDGET ストアドプロシージャを呼び出して、累積プライバシーロスを0にリセットし、アナリストに追加のクエリを実行させることができます。

RESET_PRIVACY_BUDGET ストアドプロシージャは、アナリストが不注意でプライバシーロスを発生させてしまい、やり直したいときに、バジェットをリセットするためのものです。 プライバシーバジェットが更新される と、プライバシーロスは自動的に0に設定されることに留意してください。

プライバシーバジェットが複数のアカウントのアナリストに関連付けられている場合でも、指定されたアカウントのアナリストに関連付けられた累積プライバシーロスのみが0にリセットされます。

注釈

RESET_PRIVACY_BUDGET を呼び出す場合、累積プライバシーロスはすぐにはリセットされません。次にクエリでプライバシーロスが発生したときにリセットされます。その結果、関数を呼び出した後、最初のクエリでプライバシーロスが発生する前にプライバシーバジェットを表示した場合、累積プライバシーロスは0にはなりません。

以下は、 companyorg.account_123 アカウントでクエリを実行するすべてのユーザーのプライバシー使用カウントをゼロにする例です。

CALL SNOWFLAKE.DATA_PRIVACY.RESET_PRIVACY_BUDGET(
  'my_policy_db.my_policy_schema.my_policy',
  'analyst_budget',
  'companyorg',
  'account_123');
Copy