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-gbq1. 관련 권한 없이 조회
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 없이 코드가 잘 동작하는 것을 알 확인할 수 있다.