BigQuery Authorized View

김민형·2023년 5월 9일
0

GCP - Data

목록 보기
7/44

Authorized View

승인된 뷰를 사용하면 기본 소스 데이터에 대한 액세스 권한을 부여하지 않고도 특정 사용자 및 그룹과 쿼리 결과를 공유할 수 있다.

일반 뷰 vs 승인된 뷰

데이터 엔지니어링 팀은 로우 데이터의 많은 테이블이 있는 데이터 세트를 유지 관리하지만 이러한 테이블의 하위 집합을 특정 팀과 공유하려는 니즈가 있을 수 있다.

ex) 분석가는 사용자별 정보가 있는 열을 제외하는 테이블 버전에 액세스한다거나 특정 사용자가 지정된 BigQuery 테이블 또는 뷰에서 특정 행만 볼 수 있어야 한다거나

이는 승인된 뷰를 사용하여 로그인한 사용자에 대한 정보를 가져와 행 수준 필터링을 수행할 수 있다.

데이터 세트 생성

  • source_data 데이터 세트 생성
  • analyst_views 데이터 세트 생성

Cloud Shell에서 아래 명령어 실행

bq load --autodetect <프로젝트 ID>:source_data.<테이블 이름> gs://cloud-training/gcpsec/labs/bq-authviews-source.csv

아래와 같은 데이터가 있다.
각각의 데이터에 대해 사용할 수 있는 사용자 email이 정해져 있는 것

여기서 email이 rhonda.burns@example-dev.com로 되어있던 68개 행을 새 이메일 주소(사용자2 이메일)로 업데이트

update source_data.events
set email='<사용자2 이메일>'
where email='rhonda.burns@example-dev.com'

analyst_views 데이터 세트에 아래 쿼리 결과를 no_user_info 이름의 뷰로 저장
(사용자별 정보를 제외한 이벤트 데이터)

SELECT
date,
type,
company,
call_duration,
call_type,
call_num_users,
call_os,
rating,
comment,
session_id,
dialin_duration,
ticket_number,
ticket_driver
FROM
<프로젝트 ID>.source_data.events

analyst_views 데이터 세트에 아래 쿼리 결과도 row_filter_session_user 이름의 뷰로 저장

SELECT
*
FROM
<프로젝트 ID>.source_data.events
WHERE
email = SESSION_USER()

아래 사진과 같이 결과가 아예 안나오는게 당연하다.

이는 where 조건에서 SESSION_USER()를 걸어줬기 때문.
SESSION_USER() 함수도 귀찮아서 이미 물어본 김에 ChatGPT한테 물어봤다.

즉, 테이블 데이터에서 email 컬럼에 현재 접속해있는 내 계정이 없기 때문에 아무 결과가 나오지 않았던 것

데이터 세트 보안

analyst_views 데이터 세트를 사용자2와 공유하고 BigQuery Data Viewer 역할을 부여

기본적으로 맨 처음의 사진에서 나와있는 것처럼 사용자2의 계정은 IAM에서 이 프로젝트에 대한 BigQuery Job User 권한도 갖고 있어야 한다.

소스 데이터 세트에 대한 권한에서 BigQuery 관련 역할들에 프로젝트 단위로 허용하는 권한이 들어가 있으면 사용자2가 원시 데이터에 액세스가 가능하니 BigQuery Admin, BigQuery Data Owner등의 권한에 사용자1 계정 기반으로 액세스하게 해주고 사용자2가 포함된 것은 모두 삭제해준다.

Authorized View 생성
no_user_info 뷰, row_filter_session_user 뷰를 승인된 뷰로 설정

만들어놨던 일반 뷰를 소스 데이터에서 승인된 뷰로 만드는 것.
(row_filter_session_user 뷰도 아래랑 똑같이 승인 추가)

테스트

사용자2로 로그인

아래 쿼리를 날리면 모두 보인다.

SELECT
*
FROM
analyst_views.no_user_info
WHERE
type='register'

아래 쿼리는 현재 세션에 접속되어 있는 사용자 이메일에 해당하는 68개의 행만 보여지게 된다.
(처음에 rhonda.burns 계정을 사용자2 계정으로 업데이트 했으므로)

SELECT
*
FROM
analyst_views.row_filter_session_user

원시 데이터에 대한 권한은 없으므로 쿼리 불가능

SELECT
  *
FROM
  `source_data.events`

[BigQuery Authorized View 참고]

profile
Solutions Architect (rlaalsgud97@gmail.com)

0개의 댓글