JSON 형식을 된 KEY 파일
혹은 SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
이러한 형식으로 부여되는서비스 계정 메일 주소
를 통해 권한 인증 후 리소스에 대한 접근이 가능하다.1) 기본 서비스 계정
2) 사용자 정의 서비스 계정
1) Primitive Role (기본 역할)
소유자(Owner)
, 편집자(Editor)
, 뷰어(Viewer)
이렇게 세가지 타입이 있으며 초기에 제공된 역할로, 권한이 포괄적이라 운영 상황에서는 사용이 권장되지 않는다.2) Predefined Role (사전 정의된 역할)
3) Custom Role (사용자 정의 역할)
1. 서비스 계정 생성
IAM 및 관리자 > 서비스 계정 > +서비스 계정 만들기
를 클릭하여 서비스 계정을 생성할 수 있다.test1-357@codeit-hyunsoo.iam.gserviceaccount.com
이다.2. 프로젝트의 주 구성원으로 등록
IAM 및 관리자 > IAM > +액세스 권한 부여
메뉴로 들어간 후 주 구성원 추가 > 새 주 구성원
칸에 위에서 만든 서비스 계정의 키워드를 입력하면 자동으로 아래에서 해당 계정을 선택할 수 있다.역할 선택
도 필수 항목이기 때문에 선택을 해야하는데, 처음에는 Primitive Role과 Predefined Role만 존재를 하기 때문에 수행하려는 작업과 연관된 역할을 선택하고 추후에 Custom Role 적용을 통해 권한을 제한시켜주는 작업이 필요하다.저장
버튼을 누르면 선택한 프로젝트의 주 구성원으로 위에서 생성한 test1
서비스 계정이 등록되게 된다.3. 서비스 계정 인증 Key 발급
IAM 및 관리자 > 서비스 계정
메뉴에 들어가서 생성한 서비스 계정을 선택한다. 그리고 키
탭에 들어가서 키 추가 > 새 키 만들기
를 선택하여 권한 인증에 필요한 JSON 형식의 Key 파일을 생성해준다.GCS 읽기
권한만을 가지고 있다면 그 Key로 수행할 수 있는 작업 역시 GCS 읽기
작업에 한정된다.test1
서비스 계정을 통해 BigQuery에 있는 테이블을 조회해보는 실습을 해 볼 것이다.google-cloud-bigquery==3.17.2
db-dtypes==1.2.0
pandas==2.1.1
numpy==1.26.1
pandas-gbq
1. 관련 권한 없이 조회
import pandas as pd
from google.oauth2 import service_account
SERVICE_ACCOUNT_FILE = "[JSON 키 파일 경로]"
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE)
project_id = "codeit-hyunsoo"
sql = f"SELECT * FROM {project_id}.test.boston"
df = pd.read_gbq(sql,
project_id=project_id,
dialect="standard",
credentials=credentials,
location='asia-northeast3',
)
bigquery.jobs.create
권한이 없다는 메세지가 뜨면서 코드 실행이 되지 않는다.2. 서비스 계정에 Predefined Role 추가 후 조회
IAM 및 관리자 > IAM
메뉴에 들어가서 test1
계정 선택 후 우측에 있는 연필 모양 수정 버튼을 눌러준다.+다른 역할 추가
버튼을 눌러 데이터 조회에 필요한 BigQuery 데이터 뷰어
, BigQuery 작업 사용자
두 역할을 추가해준다.3. 서비스 계정에 Custom Role 추가 후 조회
IAM 및 관리자 > 역할 > +역할 만들기
클릭하여 커스텀 역할을 생성탭으로 들어간다.+권한 추가
를 눌러 해당 서비스 계정에 필요한 세부적인 권한들을 추가해준다.IAM 및 관리자 > IAM
메뉴에서 test1
계정에 대해 수정 버튼을 누르고 위에서 생성한 test1-custom-role
을 선택하여 적용시켜준다.permission error
없이 코드가 잘 동작하는 것을 알 확인할 수 있다.