clean roomテーブルのポリシーを理解する

Clean rooms can implement data policies to control how data can be used by collaborators. These are in addition to any Snowflake table policies set on the underlying tables linked into the clean room.

Each collaborator in a clean room can set policies on their own data. Your policies are enforced only in requests from other users; your policies are not enforced against your own requests. For example, if your join policy allows joins against only column A, other users are restricted to joining on column A, but you can run joins against any of your columns.

Clean roomのポリシーは、clean room API または UI を使用してセットできます。

ポリシーチェックを実装するには、次の条件が満たされている必要があります。

  • データ所有者は、クリーンルームでポリシーを設定する必要があります。 API または UI を使用してポリシーを設定できます。各ポリシータイプは個別に設定されます。クリーンルームは、列ポリシー、行ポリシー、アクティベーションポリシーをネイティブに実装します。 クリーンルームポリシーは追加されません: クリーンルームポリシーを設定すると、以前の値はすべて削除されます。

    -- Sets a join policy on column HASHED_EMAIL.
    CALL samooha_by_snowflake_local_db.provider.set_join_policy(
      'my_provider_cleanroom',
      ['my_db.my_sch.T1:HASHED_EMAIL']);
    
    -- Replaces the previous join policy. Now the only column in the join policy is AGE_BND.
    CALL samooha_by_snowflake_local_db.provider.set_join_policy(
      'my_provider_cleanroom',
      ['my_db.my_sch.T1:AGE_BAND']);
    
    Copy
  • テンプレートは、テンプレート内の適切な場所でポリシーをチェックする必要があります。 クリーンルームポリシーは、テンプレートの列に適切なポリシーフィルターが適用されている場合にのみチェックされます。データを保護するためにクリーンルームポリシーを設定した場合は、テンプレートを調べて、テンプレートが期待通りにポリシーを実施していることを確認する必要があります。以下のテンプレートは、col1がデータ所有者の列ポリシーで許可されているかどうかをチェックします。

    SELECT
      IDENTIFIER( {{ col1 | column_policy }} )
    FROM {{ source_table[0] }} AS c;
    
    Copy

    以下のテンプレート :emph:` は、 col1 にクリーンルームポリシーがあるかどうかを ` 確認しません。

    SELECT
      IDENTIFIER( {{ col1 }})
    FROM {{ source_table[0] }} AS c;
    
    Copy

    クリーンルームは、ポリシータイプごとに異なるテンプレートフィルターをサポートしています。ただし、フィルターのセマンティクスはチェックされず、列がそのフィルター型のポリシー内にあるかどうかのみがチェックされます。例えば、以下のスニペットでは、列が結合されていないにもかかわらず、 col1 の結合ポリシーがチェックされます。col1 がデータ所有者の結合ポリシーにある場合、クエリは成功します。 col1 がデータ所有者の結合ポリシーにない場合、クエリはブロックされます。

    SELECT
      IDENTIFIER( {{ col1 | join_policy }})
    FROM {{ source_table[0] }} AS c;
    
    Copy

注釈

テンプレート JinjaSQL が解析されるときに、列ポリシーチェックが実行されます。ワイルドカードを使用したクエリは、これらのチェックでは検出されない可能性があるため、分析テンプレートを設計する際は慎重に行う必要があります。どうしてもクエリしてはいけない列がある場合は、そのような機密性の高い列を除外したソーステーブルのビューを作成し、代わりにそのビューでリンクすることを検討してください。

クリーンルームでのSnowflakeポリシー

When you link tables into a clean room, any Snowflake table policies on the source tables are enforced in the linked tables in the clean room, but these policies aren't necessarily reported by the clean room API or UI. For instance, a Snowflake join policy continues to be enforced in the clean room, but that join policy is not visible by calling consumer.view_provider_join_policy or consumer.view_join_policy. Therefore, you should either remove policies from the underlying linked tables, create equivalent clean room policies (when they exist), or communicate the existence of these policies clearly to your collaborators so that their queries don't fail or behave unexpectedly ("why can't I join on this column?").

ソーステーブルのSnowflakeポリシーへの変更は、クリーンルームのリンクされたビューに自動的に反映されます。

Snowflakeプライバシーポリシー により、保護されたテーブルへのビューの作成が妨げられるため、プライバシーポリシーがセットされたテーブルへのリンクはできません。

以下のポリシーはクリーンルームに直接適用できます。

結合ポリシー

Set a join policy to indicate which columns in your data can be joined on by any template in the clean room. (Snowflake join policies, in contrast, specify which columns must be joined on.) Join policies apply to all templates in the clean room.

A column cannot be in both a join policy and a column policy, but a column can be in both a join policy and an activation policy.

結合ポリシーの実装

Clean room join policies are enforced against a column if the template applies the join_policy or join_and_column_policy filter to the column.

テンプレートが列の結合ポリシーをチェックし、クリーンルームに結合ポリシーが設定されていない場合、または列が結合ポリシーにない場合、クエリはブロックされます。

次のコードは、プロバイダーまたはコンシューマーとして結合ポリシーを設定する方法を示しています。ポリシーは、別のアカウントによって実行されたクエリに対してのみ適用されることに注意してください。

-- Set join policies on two columns in a clean room where you are a provider.
CALL samooha_by_snowflake_local_db.provider.set_join_policy(
  'my_provider_cleanroom',
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']);

-- Set join policies on two columns in a clean room where you are a consumer.
CALL samooha_by_snowflake_local_db.consumer.set_join_policy(
  'my_consumer_cleanroom',
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']);
Copy

結合ポリシーを表示または管理するコードを作成するには、次のプロシージャを使用します:

  • consumer.set_join_policy

  • consumer.view_provider_join_policy

  • consumer.view_join_policy

  • provider.view_join_policy

  • provider.set_join_policy

列ポリシー

Set a column policy to indicate which of your columns can be projected in analysis results from a specific template. Column policies are applied to specific templates in a specific clean room.

同じ列を結合と列ポリシーの両方に含めることはできません。アクティベーションと列ポリシーの両方に同じ列が存在できます。

列ポリシーの実装

Clean room column policies are enforced against a column only if the template uses the column_policy or join_and_column_policy filter.

クリーンルームが列の列ポリシーをチェックし、その列が列ポリシーにない場合、またはクリーンルームに列ポリシーがない場合、クエリはブロックされます。

次のコードは、 prod_overlap_analysis テンプレートによってアクセスされたときに、3つの列に列ポリシーを設定する方法を示しています。この例は、プロバイダーとコンシューマーの両方としてポリシーを設定する方法を示しています。ポリシーは、別のアカウントによって実行されたクエリに対してのみ適用されることに注意してください。

-- Set column policy on prod_overlap_analysis template in a clean room where
-- you are a provider.
call samooha_by_snowflake_local_db.provider.set_column_policy(
  'my_provider_cleanroom',
  ['prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);

-- Set column policy on prod_overlap_analysis template in a clean room where
-- you are a consumer.
call samooha_by_snowflake_local_db.consumer.set_column_policy(
  'my_consumer_cleanroom',
  ['prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);
Copy

以下のプロシージャは、コード内の列ポリシーを表示または管理するために使用されます:

  • consumer.set_column_policy

  • consumer.view_column_policy

  • consumer.view_provider_column_policy

  • provider.set_column_policy

  • provider.view_column_policy

アクティベーションポリシー

Set an activation policy to indicate which of your columns can be activated by an activation template. Activation saves query results to a table in the Snowflake account of the provider or consumer, or to a third-party activation connector.

他のポリシーと同様に、アクティビティポリシーにも列を指定できます。

アクティビティポリシーの実装

アクティベーションポリシーは、テンプレートがアクティベーションを許可していれば、clean room UI でセットできます。

アクティベーションポリシーは、特定のテンプレートの特定の列にセットされます。

Activation policies are enforced against a column only if the template applies the activation_policy filter to the column.

The following code demonstrates setting an activation policy to allow the HASHED_EMAIL and REGION_CODE columns to be activated in a clean room. This policy affects all users and all activation templates in the clean room. There are equivalent procedures for providers and consumers in a clean room. Call the procedure that reflects your role in the clean room.

-- Set activation policy on prod_overlap_analysis template in a clean room where you are a provider
call samooha_by_snowflake_local_db.provider.set_activation_policy('my_cleanroom', [
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL',
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE' ]);

-- Set activation policy on prod_overlap_analysis template in a clean room where you are a consumer
call samooha_by_snowflake_local_db.consumer.set_activation_policy('my_cleanroom', [
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:HASHED_EMAIL',
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:REGION_CODE' ]);
Copy

以下のプロシージャは、アクティベーションポリシーを管理するコードを作成するために使用されます:

  • consumer.set_activation_policy

  • provider.set_activation_policy

集計ポリシー

集計ポリシーでは、テーブルに対するすべてのクエリに集計が含まれている必要があります(GROUPBY, COUNTおよびその他の関数)、また結果グループごとの最小行数を指定します。そうしないと、グループは結果から省略されます。

Clean room自体には集計ポリシーが実装されません。リンクされたデータに集約制約を適用するには、ソーステーブルに 集計ポリシー を適用するか、テンプレートに集約制約を実装します。

Snowflakeが提供するテンプレートの中には、ユーザーまたはテンプレートにセットされた threshold および threshold_value のパラメーターを使用するものもあります。これらの値は、clean room UI で、または provider.add_consumersprovider/consumer.set_privacy を呼び出すことで変更できます。コンシューマーにセットされている場合は、 テンプレートでこれらの値にアクセス できます。