BigQuery에 권한 설정 시 어떤 점을 고려해야 할까요?
최근들어 고객사들로부터 BigQuery를 사용하는 도중에 IAM 권한 오류로 인한 이슈 문의가 잦아지고 있습니다. 그만큼 BigQuery를 많이 사용하기도 하고 좀 더 안전하게 관리하고자 하는 필요성이 높아진 것이겠죠. 이러한 어려움을 겪는 분들이 많으실 것 같아서 오늘은 안전한 데이터 관리를 위해 조금은 복잡한 BigQuery 서비스의 권한설정(IAM)에 대해 알기 쉽게 설명드리려고 합니다.
Google Cloud에서 사용자의 권한설정을 위해 보통은 프로젝트 레벨에서 IAM을 설정합니다.
이 말은 Cloud Console을 통해 IAM 페이지에 접속하여 사용자별 권한설정을 하는 작업을 의미합니다. 이렇게 설정하면 해당 권한은 프로젝트 전반에 걸쳐 영향을 받게되는데, 예를 들어 프로젝트 레벨로 BigQuery Viewer 역할을 부여받은 사용자가 있다면 그 사용자는 프로젝트에 구성된 모든 BigQuery 데이터셋 및 테이블의 정보를 확인할 수 있습니다. 만약 특정 데이터셋 혹은 특정 테이블의 정보만 확인하도록 권한을 제한해야 한다면 적절하지 않은 설정이 되는거죠.
BigQuery의 주요 역할에 대해서
물론 여러가지 작업을 위한 권한들이 있지만 BigQuery를 사용할 때 필요한 권한은 크게 '데이터 조회'와 'Query 실행' 두 가지라고 생각해볼 수 있습니다. 데이터 조회란 쉽게 말해 BigQuery 저장소에 저장된 데이터 및 메타데이터를 읽는 행위를 의미하고, Query 실행은 데이터 분석 등을 위해 Query문을 실행하는 행위를 의미합니다.
데이터 조회를 위한 역할
- BigQuery Data Viewer : BigQuery에 저장된 데이터 및 메타데이터를 조회할 수 있는 권한이 있는 역할
- BigQuery Data Editor : BigQuery의 데이터 조회 뿐만 아니라 데이터 수정 권한이 포함된 역할
Query 실행을 위한 역할
- BigQuery User : BigQuery 데이터셋과 테이블 리스트를 확인할 수 있고 Query 실행이 가능한 역할
- BigQuery Job User : Query 실행을 위한 최소한의 권한을 가진 역할 (데이터셋과 테이블 리스트를 볼 수는 없음)
각 역할들이 어떤 위치에 설정될 수 있는지와, 설정된 위치에 따라 어떤 작업을 할 수 있는지 표로 간단히 살펴봅니다.
| 역할 / 설정 위치 | 프로젝트 | 데이터셋 | 테이블 |
| BigQuery Data Viewer | 프로젝트의 모든 BQ 데이터 및 리소스 확인 가능 |
설정된 데이터셋에 포함된 모든 데이터 및 리소스 확인 가능 |
설정된 테이블의 모든 데이터 확인 가능 |
| BigQuery Data Editor | 데이터조회 + 데이터셋 생성 + 테이블 생성 및 삭제 가능 |
데이터조회 + 테이블 생성 및 삭제 가능 |
데이터조회 + 테이블 삭제 가능 |
| BigQuery User | Job 실행 + 모든 데이터셋 나열 및 데이터셋 생성 가능 | Job 실행 + 데이터셋 나열 가능 | 설정불가 |
| BigQuery Job User | Job 실행 가능 | 설정불가 | 설정불가 |
BigQuery 역할 부여의 권장 예시
편하게 프로젝트 레벨에서 BigQuery Admin을 부여하면 한번에 해결되겠지만 보안상의 이유로 조금 세분화시켜 역할을 적용하고 싶다면 위에 설명한 두 부분의 역할을 조합하여 설정할 수 있습니다.
좀 더 확실한 이해를 돕기위해 몇가지 시나리오를 가지고 설명하겠습니다.
1. 프로젝트에 Job 실행 권한만 있을 경우

위와 같이 BigQuery 권한이 설정된 상태에서 아래 Query를 실행시키면 어떤 결과가 나올까요?
SELECT * FROM 'project-a.myds.table_a'
정답은 "Query가 실행되지 않는다" 입니다.
프로젝트 레벨에 Job을 실행할 수 있는 BigQuery Job User가 설정되어 있어서 왠지 모든 데이터에 대해 Query가 될 것 같지만, 데이터 조회가 가능한 테이블에 한하여 Job이 실행되기 때문에 사실 아무것도 실행되지 않습니다.
2. 프로젝트에 Job 실행 권한 + 특정 테이블에 조회권한이 있을 경우

앞서 본 설정에다가 특정 테이블에 BigQuery Data Viewer 역할을 추가로 준 경우입니다.
다음 Query가 잘 실행될까요?
SELECT * FROM 'project-a.myds.table_a'
정답은 "table_a에 한하여 Query가 잘 실행된다" 입니다.
Viewer 역할로 table_a 테이블의 데이터를 조회할 권한이 생긴 사용자는 해당 테이블에 대한 Query를 실행하면 문제없이 수행됩니다. 하지만 데이터조회 권한이 없는 table_b 테이블에 대해서는 아무리 시도해도 Query가 실행되진 않습니다.
3. 데이터 저장과 Query를 각각 다른 프로젝트에서 수행할 경우

A 프로젝트의 저장된 데이터를 B 프로젝트에서 조회한다고 하면 이 두 프로젝트에 각각 어떻게 권한을 설정해야 할까요??
# 현재 Project-B의 BigQuery에서 쿼리문 작성
SELECT * FROM 'project-a.myds.table_b'
위 Query가 실행되기 위해 필요한 권한을 '데이터 조회'와 'Job 실행' 관점에서 분리하여 생각해봅니다.
우선 Job이 수행된다는 것은 콘솔상에 RUN 버튼을 누를 수 있다는 것과 같은 말인데요, 이 모습을 상상해보면 Job 실행에 대한 권한을 어디에 설정해야 하는지 알 수 있습니다. 바로 'A 프로젝트'이죠. Query문을 작성하는 것도 이걸 실행하기 위해 RUN 버튼을 누르는 것도 모두 A 프로젝트에서 할테니 BigQuery Job User 역할은 A 프로젝트에서 설정해주어야 합니다.
Job 실행이 가능하다고 해도 실제로 데이터 조회권한이 없다면 Query는 실행되지 않는다고 설명드렸습니다. 조회할 데이터가 어디에 저장되어 있는지 생각해보고 해당 위치에 권한을 설정하면 되는데요, 바로 'B 프로젝트' 입니다. 프로젝트 안에서도 실제 조회하고자 하는 데이터가 저장된 위치가 table_b이기 때문에 'table_b'에서 BigQuery Data Viewer 역할을 설정해주셔야 합니다.
BigQuery에 권한을 제어할 수 있는 역할도 많고 설정하는 위치도 다양하다보니 어려움이 많은 것 같습니다.
저도 이번 기회에 이렇게 정리하고 보니 꽤나 복잡하게 느껴졌던 BigQuery IAM이 머릿속에서 간단하게 정리되었는데요, 이 글을 보시는 분들도 BigQuery에 권한 설정하는 것이 조금은 쉽게 느껴지셨으면 좋겠습니다.
'GCP' 카테고리의 다른 글
| 조직정책 - compute.vmExternalIpAccess (2) | 2024.08.09 |
|---|---|
| 조직 정책(Org. Policy)의 이해 (0) | 2024.08.07 |
| IAM 개요 (0) | 2020.09.13 |