민감한 데이터를 자동으로 분류¶
민감한 데이터 자동 분류는 민감한 데이터를 자동으로 감지하고 태그를 지정할 수 있는 서버리스 기능입니다. 이 기능은 특정 스키마 내의 테이블을 지속적으로 모니터링하고 기본 및 사용자 정의 분류 카테고리를 사용하여 해당 열을 분류합니다.
민감한 데이터 자동 분류 기능을 통해 데이터 엔지니어와 관리자는 다음과 같은 작업을 수행할 수 있습니다.
테이블을 자동으로 분류하는 것이 내부 거버넌스와 규정 준수 요구 사항을 어떻게 충족시키는지 입증하십시오.
민감한 데이터에 적절하게 태그가 지정되어 있는지 확인하십시오.
민감한 데이터를 보호하기 위해 적절한 액세스 제어가 마련되어 있는지 확인하십시오.
시작하기¶
민감한 데이터를 자동으로 분류하는 기본 워크플로는 다음과 같이 구성되어 있습니다.
분류 후 시스템 태그 를 자동으로 적용할지 여부를 포함하여 스키마에서 민감한 데이터가 자동으로 분류되는 빈도를 제어하는 분류 프로필 을 만드십시오.
선택 사항으로 분류 프로필을 사용하여 사용자 정의 태그를 시스템 태그에 매핑하여 민감한 데이터가 있는 열을 분류에 따라 사용자 정의 태그에 연결할 수 있습니다. 분류 프로필을 만드는 동안 또는 프로필을 생성한 후에 태그 매핑을 추가할 수 있습니다.
선택 사항으로 분류 프로필에 사용자 정의 분류기 를 추가하여 민감한 데이터를 사용자가 정의한 의미 및 개인정보 보호 범주로 자동 분류할 수 있습니다. 분류 프로필을 만드는 동안 또는 프로필을 생성한 후에 사용자 지정 분류자를 추가할 수 있습니다.
스키마의 테이블이 자동으로 분류되도록 스키마에 분류 프로필을 설정합니다.
이 워크플로의 전체 예제는 예 섹션을 참조하십시오.
분류 프로필 정보¶
데이터 엔지니어는 스키마의 테이블을 자동으로 분류하는 데 사용되는 기준을 정의하기 위해 CLASSIFICATION_PROFILE 클래스 의 인스턴스를 생성하여 분류 프로필을 만듭니다. 이 기준에는 다음이 포함됩니다.
테이블을 자동으로 분류하기 전에 테이블이 존재해야 하는 기간입니다.
이전에 분류된 테이블을 재분류해야 하는 기간입니다.
자동 분류 후 열에 시스템 및 사용자 정의 태그를 설정할지 여부입니다.
시스템 분류 태그와 사용자 정의 오브젝트 태그 간의 매핑 을 통해 사용자 정의 태그를 자동으로 적용할 수 있습니다.
데이터 엔지니어가 스키마에 분류 프로필을 할당하면 스키마 테이블에 있는 민감한 데이터가 프로필에 정의된 일정에 따라 자동으로 분류됩니다. 데이터 엔지니어는 여러 스키마에 동일한 분류 프로필을 할당하거나 스키마마다 다른 분류 기준을 설정해야 하는 경우 여러 분류 프로필을 만들 수 있습니다.
데이터를 자동으로 분류하는 프로세스에는 테이블의 원시 데이터에 대한 액세스가 필요합니다. 원시 데이터에는 열에 마스킹 정책이 할당된 테이블이 포함됩니다. 그러나 Snowflake는 내부 역할을 사용하여 데이터를 자동으로 분류함으로써 보호되는 데이터에 대한 액세스를 규제하려는 의도를 유지합니다. 내부 역할은 마스킹 정책으로 보호되는 데이터에 액세스할 수 있지만, 이 역할은 사용자가 액세스할 수 없습니다.
CREATE CLASSIFICATION_PROFILE 명령을 사용하여 분류 프로필을 만드는 예제는 예 섹션을 참조하십시오.
태그 매핑 정보¶
분류 프로필을 사용하여 SEMANTIC_CATEGORY 시스템 태그 를 하나 이상의 오브젝트 태그 에 매핑할 수 있습니다. 이 태그 매핑을 사용하면 민감한 데이터가 있는 열에 분류에 따라 사용자 정의 태그를 자동으로 할당할 수 있습니다. 태그 맵은 분류 프로필을 만드는 동안 또는 나중에 <classification_profile_name>!SET_TAG_MAP 메서드를 호출하여 추가할 수 있습니다.
사용자 정의 오브젝트 태그에는 마스킹 정책이 연결될 수 있으므로, 태그 맵을 사용하여 자동 태그 기반 마스킹 을 활성화할 수 있습니다. 이 기능은 SEMANTIC_CATEGORY 시스템 태그에 맞춰 열 보호를 용이하게 해줍니다.
분류 프로필을 생성하는 동안 태그 맵을 정의하든 그 이후에 정의하든 관계없이 맵의 내용은 JSON 오브젝트로 지정됩니다. 이 JSON 오브젝트에는 사용자 정의 태그, 해당 태그의 문자열 값, 태그가 매핑되는 의미 체계 카테고리를 지정하는 오브젝트의 배열인 'column_tag_map'
키가 포함되어 있습니다. 태그 맵이 분류 프로필과 연결되고 스키마에서 테이블을 자동으로 분류하면 의미 체계 범주에 해당하는 열에 태그가 할당됩니다.
다음은 태그 매핑의 예입니다.
'tag_map': {
'column_tag_map': [
{
'tag_name':'tag_db.sch.pii',
'tag_value':'Highly Confidential',
'semantic_categories':[
'NAME',
'NATIONAL_IDENTIFIER'
]
},
{
'tag_name': 'tag_db.sch.pii',
'tag_value':'Confidential',
'semantic_categories': [
'EMAIL'
]
}
]
}
이 매핑을 기반으로 이메일 주소 열이 있고 분류 프로세스에서 해당 열에 이러한 주소가 포함되어 있다고 판단되면 이메일 주소가 포함된 열에 tag_db.sch.pii = 'Confidential'
태그가 설정됩니다.
여러 개의 JSON 오브젝트가 태그 맵에 포함되어 있고, 태그, 태그 값, 범주 값을 매핑하는 경우, JSON 오브젝트의 순서에 따라 충돌이 발생할 때 열에 설정할 태그와 값이 결정됩니다. JSON 오브젝트를 왼쪽에서 오른쪽으로, JSON 형식으로 지정하는 경우 위에서 아래로 원하는 할당 순서대로 지정합니다.
팁
'column_tag_map'
필드의 각 오브젝트에는 1개의 필수 키('tag_name'
)만 있습니다. 사용자 정의 태그의 값을 지정하지 않으면 분류 프로세스에서 권장되는 SEMANTIC_CATEGORY 태그의 값을 적용합니다.
수동으로 할당된 태그와 자동 분류로 적용된 태그가 충돌하는 경우 오류가 발생합니다. 이러한 오류 추적에 대한 자세한 내용은 문제 해결하기 섹션을 참조하십시오.
자동 분류 결과 보기¶
자동 분류 결과는 다음과 같은 방법으로 볼 수 있습니다.
SYSTEM$GET_CLASSIFICATION_RESULT 저장 프로시저를 호출합니다. 예:
CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
SNOWFLAKE.GOVERNANCE_VIEWER 데이터베이스 역할이 부여된 역할을 사용하여 DATA_CLASSIFICATION_LATEST 뷰를 쿼리합니다. 예:
SELECT * FROM snowflake.account_usage.data_classification_latest;
제한 사항¶
독자 계정에는 분류 프로필을 설정할 수 없습니다.
스키마에는 하나의 분류 프로필만 설정할 수 있습니다.
10,000개를 초과하는 스키마에 동일한 분류 프로필을 설정할 수 없습니다.
스키마에 있는 최대 10,000개의 테이블을 분류할 수 있습니다.
액세스 제어¶
이 섹션에서는 분류 프로필로 작업하고 민감한 데이터 자동 분류를 활성화할 수 있는 권한과 역할에 대해 설명합니다.
작업 |
필수 권한/역할 |
참고 |
---|---|---|
분류 프로필 만들기 |
SNOWFLAKE.CLASSIFICATION_ADMIN 데이터베이스 역할 |
이 데이터베이스 역할을 다른 역할에 부여하는 방법에 대한 자세한 내용은 SNOWFLAKE 데이터베이스 역할 사용하기 섹션을 참조하십시오. |
스키마에 대한 CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE |
이 권한은 분류 프로필 인스턴스를 생성할 스키마에 필요합니다. |
|
분류 프로필 인스턴스에서 메서드 를 호출합니다 |
<classification_profile>!PRIVACY_USER 인스턴스 역할 |
이 인스턴스 역할을 다른 역할에 부여하는 방법에 대한 자세한 내용은 인스턴스 역할 섹션을 참조하십시오. |
스키마에 분류 프로필 설정 |
계정에 대한 EXECUTE AUTO CLASSIFICATION |
이 권한은 기본적으로 ACCOUNTADMIN 에 부여되며, 다른 역할에 이 권한을 부여하는 데 사용할 수 있습니다. |
스키마에 대한 MODIFY |
자동 분류하려는 테이블이 포함된 스키마에 이 권한이 필요합니다. |
|
계정에 대한 APPLY TAG |
||
분류 프로필 나열 |
<classification_profile>!PRIVACY_USER 인스턴스 역할 |
|
분류 프로필 삭제 |
분류 프로필 인스턴스에 대한 OWNERSHIP |
데이터 엔지니어 역할에 이러한 권한과 데이터베이스 역할을 부여하는 예제는 기본 예제: 스키마에서 테이블 자동 분류하기 섹션을 참조하십시오.
민감한 데이터를 자동으로 분류하는 데 드는 비용¶
자동 민감 데이터 분류는 서버리스 컴퓨팅 리소스 를 사용하여 스키마에서 테이블을 분류하기 때문에 크레딧을 소비합니다. 이 소비에 대한 가격에 대한 자세한 내용은 Snowflake Service Consumption Table 의 테이블 5를 참조하십시오.
ACCOUNT_USAGE 및 ORGANIZATION_USAGE 스키마에서 뷰를 쿼리하여 민감한 데이터를 자동으로 분류하는 데 얼마나 많은 비용이 사용되었는지 확인할 수 있습니다. 크레딧 사용을 모니터링하려면 다음 뷰를 쿼리하십시오.
- METERING_HISTORY 뷰(ACCOUNT_USAGE)
SERVICE_TYPE
열에서SENSITIVE_DATA_CLASSIFICATION
에 초점을 맞춰 자동 분류의 시간당 비용을 검색할 수 있습니다. 예:SELECT service_type, start_time, end_time, entity_id, name, credits_used_compute, credits_used_cloud_services, credits_used, budget_id FROM snowflake.account_usage.metering_history WHERE service_type = 'SENSITIVE_DATA_CLASSIFICATION';
- METERING_DAILY_HISTORY 뷰(ACCOUNT_USAGE 및 ORGANIZATION_USAGE)
SERVICE_TYPE
열에서SENSITIVE_DATA_CLASSIFICATION
에 초점을 맞춰 자동 분류의 일일 비용을 검색할 수 있습니다. 예:SELECT service_type, usage_date, credits_used_compute, credits_used_cloud_services, credits_used FROM snowflake.account_usage.metering_daily_history WHERE service_type = 'SENSITIVE_DATA_CLASSIFICATION';
- USAGE_IN_CURRENCY_DAILY (ORGANIZATION_USAGE)
SERVICE_TYPE
열에서SENSITIVE_DATA_CLASSIFICATION
에 초점을 맞춰 자동 분류의 일일 비용을 검색할 수 있습니다. 크레딧이 아닌 통화로 비용을 확인하려면 이 뷰를 사용합니다.
예¶
기본 예제: 스키마에서 테이블 자동 분류하기¶
스키마에서 테이블을 자동으로 분류하려면 다음 단계를 완료하십시오.
관리자로 데이터 엔지니어에게 스키마의 테이블을 자동으로 분류하는 데 필요한 역할과 권한 을 부여하십시오.
USE ROLE ACCOUNTADMIN; GRANT USAGE ON DATABASE mydb TO ROLE data_engineer; GRANT MODIFY ON SCHEMA mydb.sch TO ROLE data_engineer; GRANT SELECT ON TABLE mydb.sch.t1 TO ROLE data_engineer; GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN TO ROLE data_engineer; GRANT CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE ON SCHEMA mydb.sch TO ROLE data_engineer; GRANT EXECUTE AUTO CLASSIFICATION ON ACCOUNT TO ROLE data_engineer; GRANT APPLY TAG ON ACCOUNT TO ROLE data_engineer;
데이터 엔지니어 역할로 전환합니다.
USE ROLE data_engineer;
분류 프로필 을 CLASSIFICATION_PROFILE 클래스의 인스턴스로 생성합니다.
CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE my_classification_profile( { 'minimum_object_age_for_classification_days': 1, 'maximum_classification_validity_days': 30, 'auto_tag': true });
인스턴스에서 DESCRIBE 메서드를 호출하여 속성을 확인합니다.
SELECT my_classification_profile!DESCRIBE();
스키마에 분류 프로필 인스턴스를 설정하면 스키마에서 테이블을 모니터링하고 민감한 데이터를 자동으로 분류하는 백그라운드 프로세스가 시작됩니다.
ALTER SCHEMA mydb.sch SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
SYSTEM$GET_CLASSIFICATION_RESULT 저장 프로시저를 호출하여 자동 분류 결과를 얻습니다.
CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
스키마에서 테이블을 더 이상 자동으로 분류할 필요가 없는 경우 스키마에서 분류 프로필을 설정 해제하십시오.
ALTER SCHEMA mydb.sch UNSET CLASSIFICATION_PROFILE;
DROP CLASSIFICATION_PROFILE 명령을 사용하여 필요하지 않은 분류 프로필을 삭제합니다.
예제: 태그 매핑 및 사용자 지정 분류기 사용하기¶
관리자로 데이터 엔지니어에게 스키마의 테이블을 자동으로 분류하고 열에 태그를 설정하는 데 필요한 역할과 권한 을 부여하십시오.
분류 프로필을 만듭니다.
CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE my_classification_profile( { 'minimum_object_age_for_classification_days': 1, 'maximum_classification_validity_days': 30, 'auto_tag': true });
인스턴스에서 SET_TAG_MAP 메서드를 호출하여 태그 매핑 을 분류 프로필에 추가합니다. 이렇게 하면 민감한 데이터가 포함된 열에 사용자 지정 태그를 자동으로 적용할 수 있습니다.
CALL my_classification_profile!SET_TAG_MAP( {'column_tag_map':[ { 'tag_name':'my_db.sch1.pii', 'tag_value':'sensitive', 'semantic_categories':['NAME'] }]});
또는 분류 프로필을 만들 때 이 태그 매핑을 추가할 수도 있습니다.
SET_CUSTOM_CLASSIFIERS 메서드를 호출하여 사용자 정의 분류기 를 분류 프로필에 추가합니다. 이를 통해 민감한 데이터를 사용자가 정의한 의미 체계 및 개인정보 보호 범주로 자동 분류할 수 있습니다.
CALL my_classification_profile!set_custom_classifiers( { 'medical_codes': medical_codes!list(), 'finance_codes': finance_codes!list() });
또는 분류 프로필을 만들 때 사용자 지정 분류자를 추가할 수도 있습니다.
인스턴스에서 DESCRIBE 메서드를 호출하여 태그 매핑과 사용자 정의 분류기가 분류 프로필에 추가되었는지 확인합니다.
SELECT my_classification_profile!DESCRIBE();
스키마에서 분류 프로필 인스턴스를 설정합니다.
ALTER SCHEMA mydb.sch SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
tag_db.sch.pii
태그에 마스킹 정책을 첨부하여 태그 기반 마스킹을 사용하도록 설정합니다.ALTER TAG tag_db.sch.pii SET MASKING POLICY pii_mask;
예제: 자동 분류를 활성화하기 전에 분류 프로필 테스트하기¶
관리자로 데이터 엔지니어에게 스키마의 테이블을 자동으로 분류하고 열에 태그를 설정하는 데 필요한 역할과 권한 을 부여하십시오.
태그 매핑과 사용자 지정 분류기로 분류 프로필을 만듭니다.
CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE my_classification_profile2( { 'minimum_object_age_for_classification_days':1, 'auto_tag':true, 'tag_map': { 'column_tag_map':[ { 'tag_name':'tag_db.sch.pii', 'tag_value':'highly sensitive', 'semantic_categories':['NAME','NATIONAL_IDENTIFIER'] }, { 'tag_name':'tag_db.sch.pii', 'tag_value':'sensitive', 'semantic_categories':['EMAIL','MEDICAL_CODE'] } ] }, 'custom_classifiers': { 'medical_codes': medical_codes!list(), 'finance_codes': finance_codes!list() } } );
자동 분류를 활성화하기 전에 SYSTEM$CLASSIFY 저장 프로시저를 호출하여
table1
테이블의 태그 매핑을 테스트하십시오.CALL SYSTEM$CLASSIFY( 'db.sch.table1', 'db.sch.my_classification_profile' );
출력의
tags
키에는 태그 설정 여부(설정된 경우true
, 그렇지 않은 경우false
), 설정된 태그의 이름 및 태그 값에 대한 세부 정보가 포함되어 있습니다.{ "classification_profile_config": { "classification_profile_name": "db.schema.my_classification_profile" }, "classification_result": { "EMAIL": { "alternates": [], "recommendation": { "confidence": "HIGH", "coverage": 1, "details": [], "privacy_category": "IDENTIFIER", "semantic_category": "EMAIL", "tags": [ { "tag_applied": true, "tag_name": "snowflake.core.semantic_category", "tag_value": "EMAIL" }, { "tag_applied": true, "tag_name": "snowflake.core.privacy_category", "tag_value": "IDENTIFIER" }, { "tag_applied": true, "tag_name": "tag_db.sch.pii", "tag_value": "sensitive" } ] }, "valid_value_ratio": 1 }, "FIRST_NAME": { "alternates": [], "recommendation": { "confidence": "HIGH", "coverage": 1, "details": [], "privacy_category": "IDENTIFIER", "semantic_category": "NAME", "tags": [ { "tag_applied": true, "tag_name": "snowflake.core.semantic_category", "tag_value": "NAME" }, { "tag_applied": true, "tag_name": "snowflake.core.privacy_category", "tag_value": "IDENTIFIER" }, { "tag_applied": true, "tag_name": "tag_db.sch.pii", "tag_value": "highly sensitive" } ] }, "valid_value_ratio": 1 } } }
분류 프로필을 기반으로 한 자동 분류가 원하는 결과를 가져오는지 확인한 후 스키마에 분류 프로필 인스턴스를 설정합니다.
ALTER SCHEMA mydb.sch SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
문제 해결하기¶
자동 분류 오류는 계정의 기본 이벤트 테이블 에 유지됩니다. 다음 쿼리를 사용하여 오류 메시지에 액세스할 수 있습니다.
SELECT
record_type,
record:severity_text::string log_level,
parse_json(value) error_message
FROM log_db.log_schema.log_table
WHERE record_type='LOG' and scope:name ='snow.automatic_sensitive_data_classification'
ORDER BY log_level;