Clean Room 테이블 정책 이해

클린룸은 데이터 정책을 구현하여 공동 작업자가 데이터를 사용하는 방법을 제어할 수 있습니다. 이는 클린룸에 연결된 기본 테이블에 설정된 모든 Snowflake 테이블 정책에 추가됩니다.

클린룸의 각 공동 작업자는 자체 데이터에 대한 정책을 설정할 수 있습니다. 정책은 다른 사용자의 요청에만 적용되며, 자신의 요청에는 적용되지 않습니다. 예를 들어, 조인 정책이 열 A에 대해서만 조인을 허용하는 경우 다른 사용자는 열 A에 대해서만 조인하도록 제한되지만, 자신은 모든 열에 대해 조인을 실행할 수 있습니다.

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

    다음 템플릿은 ``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 정책

테이블을 클린룸에 연결하면 소스 테이블의 Snowflake 테이블 정책이 클린룸의 연결된 테이블에 적용되지만 이러한 정책은 클린룸 API 또는 UI에서 반드시 보고되지는 않습니다. 예를 들어, Snowflake 조인 정책</user-guide/join-policies>`은 클린룸에서 계속 적용되지만 ``consumer.view_provider_join_policy` 또는 ``consumer.view_join_policy``를 호출하면 해당 조인 정책이 표시되지 않습니다. 따라서 기본 연결된 테이블에서 정책을 제거하거나, 동등한 클린룸 정책을 만들거나(있는 경우), 공동 작업자에게 이러한 정책의 존재를 명확하게 전달하여 쿼리가 실패하거나 예기치 않게 작동하지 않도록 해야 합니다(“이 열에 조인할 수 없는 이유는 무엇인가요?”).

소스 테이블에서 Snowflake 정책에 대한 모든 변경 사항은 클린룸의 연결된 뷰에 자동으로 전파됩니다.

Snowflake 개인정보 처리방침 에 따라 보호된 테이블에서 뷰를 만들 수 없으므로 개인정보 처리방침이 있는 테이블에 연결할 수 없습니다.

클린룸에 직접 적용할 수 있는 정책은 다음과 같습니다.

조인 정책

클린룸의 임의의 템플릿으로 데이터의 어떤 열을 조인할 수 있는지 나타내는 조인 정책을 설정합니다. (반대로, Snowflake 조인 정책은 조인*해야 하는* 열을 지정합니다.) 조인 정책은 클린룸의 모든 템플릿에 적용됩니다.

열은 조인 정책과 열 정책 모두에 있을 수 없지만, 조인 정책과 활성화 정책 모두에 있을 수 있습니다.

조인 정책 구현하기

템플릿이 열에 join_policy 또는 join_and_column_policy 필터를 적용하는 경우 클린룸 조인 정책이 열에 적용됩니다.

템플릿이 열에 대한 조인 정책을 확인하고 클린룸에 조인 정책이 설정되어 있지 않거나 열이 조인 정책에 없는 경우 쿼리가 차단됩니다.

다음 코드는 공급자 또는 컨슈머로서 조인 정책을 설정하는 방법을 보여줍니다. 정책은 다른 계정에서 실행하는 쿼리에만 적용된다는 점에 유의하세요.

-- 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

열 정책

특정 템플릿의 분석 결과에 프로젝션할 수 있는 열을 나타내는 열 정책을 설정합니다. 열 정책은 특정 클린룸의 특정 템플릿에 적용됩니다.

열은 조인 및 열 정책에 모두 포함될 수 없습니다. 열은 활성화 및 열 정책에 모두 포함될 수 있습니다.

열 정책 구현하기

템플릿이 column_policy 또는 join_and_column_policy 필터를 사용하는 경우에만 클린룸 열 정책이 열에 적용됩니다.

클린룸이 열에 대한 열 정책을 확인하고 열이 열 정책에 없거나 클린룸에 열 정책이 없는 경우 쿼리가 차단됩니다.

다음 코드는 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

활성화 정책

활성화 템플릿으로 활성화할 수 있는 열을 나타내는 활성화 정책을 설정합니다. 활성화는 공급자 또는 컨슈머의 Snowflake 계정에 있는 테이블이나 서드 파티 활성화 커넥터에 쿼리 결과를 저장합니다.

열은 다른 정책과 마찬가지로 활성화 정책의 일부가 될 수 있습니다.

활성화 정책 구현하기

활성화 정책은 템플릿에서 활성화를 허용하는 경우 Clean Rooms UI 에서 설정할 수 있습니다.

활성화 정책은 특정 템플릿의 특정 열에 대해 설정됩니다.

템플릿이 열에 activation_policy 필터를 적용하는 경우에만 활성화 정책이 열에 적용됩니다.

다음 코드는 클린룸에서 HASHED_EMAIL 및 REGION_CODE 열을 활성화하도록 허용하기 위해 활성화 정책을 설정하는 방법을 보여줍니다. Clean Room에는 공급자와 컨슈머를 위한 동일한 프로시저가 있습니다. 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

집계 정책

집계 정책에서는 테이블에 대한 모든 쿼리에 집계(GROUP BY, COUNT, 기타 함수)가 포함되어야 하며 결과 그룹당 최소 행 수도 지정해야 합니다. 그렇지 않으면 그룹이 결과에서 생략됩니다.

Clean Rooms에는 자체 집계 정책이 구현되어 있지 않으므로 연결된 데이터에 집계 제약 조건을 적용하려면 원본 테이블에 집계 정책 을 적용하거나 템플릿에 집계 제약 조건을 구현하십시오.

일부 Snowflake 제공 템플릿은 사용자 또는 템플릿에 대해 설정된 thresholdthreshold_value 매개 변수를 사용합니다. 이러한 값은 Clean Rooms UI 에서 수정하거나 provider.add_consumers 또는 provider/consumer.set_privacy 를 호출하여 수정할 수 있습니다. 컨슈머용으로 설정된 경우 템플릿에서 이 값에 액세스할 수 있습니다.