Snowflake Data Clean Rooms에서의 차등 프라이버시에 대해 알아봐요

Snowflake Data Clean Rooms에서의 차등 프라이버시에 대해 알아봐요

서비스 종료 공지

기존 Provider 및 Consumer Data Clean Rooms는 단종될 예정이에요. 날짜와 마이그레이션 지침은 서비스 종료 타임라인에서 확인하세요.

데이터에 포함된 엔터티의 개인정보를 보호하기 위해 Snowflake Data Clean Rooms는 차등 프라이버시를 제공해요. 차등 프라이버시는 수학 기반의 개인정보 보호 시스템으로, [1] 단일 쿼리와 데이터 세트에 대한 반복 쿼리 모두에서 엔터티 수준의 데이터 보호를 제공해요. 데이터 제공자는 자신의 Clean Rooms에서 차등 프라이버시를 구성하여 데이터에 대해 강력한 엔터티 수준의 개인정보 보호와 낮은 노이즈 수준을 활성화할 수 있어요.

차등 프라이버시는 단순 집계 요구 사항의 대안이에요. 단순 집계는 적대자가 한 엔터티만 다른 데이터에 대해 충분히 많은 “유사한” 쿼리를 생성하면 개인 정보를 노출할 수 있어요. 이를 차분 공격이라고 해요.

차등 프라이버시는 데이터 마스킹의 좋은 대안이기도 해요. 데이터 마스킹은 열 값을 완전히 숨기지만, 마스킹된 행에 대한 조인을 방지하고 분석가에게 유용한 데이터를 숨기는 비용이 발생해요. 차등 프라이버시는 보호된 열에 대한 조인을 가능하게 하고, 분석가가 보호된 데이터를 볼 수 있게 해요. 보호된 행의 개인정보를 보호할 만큼 충분한 노이즈를 추가하되, 분석가가 데이터를 사용할 수 없을 정도로 많은 노이즈는 추가하지 않아요.

[1] C. Dwork and A. Roth. The Algorithmic Foundations of Differential Privacy. Foundations and Trends in Theoretical Computer Science, 9 (3-4):211-407, 2014.

중요

고객은 Snowflake Data Clean Rooms에서 차등 프라이버시 도구를 구성하여 데이터 개인정보 보호 요구 사항을 충족할 책임이 있어요. 이러한 도구는 기본적으로 구성되어 있지 않아요.

출처: 문서

본문

clean rooms에서 차등 프라이버시가 작동하는 방식

clean rooms에는 Snowflake differential privacy와 다른 자체 차등 프라이버시 구현이 있어요. 따라서 이 문서를 읽고 다른 동작과 설정을 이해하세요.

차등 프라이버시는 데이터에 있는 엔터티의 프라이버시를 보호해요. clean rooms는 엔터티를 열의 고유 값으로 정의해요. clean rooms는 민감할 가능성이 있는 데이터가 포함된 열을 결정해요. 예를 들어, 주민등록번호나 이메일 주소는 민감한 엔터티일 가능성이 높지만, 색상은 그렇지 않아요. 차등 프라이버시가 적용되면 clean rooms는 각 테이블에서 하나 이상의 엔터티 열을 식별할 수 있어요. 어떤 열이 엔터티 열로 지정되는지는 구성할 수 없어요.

clean rooms의 차등 프라이버시는 각 엔터티와 연결된 숫자 결과에도 노이즈를 추가해요.

사용자는 노이즈를 줄이기 위해 여러 쿼리 결과를 비교하려고 할 수 있어요. 이를 차분 공격이라고 해요. 차분 공격을 완화하기 위해 차등 프라이버시는 계정에 할당된 프라이버시 예산을 계산하고 모니터링해요. 각 쿼리에는 해당 쿼리가 노출하는 엔터티 프라이버시의 정도를 반영하는 비용이 있어요. 이 비용은 수학적으로 결정되며, 쿼리, 데이터, 그리고 해당 사용자의 이전 쿼리에 따라 달라져요. 쿼리 비용이 남은 프라이버시 예산 한도를 초과하면 쿼리는 실패해요. 그렇지 않으면 쿼리는 계속될 수 있고 비용은 사용자의 일일 프라이버시 예산에 추가돼요. 프라이버시 예산은 매일 갱신돼요.

clean rooms의 차등 프라이버시는 쿼리에 집계 제약 조건을 적용하지 않아요. 하지만 데이터나 템플릿에 add aggregation constraints를 별도로 추가할 수 있어요.

팁

Snowflake privacy policies는 보호된 테이블에서 뷰를 생성하는 것을 방지하므로, 프라이버시 정책이 있는 테이블은 연결할 수 없어요.

UI에서 차등 프라이버시 활성화 및 관리

clean room UI에서 공급자는 템플릿 수준에서 프라이버시 설정을 지정할 수 있어요. 소비자는 차등 프라이버시 설정을 활성화하거나 수정할 수 없어요. clean rooms UI에서 사용되는 표준 Snowflake 템플릿은 템플릿별로 다른 프라이버시 설정을 가질 수 있어요.

clean room UI를 사용하여 템플릿에 대한 차등 프라이버시를 활성화하거나 비활성화하려면:

  1. Clean Rooms 페이지의 Created 탭을 여세요.

  2. clean room 타일에서 Edit 또는 » Edit을 선택하세요. (clean room에서 분석을 실행할 수 있는지 여부에 따라 다릅니다.)

  3. Configure Analysis & Query에 도달할 때까지 Next를 선택하세요.

  4. 페이지 하단에서 Privacy Settings를 펼치세요. Differential Privacy를 선택하거나 선택 해제하고 해당 템플릿에 대한 설정(사용자용 프라이버시 예산 및 쿼리 비용 포함)을 제공하세요. 또한 이 쿼리에서 최소 그룹 크기를 적용하기 위한 임계값을 설정할 수 있어요.

  5. 다른 템플릿에 대한 설정을 구성하려면 먼저 현재 템플릿에 대한 값을 설정한 다음 템플릿 선택기에서 다른 템플릿을 선택하세요.

팁

Audience Overlap 템플릿에 대해 차등 프라이버시를 활성화하는 경우 오버랩 통계를 계산하지 마세요. 그렇게 하면 사용자의 프라이버시 예산 대부분을 소비하여 분석을 실행할 예산이 거의 또는 전혀 남지 않게 돼요.

UI에서 프라이버시 예산 관리

남은 프라이버시 예산 확인

쿼리를 실행하거나 결과를 볼 때 Privacy Settings 섹션에서 총 예산과 사용된 금액을 확인할 수 있어요.

다른 사용자의 프라이버시 예산 설정

UI에서 공급자는 프라이버시 예산을 설정할 수 있지만, 소비자는 설정할 수 없어요.

  1. clean room을 편집하고 Configure Analysis & Query 페이지로 이동하세요.

  2. 템플릿을 선택하세요.

  3. 페이지 하단에서 Privacy Settings를 펼치면 사용자용 프라이버시 예산과 쿼리 비용을 확인할 수 있어요.

API에서 차등 프라이버시 활성화 및 관리

clean rooms API에서는 양쪽 모두 협업자 수준에서 차등 프라이버시를 활성화하고 구성할 수 있어요.

모든 사용자 지정 템플릿은 clean room에서 동일한 차등 프라이버시 설정을 사용해요. Snowflake 제공 템플릿은 UI에서 개별 프라이버시 설정으로 구성할 수 있어요.

다음 절차를 사용하여 차등 프라이버시를 구성하세요:

  • consumer.enable_templates_for_provider_run - 모든 공급자 실행 분석에 대해 기본값으로 차등 프라이버시를 끄거나 켜요.

  • consumer.set_privacy_settings - 사용자 지정 템플릿이 포함된 공급자 실행 분석에서 개별 차등 프라이버시 설정을 지정해요.

  • provider.set_privacy_settings - 사용자 지정 템플릿이 포함된 소비자 실행 분석에서 개별 차등 프라이버시 설정을 지정해요.

  • provider.add_custom_sql_template - sensitivity 매개변수를 제공하여 소비자에 대해 설정된 기준 엡실론보다 높거나 낮은 템플릿의 엡실론(노이즈 수준)을 늘리거나 줄여요.

  • provider.add_consumers - 소비자별로 프라이버시 설정을 지정해요. 동일한 고객을 다른 프라이버시 설정으로 여러 번 추가하여 프라이버시 설정을 변경할 수 있어요.

  • provider.suspend_account_dp_task - 이 계정의 모든 clean rooms에 대한 차등 프라이버시 예산 모니터링을 꺼요. 차등 프라이버시는 더 이상 적용되지 않아요.


  • 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 (Integer) - 1 또는 0이며, 1은 차등 프라이버시를 활성화해야 함을 의미하고 0은 활성화하지 않아야 함을 의미해요.

  • epsilon (Float): 결과에 추가할 노이즈의 양을 나타내는 0보다 큰 숫자예요. 값이 작을수록(0.1-1.0) 더 강력한 프라이버시 보호를 제공하지만 결과에 더 많은 노이즈를 추가해요. 기본값: 0.1.

  • noise_mechanism (String) - 결과에 노이즈를 추가하는 데 사용되는 알고리즘이에요. Laplace 또는 Gaussian 중 하나를 지정해요.

  • privacy_budget (Integer) - 이 사용자에게 부여할 프라이버시 예산의 양으로, 0 이상의 숫자예요. 0이면 차등 프라이버시가 활성화된 상태에서 쿼리를 실행할 수 없음을 의미해요. 기본값은 10이에요.

  • threshold (Integer) - Snowflake 제공 템플릿에서 threshold_value를 적용하려면 1을 지정하고, threshold_value를 무시하려면 0을 지정해요. 기본값은 0이에요. 이 값은 clean room UI의 차등 프라이버시 토글로 관리돼요.

  • threshold_value (Integer) - 그룹이 데이터에 나타나기 위해 가져야 하는 최소 행 수예요. 특정 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, optional) - TRUE이면 라플라스 노이즈 대신 가우시안 노이즈를 사용해요. 기본값은 FALSE예요.

  • *delta* (DOUBLE, optional) - gaussian이 TRUE일 때 가우시안 메커니즘의 델타 매개변수예요(작을수록 좋아요). 기본값은 0.000001이에요.

반환 값: 프라이버시를 보호하는 노이즈가 추가된 원래 값을 나타내는 DOUBLE 값이에요.

권장 사항:

  • 집계(COUNT, SUM, AVG)에만 적용하고 개별 레코드에는 절대 적용하지 마세요.

  • 너무 많은 정밀도를 노출하지 않도록 결과를 반올림하는 것을 고려하세요.

  • 이 함수는 실행에 프라이버시 예산이 필요하므로, 사용자가 예산을 모두 사용하면 실패할 수 있다는 점을 유의하세요.

  • 강화된 보호를 위해 최소 그룹 크기 제약 조건과 결합하세요.

예시:

이 예시 템플릿은 cleanroom 전체의 epsilon 값을 사용하여 고유한 해시된 이메일 값의 개수에 노이즈를 추가해요.

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 UI를 사용하여 모든 clean room에 대해 차등 프라이버시를 끄세요:

  1. clean rooms UI에 로그인하세요.

  2. 공유되거나 게시되지 않은 경우에도 실패하지 않은 모든 clean room에서 차등 프라이버시를 끄세요:

  3. Clean rooms » Created » Edit를 선택하세요.

  4. Configure Analysis & Query에 도달할 때까지 Next를 선택하세요.

  5. 페이지 하단에서 Privacy Settings를 펼치세요. Differential Privacy가 선택되어 있으면 선택을 해제한 다음 Next와 Finish를 클릭하여 변경 사항을 저장하세요. 선택되어 있지 않으면 Cancel을 클릭하고 다음 clean room으로 이동하세요.



마지막으로, Snowsight에서 provider.suspend_account_dp_task 프로시저를 호출하여 계정의 차등 프라이버시 백그라운드 작업을 일시 중단하세요.

중요

백그라운드 작업을 비활성화한 후 clean room에서 차등 프라이버시를 활성화하면 해당 계정에 대해 작업이 자동으로 다시 활성화됩니다.

참고 사항 및 문제 해결:

  • clean room에 대해 차등 프라이버시를 비활성화하는 것을 잊고 백그라운드 작업을 일시 중단하면, 이미 clean room을 설치한 사용자에게는 해당 clean room에서 차등 프라이버시가 작동하지 않을 수 있어요.

  • clean room이 설치되기 전에 clean room 내에서 차등 프라이버시를 활성화하면 clean room 설치가 실패해요. 이 경우 clean room에서 차등 프라이버시를 비활성화하거나 아래 설명대로 작업을 다시 활성화해야 해요.

나중에 계정에서 차등 프라이버시를 활성화하려면, 계정의 아무 clean room에서 차등 프라이버시를 활성화하거나 Snowsight에서 provider.resume_account_dp_task 프로시저를 호출하세요.

더 알아보기 (Learn more)