차등 개인정보 보호 시작하기¶
소개¶
이 자습서에서는 차등 개인정보 보호 정책을 사용하여 민감한 데이터를 보호하여 분석가와 안전하게 공유할 수 있는 방법을 설명합니다.
알아볼 내용¶
이 자습서에서는 다음을 수행하는 방법을 배웁니다.
차등 개인정보 처리방침을 만듭니다.
해당 개인정보 보호 정책을 테이블에 적용하여 차등 개인정보 보호로 보호하십시오.
테이블의 개인정보 보호 도메인을 정의합니다.
차등 개인정보 보호로 보호되는 테이블에서 쿼리를 실행합니다.
쿼리 결과에 존재하는 노이즈의 양을 확인합니다.
이 자습서에서는 차등 개인정보 보호의 핵심 개념인 노이즈, 개인정보 보호 예산, 개인정보 보호 도메인 에 대해 충분히 설명하지 않습니다. 이 자습서에서는 데이터에 차등 개인정보 보호를 적용하는 방법을 중점적으로 설명합니다.
관리자 및 분석가 정보¶
이 자습서에서는 두 사용자를 가정합니다.
관리자는 원시 데이터에 대한 권한을 가지고 있으며 테이블에서 차등 개인정보 보호 정책을 관리합니다.
이 보호되는 데이터에 대해 쿼리를 실행하는 분석가입니다.
실제 사용 사례에서 이들은 서로 다른 두 사람 또는 그룹일 수도 있고, 보호된 결과를 분석하고 다른 사람들과 안전하게 공유하려는 한 사람일 수도 있습니다.
이 자습서는 보호되는 데이터에 대해 쿼리를 실행하는 방법을 보여 주지만, 주로 차등 개인정보 보호를 구현하는 방법을 보여 주기 위한 것이지 데이터를 소비하는 방법을 보여 주기 위한 것은 아닙니다.
전제 조건¶
Enterprise Edition 이상의 계정()을 사용 중이어야 합니다.
ACCOUNTADMIN 역할을 사용 할 수 있어야 합니다.
중요
이 자습서에서는 ACCOUNTADMIN 역할을 사용하여 모든 관리자 페르소나 단계를 수행합니다. 하지만 일반적으로는 수행 중인 작업에 대해 특별히 정의된 권한이 있는 역할을 사용해야 합니다. 개인정보 처리방침을 만들고 적용하는 데 필요한 권한은 여기 에 설명되어 있습니다.
역할, 웨어하우스 및 데이터 만들기¶
이 섹션에서는 다음 설정 단계를 수행합니다.
분석가 역할을 만듭니다.
보호되는 데이터에 대한 쿼리를 실행하는 데 사용되는 웨어하우스를 만듭니다.
개인정보 보호정책에 따라 보호되는 민감한 데이터를 모의로 생성합니다.
이러한 설정 단계 중 차등 개인정보 처리방침과 관련된 설정 단계는 없습니다. 이미 적합한 역할, 웨어하우스 및/또는 데이터 세트가 있는 경우 이를 대신 사용할 수 있습니다.
분석가 역할 만들기¶
Snowsight 워크시트 또는 Snowflake 계정에서 SQL 을 실행하도록 연결된 다른 환경에서 다음 명령을 실행하여 분석가 역할을 만들고 자신에게 할당합니다.
USE ROLE ACCOUNTADMIN;
CREATE ROLE dp_tutorial_analyst;
-- You can find your own user name by running "SELECT CURRENT_USER();"
GRANT ROLE dp_tutorial_analyst TO USER <user_name>;
데이터 웨어하우스 만들기¶
CREATE OR REPLACE WAREHOUSE dp_tutorial_wh;
GRANT USAGE ON WAREHOUSE dp_tutorial_wh TO ROLE dp_tutorial_analyst;
모의 민감한 데이터 만들기¶
다음 명령은 데이터베이스, 스키마, 테이블을 만들고 데이터로 채웁니다. 이 데이터는 환자 ID를 보호하고자 하는 간단한 당뇨병 연구를 시뮬레이션합니다. 자습서 후반부에서는 차등 개인정보 보호를 사용하여 스터디에 참여한 개인의 ID를 보호합니다.
-- Create the table
CREATE OR REPLACE DATABASE dp_db;
CREATE OR REPLACE SCHEMA dp_db.dp_schema;
USE SCHEMA dp_db.dp_schema;
CREATE OR REPLACE TABLE dp_tutorial_diabetes_survey (
patient_id TEXT,
is_smoker BOOLEAN,
has_difficulty_walking BOOLEAN,
gender TEXT,
age INT,
has_diabetes BOOLEAN,
income_code INT);
-- Populate the table
INSERT INTO dp_db.dp_schema.dp_tutorial_diabetes_survey
VALUES
('ID-23493', TRUE, FALSE, 'male', 39, TRUE, 2),
('ID-00923', FALSE, FALSE, 'female', 82, TRUE, 5),
('ID-24020', FALSE, FALSE, 'male', 69, FALSE, 8),
('ID-92848', TRUE, TRUE, 'other', 75, FALSE, 3),
('ID-62937', FALSE, FALSE, 'male', 46, TRUE, 5);
참고:
차등 개인정보 보호를 사용하는 것보다 환자 ID 를 마스킹하는 것이 더 나은 것처럼 보일 수 있지만, 그렇게 하면 해당 열에 대한 조인이 방지됩니다. 또한 투약 테이블이나 방문 테이블과 같이 각 환자에게 여러 행이 있는 테이블을 추가한 경우 간단한 마스킹을 사용하면 개인별로 결과를 그룹화할 수 없습니다. 차등 개인정보 보호가 단순한 마스킹 및 행 숨기기보다 훨씬 더 강력할 수 있는 경우로, 엔터티 개인정보 보호를 보호하면서 분석가에게 더 많은 데이터를 가용성 있게 제공하고 더 유용한 쿼리를 허용할 수 있습니다.
개인정보 처리방침 정의하기¶
테이블 또는 뷰에 개인정보 보호 정책 을 적용하면 차등 개인정보 보호로 보호되며, 그룹 또는 사용자에게 개인정보 보호 예산 을 할당하여 여러 쿼리가 민감한 정보를 너무 많이 노출하지 않도록 Snowflake가 방지할 수 있습니다.
자체 데이터베이스에 개인정보 처리방침을 생성합니다. 이것은 Snowflake의 모든 유형의 정책에 대한 모범 사례입니다. 동일한 데이터베이스에 정책을 만드는 경우 데이터베이스를 복제하면 동기화되지 않은 정책의 복사본이 생성됩니다. 모든 정책을 별도의 단일 데이터베이스에 저장하고 여러 테이블에 적용하면 각 정책의 복사본 하나를 관리하고 업데이트할 수 있습니다.
이 새 정책의 이름은 patients_policy
입니다.
-- Define a privacy policy. Use default budget, budget window, max budget per aggregate.
CREATE OR REPLACE DATABASE policy_db;
CREATE OR REPLACE SCHEMA policy_db.diff_priv_policies;
CREATE OR REPLACE PRIVACY POLICY policy_db.diff_priv_policies.patients_policy AS () RETURNS privacy_budget ->
CASE
WHEN CURRENT_ROLE() = 'ACCOUNTADMIN' THEN no_privacy_policy()
WHEN CURRENT_ROLE() IN ('DP_TUTORIAL_ANALYST')
THEN privacy_budget(budget_name => 'clinical_analysts')
ELSE privacy_budget(budget_name => 'default')
END;
참고:
적용되는 개인정보 처리방침은 CASE 문에 명시된 대로 사용자의 역할에 따라 달라집니다. CURRENT_ROLE()는 대문자 값을 반환하므로 여기서 역할 이름은 대문자로 지정됩니다.
역할별로 별도의 개인정보 보호 예산을 만들면 분석가와 다른 사용자에게 사용되는 예산을 구분하고 각 그룹별 사용량을 모니터링할 수 있습니다.
개인정보 보호 정책이 평가 시 유효한 개인정보 보호 예산으로 결정되면 사용자는 집계되지 않은 SELECT 쿼리를 실행할 수 없고 결과에 노이즈가 추가되며 쿼리 수는 해당 정책에 대한 개인정보 보호 예산에 의해 제한됩니다.
계정 관리자 역할에는 개인정보 처리방침이 적용되지 않습니다. 즉, 해당 역할로 실행되는 쿼리에는 차등 개인정보 보호가 적용되지 않습니다. 개인정보 보호 정책이 없음을 표시하려면 NULL 을 반환하는 대신
no_privacy_policy()
를 반환해야 합니다.DP_TUTORIAL_ANALYST 역할은 개인정보 보호 예산, 예산 윈도우 및 집계당 최대 예산에 대한 기본값이 있는 “clinical_analysts”라는 개인정보 보호 정책을 사용합니다.
SELECT 액세스 권한이 있는 다른 모든 사용자에게는 기본 개인정보 보호 정책 값이 포함된 ‘기본’이라는 이름의 개인정보 보호 예산이 제공됩니다. 다른 사용자가 이 테이블에서 쿼리를 실행하지 못하도록 하려면 테이블에 대한 SELECT 권한을 제한해야 합니다. 테이블 수준 정책에는 ELSE 절이 필요하며 NULL 을 반환할 수 없습니다.
개인정보 처리방침 지정하기¶
다음으로 방금 생성한 개인정보 보호 정책을 테이블에 할당하여 차등 개인정보 보호로 보호합니다.
-- Assign the privacy policy to the table.
ALTER TABLE dp_db.dp_schema.dp_tutorial_diabetes_survey
ADD PRIVACY POLICY policy_db.diff_priv_policies.patients_policy ENTITY KEY (patient_id);
참고:
ENTITY KEY 절은 차등 개인정보 보호로 보호해야 하는 엔터티를 고유하게 식별하는 열을 지정합니다. 각 엔터티가 단 하나의 행에 나열된 단일 테이블이 있는 이 자습서에서는 엔터티 키를 정의하는 것이 덜 중요합니다. 그러나 각 환자가 여러 행에 나타날 수 있는 경우(예: 환자 방문 또는 환자 약물 복용을 캡처하는 경우) 키를 정의하는 것이 중요할 것입니다. 나중에 데이터베이스에 두 번째 테이블이 추가될 경우를 대비하여 여기에 키를 정의하는 것이 좋습니다. 엔터티 수준 개인정보 보호 에 대해 자세히 알아보십시오.
개인정보 보호 도메인 정의¶
다음으로 테이블의 일부 열에 개인정보 보호 도메인 을 설정합니다.
개인정보 보호 도메인 은 해당 열의 결과에 표시할 수 있는 값의 범위를 시스템에 알려줍니다. 시스템은 이 정보를 두 가지 방식으로 사용합니다.
이 범위를 벗어나는 값은 열이 문자열인지 숫자/날짜 값인지에 따라 생략되거나 경계에 고정됩니다.
시스템은 이 ‘유효 범위’를 사용하여 각 측정값에 적용되는 노이즈를 결정하기 위해 결과의 범위를 결정합니다.
분석가는 예를 들어 WHERE 절을 사용하여 도메인을 추가로 제한하여 차등 개인정보 보호로 인해 발생하는 노이즈의 양을 잠재적으로 줄일 수 있습니다(도메인이 작을수록 노이즈가 적습니다). 열에 개인정보 보호 도메인을 설정하지 않은 경우 분석가가 해당 열의 값을 보려면 WHERE 절을 사용하여 개인정보 보호 도메인을 추가해야 합니다(개인정보 보호 도메인이 없는 열은 쿼리에 표시되거나 사용될 수 없음).
당뇨병 설문조사 데이터의 경우 성별
, 연령
, income_code
의 3개 열에 개인정보 도메인을 설정합니다. 부울 열에는 개인정보 보호 도메인을 설정하지 않으며(가능한 값이 2개뿐이므로 개인정보 보호 도메인은 의미가 없고 필수가 아님), 사용자가 개인정보 보호 도메인에서 설정한 값을 볼 수 있으므로 데이터에 어떤 환자 IDs 가 있는지 알 수 있으므로 patient_id
열에 개인정보 보호 도메인을 설정해서는 안 됩니다. ZIP 코드와 같이 제한된 수의 문자열 값에 대해 개인정보 보호 도메인을 지정해야 하는 경우, 가능한 값을 모호하게 만들기 위해 존재하지 않는 값을 추가하여 도메인 정의를 패딩 해야 합니다.
-- Define privacy domains.
ALTER TABLE dp_db.dp_schema.dp_tutorial_diabetes_survey ALTER (
COLUMN gender SET PRIVACY DOMAIN IN ('female', 'male', 'other'),
COLUMN age SET PRIVACY DOMAIN BETWEEN (0, 90),
COLUMN income_code SET PRIVACY DOMAIN BETWEEN (1, 8)
);
분석가에게 테이블에 대한 액세스 권한 부여¶
데이터에 개인정보 보호 정책을 지정한 후에만 테이블에 대한 액세스 권한을 부여하십시오. 그렇지 않으면 개인정보 처리방침을 적용하기 전에 사용자가 데이터를 볼 수 있습니다.
GRANT USAGE ON DATABASE dp_db TO ROLE dp_tutorial_analyst;
GRANT USAGE ON SCHEMA dp_schema TO ROLE dp_tutorial_analyst;
GRANT SELECT
ON TABLE dp_db.dp_schema.dp_tutorial_diabetes_survey
TO ROLE dp_tutorial_analyst;
몇 가지 쿼리 실행하기¶
마지막으로, 데이터에 대한 쿼리 실행을 시작할 수 있습니다!
관리자와 분석가 간에 역할을 전환하여 각 역할의 동작과 출력을 비교합니다.
차등 개인정보 보호가 작동하는지 확인¶
관리자 역할을 사용하여 개별 행을 반환하는 쿼리를 실행합니다. 이 쿼리는 ACCOUNTADMIN 역할에 대한 개인정보 처리방침이 no_privacy_policy()로 확인되므로 성공합니다.
USE ROLE ACCOUNTADMIN;
SELECT * FROM dp_db.dp_schema.dp_tutorial_diabetes_survey;
이제 분석가 역할을 사용하여 동일한 쿼리를 실행합니다. 차등 개인정보 보호가 SELECT * 쿼리를 허용하지 않기 때문에 쿼리가 실패합니다.
USE ROLE dp_tutorial_analyst;
SELECT * FROM dp_db.dp_schema.dp_tutorial_diabetes_survey;
기본 결과가 동일한지 확인하려면 세 번째 역할로 시도해 보십시오. (테이블에서 개인 또는 역할에 SELECT 를 부여하는 것을 잊지 마십시오!)
노이즈가 어떤 모습인지 보기¶
먼저 차등 권한이 적용되지 않은 상태에서 관리자로 간단한 쿼리를 실행합니다. 정확한 테이블 값을 볼 수 있습니다.
-- Run a basic query without DP.
USE ROLE ACCOUNTADMIN;
SELECT COUNT(DISTINCT patient_id)
FROM dp_db.dp_schema.dp_tutorial_diabetes_survey
WHERE income_code = 5;
이제 분석가와 동일한 쿼리를 실행하면 결과에 노이즈가 적용된 것을 확인할 수 있습니다. 차등 개인정보 보호가 적용되고 있기 때문에 쿼리 시간이 조금 더 오래 걸립니다.
USE ROLE dp_tutorial_analyst;
SELECT COUNT(DISTINCT patient_id)
FROM dp_db.dp_schema.dp_tutorial_diabetes_survey
WHERE income_code = 5;
차등 개인정보 보호로 인해 데이터 세트에서 개인의 존재를 가리기 위해 결과에 노이즈가 발생하여 일반적으로 관리자 결과와 다른 결과가 표시됩니다. 그러나 특정 쿼리에서 무작위로 생성된 노이즈가 0으로 반올림될 정도로 작기 때문에 결과가 동일할 수 있습니다. 그러나 분석가는 특정 쿼리에 노이즈가 적용되었는지 여부를 알 수 없습니다. 이 쿼리를 다시 실행하여 다른 결과가 나오는지 확인할 수 있습니다.
노이즈의 양 분석¶
분석가들은 노이즈가 없는 결과를 볼 수는 없지만, 일반적으로 노이즈가 얼마나 심한지 파악하여 데이터를 필요에 맞게 사용할 수 있는지 판단할 수 있는 방법이 필요합니다. 이 정보를 제공하기 위해 각 쿼리 매개 변수의 노이즈 간격을 분석가에게 노출합니다. 노이즈 간격은 DP_INTERVAL_LOW 및 DP_INTERVAL_HIGH 함수를 사용하여 검색합니다.
-- Retrieve noise interval for the previous query.
USE ROLE dp_tutorial_analyst;
SELECT COUNT(DISTINCT patient_id) as c,
DP_INTERVAL_LOW(c) as LOW,
DP_INTERVAL_HIGH(c) as HIGH
FROM dp_db.dp_schema.dp_tutorial_diabetes_survey
WHERE income_code = 5;
집계의 실제 값은 LOW ~ HIGH 사이에서 최소 95%의 신뢰도를 갖습니다.
이 데이터에 대한 이 쿼리의 간격은 인위적으로 작은 데이터 세트으로 인해 결과의 크기에 비해 넓다는 점에 유의하십시오. 이렇게 노이즈 간격이 넓다는 것은 기본적으로 환자의 수가 너무 적어서 Snowflake가 개인 정보를 보호하면서 정확한 답변을 제공할 수 없다는 뜻입니다.
예산 및 예상 남은 쿼리 보기¶
차등 개인정보 보호 테이블에서 쿼리를 실행하는 사용자는 ESTIMATE_REMAINING_DP_AGGREGATES 테이블 함수를 호출하여 사용된 차등 개인정보 보호 예산과 남은 쿼리 수 추정치를 확인할 수 있습니다. 예산을 확인하려는 역할을 가정한 다음 여기에 표시된 대로 함수를 호출합니다.
USE ROLE <role_name>;
SELECT * FROM TABLE(SNOWFLAKE.DATA_PRIVACY.ESTIMATE_REMAINING_DP_AGGREGATES(dp_db.dp_schema.dp_tutorial_diabetes_survey));
정리¶
나중에 본인 또는 조직의 다른 사람이 자습서를 다시 실행할 수 있도록 리소스를 정리하십시오.
USE ROLE ACCOUNTADMIN;
DROP ROLE dp_tutorial_analyst;
DROP WAREHOUSE dp_tutorial_wh;
ALTER TABLE dp_tutorial_diabetes_survey
DROP PRIVACY POLICY policy_db.diff_priv_policies.patients_policy;
DROP DATABASE dp_db;
DROP DATABASE policies_db;