ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Bigquery] 데이터 마스킹이란
    DB/Bigquery 2024. 2. 26. 23:40

    데이터 마스킹을 사용해 컬럼 데이터를 선택적으로 가릴 수 있습니다. 정책 태그의 컬럼 수준 액세스 제어를 기반으로 동작하기 때문에 정책 태그 기능을 숙지해야 합니다.

    장점

    • 민감한 컬럼을 허용된 그룹에게만 전체 오픈할 수 있으므로 데이터 공유 프로세스가 간소화됨
    • 컬럼 수준 액세스 제어와 달리 사용자가 액세스할 수 없는 컬럼을 제외하는 액션이 필요없음
      • 즉, 기존 쿼리를 수정할 필요가 없음
    • 정책 태그 기능과 연결된 기능으로 정책 태그의 장점을 그대로 취할 수 있음

    데이터 마스킹 워크플로

    1. 분류 및 정책 태그 정의
    2. 데이터 마스킹 규칙 설정과 사용자 또는 그룹 구성원을 정책 태그에 매핑
    3. 빅쿼리 테이블의 컬럼에 정책 태그를 할당하여 데이터 정책을 적용
    4. 정책 태그에 대한 액세스 관리
      1. 마스킹된 데이터에 액세스해야 하는 사용자를 Bigquery 마스킹된 리더 역할 에 할당
      2. 프로젝트 수준 이상에서 역할을 할당하면 사용자에게 프로젝트의 모든 데이터 정책에 대한 권한이 부여되어 과도한 권한으로 인한 문제가 발생할 수 있음

    데이터 정책과 연결된 정책 태그를 컬럼 수준 액세스 제어에도 사용할 수 있습니다. 이 경우 정책 태그는 Data Catalog 세분화된 권한의 리더 역할 이 부여된 하나 이상의 주 구성원과도 연결됩니다. 이렇게 하면 이러한 주 구성원이 마스킹 해제된 원래 컬럼 데이터에 액세스할 수 있습니다.

    다음은 데이터 마스킹과 컬럼 수준 액세스 제어가 함께 동작하는 방식입니다.

    데이터 마스킹 규칙

    데이터 마스킹은 쿼리 런타임 시 컬럼에 데이터 마스킹 규칙을 적용합니다.

    데이터 마스킹 규칙은 다음과 같이 여러 규칙이 존재합니다.

    종류

    커스텀 마스킹 루틴

    컬럼에 사용자 정의 함수(UDF)를 적용한 후 반환합니다. 이 규칙은 기본적으로 STRUCT 데이터 타입을 제외한 모든 타입을 지원합니다. 하지만 STRINGBYTES 이외의 데이터 타입에 대한 지원은 제한됩니다.

    날짜 연도 마스크

    값을 연도로 자른 후 반환하여 값에서 연도가 아닌 모든 부분을 연도의 시작으로 설정합니다. 이 규칙은 DATE, DATETIME, TIMESTAMP 데이터 타입을 사용하는 컬럼에만 사용할 수 있습니다.

    기본 마스킹 값

    컬럼의 데이터 타입에 따라 컬럼의 기본 마스킹 값을 반환합니다. 값은 숨기고 데이터 타입을 공개하려는 경우에 사용합니다. 이러한 데이터 마스킹 규칙이 컬럼에 적용되면 마스킹된 리더 액세스 권한이 있는 사용자가 [JOIN](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax?hl=ko#join_types) 을 사용한다면 값이 고유하지 않기 때문에 비효율이 발생합니다.

    이메일 마스크

    유효한 이메일의 사용자 이름을 XXXXX로 바꾼 후 반환합니다. 유효한 이메일 주소가 아닌 경우 SHA-256 해시 함수를 통해 실행된 값을 반환됩니다. 이 규칙은 STRING 데이터 타입을 사용하는 컬럼에만 사용할 수 있습니다.

    처음 4자(영문 기준)

    처음 4자를 반환하고 나머지 문자열을 XXXXX로 바꿉니다. 길이가 4자 이하면 SHA-256 해시 함수를 통해 실행한 후 반환합니다. 이 규칙은 STRING 데이터 타입을 사용하는 컬럼에만 사용할 수 있습니다.

    마지막 4자(영문 기준)

    마지막 4자를 반환하고 나머지 문자열을 XXXXX로 바꿉니다. 길이가 4자 이하면 SHA-256 해시 함수를 통해 실행한 후 반환합니다. 이 규칙은 STRING 데이터 타입을 사용하는 컬럼에만 사용할 수 있습니다.

    해시(SHA-256)

    SHA-256 해시 함수를 통해 실행된 값을 반환합니다. 이 마스킹을 진행하면 JOIN 작업에서 비효율이 발생하지 않아 그대로 사용할 수 있습니다. 이 규칙은 STRING 또는 BYTES 데이터 타입을 사용하는 컬럼에만 사용할 수 있습니다.

    무효화

    NULL을 반환합니다. 컬럼의 값과 데이터 타입을 모두 숨길 때 사용합니다.

    계층 구조

    정책 태그에 대해 최대 9개의 데이터 정책을 구성할 수 있으며 여러 정책이 적용될 때, 다음 계층 구조에 따라 적용할 데이터 마스킹 규칙을 선택합니다.

    1. 커스텀 마스킹 루틴
    2. 해시(SHA-256)
    3. 이메일 마스크
    4. 마지막 4자(영문 기준)
    5. 처음 4자(영문 기준)
    6. 날짜 연도 마스크
    7. 기본 마스킹 값
    8. 무효화

    권한

    데이터 마스킹이 적용된 열의 데이터를 쿼리하려면 BigQuery 마스킹된 리더 역할이 필요합니다.

    마스킹된 리더 역할과 세분화된 권한의 리더 역할의 상호작용

    데이터 마스킹은 컬럼 수준 액세스 제어를 기반으로 동작합니다. 특정 컬럼의 경우 마스킹된 데이터를 읽을 수 있는 BigQuery 마스킹된 리더 역할을 보유한 일부 사용자, 마스킹되지 않은 데이터를 읽을 수 있는 Data Catalog 세분화된 리더 역할을 보유한 일부 사용자, 둘 다 가진 사용자, 어느 쪽도 가지고 있지 않은 일부 사용자가 있을 수 있습니다. 이러한 역할은 다음과 같이 상호작용합니다.

    • 세분화된 권한의 리더 역할마스킹된 리더 역할이 모두 있는 사용자: 사용자에게 표시되는 내용은 정책 태그 계층 구조에서 각 역할이 부여된 위치에 따라 다름
    • 세분화된 권한의 리더 역할이 있는 사용자: 마스킹 해제된 원본 데이터를 볼 수 있음
    • 마스킹된 리더 역할이 있는 사용자: 마스킹된 데이터를 볼 수 있음
    • 역할이 없는 사용자: 권한 거부

    테이블에 보안 또는 마스킹된 컬럼이 있는 경우 해당 테이블에서 SELECT * FROM 문을 실행하려면 사용자가 위의 모든 컬럼에서 마스킹된 리더 또는 세분화된 권한의 리더 역할이 부여된 적절한 그룹의 구성원이어야 합니다.

    정책 태그 계층 구조의 승인 상속

    역할은 컬럼과 연결된 정책 태그부터 평가되며 사용자에게 적절한 권한이 있는지 또는 정책 태그 계층 구조의 최상위에 도달했는지 확인될 때까지 해당 분류의 각 오름차순으로 확인됩니다.

    동일한 정책 태그에 세분화된 권한의 리더 역할마스킹된 리더 역할 모두 가진 경우 세분화된 권한의 리더 역할 이 우선되어 원본 데이터를 볼 수 있습니다.

    상위 정책 태그에는 세분화된 권한의 리더 역할, 하위 정책 태그에는 마스킹된 리더 역할 을 가진 경우에 가장 하위 권한을 먼저 체크합니다. 하위 정책 태그에 마스킹된 리더 역할 권한을 가지고 있기 때문에, 상위 정책 태그의 권한 여부에 상관없이 마스킹된 리더 역할 권한 설정에 따라 마스킹된 데이터가 보여집니다.

    비용

    데이터 마스킹은 처리되는 바이트 수에 간접적으로 영향을 미칠 수 있습니다. 사용자가 무효화 또는 기본 마스킹 값 규칙으로 마스킹된 컬럼을 쿼리하면 스캔되지 않으므로 처리하는 바이트 수가 줄어듭니다.

    예시

    데이터 마스킹 생성 및 적용

    1. 정책 태그에 마스킹 규칙 추가

    정책 태그 생성은 이전 정책 태그 예시 1번과 동일

    1. 마스킹할 태그 선택 후 데이터 정책 관리 버튼 클릭

    1. 마스킹 규칙 설정 후 제출 버튼 클릭

    2.빅쿼리 컬럼에 정책 태그 설정

    빅쿼리 컬럼에 정책 태그 설정은 이전 정책 태그 예시 2번과 동일

    3. 데이터 조회

    최상위 정책 태그에 세분화된 권한의 리더 역할, 하위 정책 태그에 마스킹된 리더 역할

    컬럼에 하위 정책 태그 부여

    정책 태그 구조 상속은 오름차순으로 실행되므로 가장 하위인 마스킹된 리더 역할이 적용되어 마스킹된 데이터로 조회

    컬럼에 최상위 정책 태그 부여

    정책 태그가 트리 구조를 이루고 있지만 컬럼에서 선택한 정책 태그는 최상위이므로 세분화된 권한의 리더 역할이 적용되어 원본 데이터로 조회

    최상위 정책 태그에 마스킹된 리더 역할, 하위 정책 태그에 세분화된 권한의 리더 역할

    컬럼에 하위 정책 태그 부여

    정책 태그 구조 상속은 오름차순으로 실행되므로 가장 하위인 세분화된 권한의 리더 역할이 적용되어 원본 데이터로 조회

    컬럼에 최상위 정책 태그 부여

    정책 태그가 트리 구조를 이루고 있지만 컬럼에서 선택한 정책 태그는 최상위이므로 마스킹된 리더 역할이 적용되어 마스킹된 데이터로 조회

    요약

    • 정책 태그를 활용하여 컬럼 기반 데이터 마스킹을 진행할 수 있음
    • 데이터 마스킹을 사용하면 사용자가 권한이 존재하지 않은 컬럼을 쿼리에서 제거하는 행위를 할 필요가 사라짐
    • 데이터 마스킹과 컬럼 기반 접근 제어 권한은 각각 있으며 이를 잘 숙지하고 사용해야함
    • 데이터 마스킹은 쿼리 스캔 비용을 증가시킬 수 있음
    • 정책 태그 구조에서 권한 상속은 사실상 없다고 봐야함
      • 관리의 용이성을 위함이라고 보여짐

    레퍼런스

    https://cloud.google.com/bigquery/docs/column-data-masking-intro?hl=ko#role-interaction

    https://www.bespinglobal.com/bigquery-dynamic-data-masking/

    댓글