BigQuery 행 수준 보안 소개

이 문서에서는 행 수준 보안의 개념, BigQuery에서 작동하는 방식, 행 수준 보안을 사용하여 데이터를 보호해야 하는 경우 및 기타 세부정보를 설명합니다.

행 수준 보안이란 무엇인가요?

행 수준 보안을 사용하면 사용자의 자격 조건을 기준으로 데이터를 필터링하고 테이블의 특정 행에 액세스하도록 허용할 수 있습니다.

BigQuery는 이미 프로젝트, 데이터 세트, 테이블 수준에서 액세스 제어를 지원하며 정책 태그를 통한 열 수준 보안도 지원합니다. 행 수준 보안은 행 수준 액세스 정책을 통해 BigQuery 테이블의 데이터 하위 집합에 대한 세분화된 액세스 제어를 실현함으로써 최소 권한의 원칙을 확장합니다.

하나의 테이블에 여러 개의 행 수준 액세스 정책이 포함될 수 있습니다. 행 수준 액세스 정책은 테이블 수준, 데이터 세트 수준, 프로젝트 수준 액세스 제어는 물론 행 수준 보안으로 테이블에 공존할 수 있습니다.

행 수준 보안의 작동 원리

대략적으로, 행 수준 보안에는 대상 BigQuery 테이블에 행 수준 액세스 정책을 만드는 작업이 포함됩니다. 이러한 정책은 사용자나 그룹이 허용된 목록에 있는지 여부에 따라 특정 데이터 행을 숨기거나 표시하는 필터 역할을 합니다.

Identity and Access Management(IAM) 역할인 BigQuery 관리자 또는 BigQuery DataOwner 역할을 갖는 승인된 사용자는 BigQuery 테이블에 행 수준 액세스 정책을 만들 수 있습니다.

행 수준 액세스 정책을 만들 때는 테이블 이름을 지정하고 특정 행 데이터에 액세스할 수 있는 사용자 또는 그룹(grantee-list라고 함)을 지정합니다. 정책에는 filter_expression이라는 필터링 기준으로 사용할 데이터도 포함됩니다. filter_expression은 일반적인 쿼리의 WHERE 절처럼 작동합니다.

행 수준 액세스 정책을 만들고 사용하는 방법에 대한 안내는 행 수준 보안 작업을 참조하세요.

행 수준 액세스 정책을 만들 때의 전체 구문, 사용 방법, 옵션에 대한 DDL 참조를 확인하세요.

사용 사례

리전을 기반으로 행 데이터 필터링

dataset1.table1 테이블에 region 열이 가리키는 여러 리전에 속한 행이 있다고 가정해 보겠습니다.

데이터 소유자 또는 관리자는 행 수준 보안을 사용하여 'group:apac의 사용자는 APAC 리전의 파트너만 볼 수 있음'과 같은 정책을 구현할 수 있습니다.

리전에 대한 행 수준 보안 사용 사례

결과적으로 sales-apac@example.com 그룹의 사용자가 Region = "APAC"인 행만 볼 수 있습니다. 이와 비슷하게 sales-us@example.com 그룹의 사용자는 US 리전의 행만 볼 수 있습니다. APAC 또는 US 그룹에 없는 사용자에게는 행이 표시되지 않습니다.

us_filter라는 행 수준 액세스 정책은 미국의 영업 책임자인 jon@example.com을 포함한 여러 항목에 액세스 권한을 부여하며, 이제 이들은 모두 US 리전에 속하는 행에 액세스할 수 있습니다.

민감한 정보를 기준으로 행 데이터 필터링

이제 다른 사용 사례로, 급여 데이터 테이블을 살펴 보겠습니다.

급여에 대한 행 수준 보안 사용 사례

grantee_list는 회사 도메인의 구성원만 쿼리하도록 제한합니다. 또한 SESSION_USER() 함수를 통해 사용자의 이메일 주소를 기준으로 쿼리를 실행하는 사용자에게 속한 행으로만 액세스를 더 제한합니다. 이 경우에는 jim@example.com입니다.

다른 방법이 아닌 행 수준 보안을 사용해야 하는 경우

승인된 뷰, 행 수준 액세스 정책, 별도 테이블에 데이터 저장 방식은 각기 다른 수준의 보안, 성능, 편의성을 제공합니다. 사용 사례에 적합한 메커니즘을 선택해야 적절한 수준으로 데이터의 보안을 강화할 수 있습니다.

승인된 뷰와 비교: 취약점

행 수준 보안 및 승인된 뷰를 통한 행 수준 액세스 적용이라는 두 가지 방법 모두 잘못 사용할 경우 취약점이 발생할 수 있습니다.

행 수준 보안을 위해 승인된 뷰를 사용하든 행 수준 액세스 정책을 사용하든, 감사 로깅을 사용하여 의심스러운 활동을 모니터링하는 것이 좋습니다.

쿼리 기간과 같은 사이드 채널은 스토리지 샤드 에지에 있는 행에 대한 정보를 유출할 수 있습니다. 이러한 공격을 실행하려면 테이블이 샤딩된 방식을 어느 정도 알고 있거나 대량의 쿼리를 사용해야 합니다.

이러한 부차 채널 공격 방지에 대한 상세 설명은 행 수준 보안 권장사항을 참조하세요.

승인된 뷰, 행 수준 보안, 별도 테이블 비교

다음 표에서는 승인된 뷰, 행 수준 액세스 정책, 별도 테이블의 성능과 보안을 비교합니다.

보안 추천 대상
승인된
교묘하게 설계된 쿼리, 쿼리 기간 및 기타 유형의 사이드 채널 공격에 취약합니다. 유연성과 성능이 가장 중요한 경우.

예: 동일한 작업 그룹과 데이터 공유
행 수준 액세스 정책 교묘하게 설계된 쿼리 및 쿼리 기간 사이드 채널 공격에 취약합니다. 모든 사용자가 동일한 테이블을 쿼리하도록 하는 것이 편리한 경우. 예를 들어 모든 사용자가 동일한 대시보드를 공유하지만 일부 사용자는 더 많은 데이터에 액세스하는 경우입니다.

뷰에 대한 보안을 강화하려는 경우.

예: 조직 내에서 테이블 슬라이스 공유
별도 테이블 완전히 격리됩니다. 격리가 가장 중요한 경우. 예를 들어 총 행 수가 비밀이어야 하는 경우가 있습니다.

예: 제3자 파트너 및 공급업체 등 조직 외부에 데이터 공유

행 수준 액세스 정책 만들기 및 관리

테이블에서 행 수준 액세스 정책을 생성, 업데이트(다시 만들기), 나열, 조회, 삭제하는 방법에 대한 자세한 내용과 행 수준 액세스 정책이 있는 테이블을 쿼리하는 방법은 행 수준 액세스 보안 작업을 참조하세요.

할당량

행 수준 보안의 할당량 및 한도에 대한 자세한 내용은 BigQuery 할당량 및 한도를 참조하세요.

가격 책정

행 수준 보안은 BigQuery에 무료로 포함되어 있습니다.

테이블의 행 수준 액세스 정책에 액세스할 때 청구되는 비용은 쿼리와 유사합니다. 그러나 행 수준 액세스 정책은 처리되는 바이트 수에 다음과 같이 간접적인 영향을 줄 수 있습니다.

  • 행 수준 액세스 정책이 있는 테이블을 대상으로 쿼리를 실행하면, 필터 표현식 대신 WHERE 절을 사용하여 동일한 쿼리를 작성한 경우와 동일한 방식으로 청구 바이트 수가 계산됩니다.
  • 행 수준 액세스 정책 필터는 파티션을 나누고 클러스터링된 테이블의 쿼리 프루닝에 참여하지 않습니다.

BigQuery 쿼리 가격 책정에 대한 자세한 내용은 BigQuery 가격 책정을 참조하세요.

제한사항

행 수준 보안 제한사항에 대한 자세한 내용은 BigQuery 행 수준 보안 제한을 참조하세요. 다음 섹션에서 행 수준 보안 제한에 대해 추가로 설명합니다.

성능 제한사항

행 수준 보안이 일부 BigQuery 기능 및 서비스와 상호작용하는 방법에 대한 자세한 내용은 다른 BigQuery 기능과 함께 행 수준 보안 사용을 참조하세요.

보안 제한사항

사이드 채널 공격 억제에 대한 자세한 내용은 BigQuery의 행 수준 보안 권장사항을 참조하세요.

기타 제한사항

  • 테이블 하나에 최대 100개의 행 액세스 정책이 있을 수 있습니다.

  • 행 액세스 정책은 Legacy SQL과 호환되지 않습니다. 행 수준 액세스 정책이 있는 테이블 쿼리에는 표준 SQL이 사용되어야 합니다. Legacy SQL 쿼리는 오류와 함께 거부됩니다.

  • JSON 열에서는 행 수준 액세스 정책을 적용할 수 없습니다.

  • 일부 BigQuery 기능은 행 수준 보안과 호환되지 않습니다. 자세한 내용은 행 수준 보안 사용을 참조하세요.

  • 테이블 데이터에 대한 전체 액세스 권한이 필요한 서비스 계정 작업을 포함한 쿼리가 아닌 작업은 TRUE 필터로 행 수준 보안을 사용할 수 있습니다. 예시에는 테이블 복사, dataproc 워크플로 등이 포함됩니다. 자세한 내용은 행 수준 보안 사용을 참조하세요.

  • 행 수준 액세스 정책 만들기, 교체 또는 삭제는 DDL 문으로 수행되어야 합니다. 행 수준 액세스 정책 나열 및 보기는 콘솔 또는 bq 명령줄 도구를 통해 수행될 수 있습니다.

  • 테이블 샘플링은 행 수준 보안과 호환되지 않습니다.

감사 로깅 및 모니터링

행 수준 액세스 정책이 하나 이상 있는 테이블의 데이터를 읽으면 해당 읽기 요청에 대한 IAM 승인 정보에 읽기 액세스 권한이 승인된 행 수준 액세스 정책이 표시됩니다.

행 수준 액세스 정책 만들기 및 삭제는 감사 로깅되며 Cloud Logging을 통해 액세스될 수 있습니다. 감사 로그에는 행 수준 액세스 정책의 이름이 포함됩니다. 하지만 행 수준 액세스 정책의 filter_expressiongrantee_list 정의는 사용자 정보 또는 기타 민감한 정보를 포함할 수 있기 때문에 로그에서 생략됩니다. 행 수준 액세스 정책의 나열 및 보기는 감사 로깅되지 않습니다.

BigQuery의 로깅에 대한 자세한 내용은 BigQuery 모니터링 소개를 참조하세요.

Google Cloud의 로깅에 대한 상세 설명은 Cloud Logging을 참조하세요.

다음 단계