이 페이지에서는 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] |