이 페이지에서는 BigQuery로 내보낸 Sensitive Data Protection 발견 항목을 분석하는 데 사용할 수 있는 쿼리 예시를 제공합니다.
검사 작업 또는 작업 트리거를 구성하여 발견 항목을 BigQuery에 저장할 수 있습니다. 이렇게 하면 추가 분석을 위해 발견 항목을 쿼리할 수 있습니다. 결과를 BigQuery로 내보내면 데이터가 새 테이블 또는 기존 테이블에 기록됩니다.
Sensitive Data Protection이 검사 후 수행할 수 있는 모든 작업에 대한 자세한 내용은 작업 개념 주제를 참조하세요.
쿼리 실행에 대한 자세한 내용은 다음을 참조하세요.
BigQuery 테이블 열
내보낸 발견 항목 테이블의 열은 Finding
객체의 속성을 기반으로 합니다.
발견 항목이 포함된 행으로 결과 다시 연결
BigQuery 테이블 검사를 구성하는 경우 내보낸 발견 항목에 행 식별자가 포함되도록 작업 또는 작업 트리거를 설정할 수 있습니다. 이렇게 하면 검사 발견 항목을 포함하는 행에 다시 연결할 수 있습니다.
검사 작업 또는 작업 트리거에서 다음 필드를 테이블의 각 행을 고유하게 식별하는 열 이름, 즉 기본 키의 목적을 제공하는 열로 설정합니다.
- Google Cloud 콘솔을 사용하는 경우 식별 필드(쉼표로 구분) 필드를 설정합니다.
- DLP API를 사용하는 경우
identifyingFields
속성을 설정합니다.
검사가 완료되고 발견 항목을 BigQuery로 내보내면 각 발견 항목에는 지정한 열의 해당 값이 포함됩니다. 이러한 값은 location.content_locations.record_location.record_key.id_values
필드에 있습니다. 그런 다음 이러한 값을 사용하여 발견 항목을 검사된 BigQuery 테이블의 특정 행에 다시 연결할 수 있습니다.
샘플 쿼리
다음 샘플 쿼리를 사용하여 결과를 분석할 수 있습니다. Looker Studio와 같은 시각화 도구에서 쿼리를 사용할 수도 있습니다. 이러한 쿼리는 결과 데이터 쿼리를 시작하는 데 도움이 됩니다.
다음 각 쿼리에서 다음을 바꿉니다.
PROJECT_ID
: 프로젝트 식별자DATASET
: BigQuery 데이터 세트 이름TABLE_ID
: 테이블 ID
각 infoType 개수 선택
Google Cloud 콘솔
SELECT info_type.name, COUNT(info_type.name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID` GROUP BY info_type.name ORDER BY count DESC;
명령줄
bq query --use_legacy_sql=false ' SELECT info_type.name, COUNT(info_type.name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID` GROUP BY info_type.name ORDER BY count DESC;'
일별로 각 infoType 개수 선택
Google Cloud 콘솔
SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY info_type.name, day ORDER BY count DESC;
명령줄
bq query --use_legacy_sql=false ' SELECT info_type.name, cast(TIMESTAMP_SECONDS(create_time.seconds) as date) as day, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY info_type.name, day ORDER BY count DESC;'
각 컨테이너에서 각 infoType 개수 선택
Google Cloud 콘솔
SELECT info_type.name, locations.container_name, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY locations.container_name, info_type.name ORDER BY count DESC;
명령줄
bq query --use_legacy_sql=false ' SELECT info_type.name, locations.container_name, COUNT(locations.container_name) AS count FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations GROUP BY locations.container_name,info_type.name ORDER BY count DESC;'
테이블의 각 열에서 찾은 결과 유형 선택
이 쿼리는 모든 결과를 열 이름으로 그룹화하고 BigQuery 검사 작업의 결과에서 작동하도록 수행됩니다. 이 쿼리는 지정된 열의 가능한 유형을 식별하려고 할 때 유용합니다. WHERE 및 HAVING 절을 수정하여 설정을 조정할 수 있습니다. 예를 들어 결과 테이블에 여러 테이블 결과가 포함된 경우 하나의 작업 실행 또는 하나의 테이블 이름으로 제한할 수 있습니다.
Google Cloud 콘솔
SELECT table_counts.field_name, STRING_AGG( CONCAT(" ",table_counts.name," [count: ",CAST(table_counts.count_total AS String),"]") ORDER BY table_counts.count_total DESC) AS infoTypes FROM ( SELECT locations.record_location.field_id.name AS field_name, info_type.name, COUNT(*) AS count_total FROM `PROJECT_ID.DATASET.TABLE_ID`, UNNEST(location.content_locations) AS locations WHERE (likelihood = 'LIKELY' OR likelihood = 'VERY_LIKELY' OR likelihood = 'POSSIBLE') GROUP BY locations.record_location.field_id.name, info_type.name HAVING count_total>200 ) AS table_counts GROUP BY table_counts.field_name ORDER BY table_counts.field_name
위의 쿼리는 샘플 테이블에 대해 다음과 같은 결과를 생성할 수 있습니다. 여기서 infoType 열은 해당 열에서 각 infoType의 인스턴스가 몇 개인지를 알려줍니다.
field_name | infoTypes |
---|---|
field1 |
CUSTOM_USER_US [count: 7004] , CUSTOM_USER_EU [count: 2996] |
field2 |
US_VEHICLE_IDENTIFICATION_NUMBER [count: 9597] |
field3 |
EMAIL_ADDRESS [count: 10000] |
field4 |
IP_ADDRESS [count: 10000] |
field5 |
PHONE_NUMBER [count: 7815] |
field6 |
US_SOCIAL_SECURITY_NUMBER [count: 10000] |
field7 |
CREDIT_CARD_NUMBER [count: 10000] |