[GCP] Google Cloud IAM 권한 설정 기초 및 실습

NewNewDaddy·2024년 12월 6일
1

GCP

목록 보기
1/3
post-thumbnail

0. INTRO

  • IAM(Identity and Access Management) 서비스는 각 클라우드 플랫폼에서 유저와 권한을 관리할 수 있는 아주 핵심적이고 근원적인 서비스이다. 이번 글에서는 GCP(Google Cloud Platform)를 공부한지 얼마 안된 유저로써 GCP의 IAM 권한 설정 관련 글을 써보고자 한다.
  • 조금 더 자세히 말하자면 Service Account의 생성 및 권한 부여를 통해 어떤식으로 리소스 사용 권한이 적용될 수 있는지를 알아 볼 것이다.

1. 서비스 계정(Service Account) 및 역할

1. 서비스 계정에 대한 설명

  • 서비스 계정은 GCP 리소스를 사용하는 사용자가 아니라 애플리케이션, 가상 머신(VM), 또는 기타 서비스가 GCP 리소스에 액세스할 수 있도록 권한을 부여하는 특수한 유형의 계정이다. 즉, 사람이 아니라 프로그램이 사용하도록 설계된 계정인 것이다.
  • 해당 서비스 계정에 부여되는 JSON 형식을 된 KEY 파일 혹은 SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com 이러한 형식으로 부여되는서비스 계정 메일 주소를 통해 권한 인증 후 리소스에 대한 접근이 가능하다.
  • VM 인스턴스, Cloud Run, App Engine 등 GCP 리소스는 서비스 계정을 사용하여 다른 GCP 리소스에 액세스할 수 있는 것이다.

2. 서비스 계정의 유형

1) 기본 서비스 계정

  • GCP 리소스(VM, App Engine, Cloud Run 등)에서 자동으로 생성되는 SA.

2) 사용자 정의 서비스 계정

  • 사용자가 필요에 따라 생성하고 관리하는 SA로 특정 애플리케이션에 권한을 부여하거나, 프로젝트에서 세부적인 권한 제어를 위해 사용된다.

3. 역할

  • GCP 리소스에 대한 권한(permission)을 그룹화한 개념으로 세 가지 주요 유형으로 나뉘게 된다.

1) Primitive Role (기본 역할)

  • GCP 리소스에 대해 넓은 범위의 권한을 제공하며, 프로젝트 수준에서 주로 사용된다. 소유자(Owner), 편집자(Editor), 뷰어(Viewer) 이렇게 세가지 타입이 있으며 초기에 제공된 역할로, 권한이 포괄적이라 운영 상황에서는 사용이 권장되지 않는다.
    • Owner : 프로젝트의 전체 제어 권한.
    • Editor : 프로젝트의 대부분의 리소스에 대한 읽기/쓰기 권한.
    • Viewer : 프로젝트 리소스를 읽을 수 있는 권한.

2) Predefined Role (사전 정의된 역할)

  • 특정 GCP 서비스에서 제공하는 더 세분화된 역할로 개별 서비스에 필요한 최소 권한을 기반으로 정의되며, 특정 작업만을 수행하는 경우(예: VM 관리 또는 BigQuery 쿼리 실행)에 적합하다.
    - 예시
    • Compute Engine Instance Admin : Compute Engine VM 인스턴스 관리 가능.
    • BigQuery Data Viewer : BigQuery 데이터 세트 읽기 권한만 제공.
    • Storage Object Admin : Cloud Storage 버킷과 객체 관리 권한.

3) Custom Role (사용자 정의 역할)

  • 사용자 혹은 조직의 리소스 사용 요구사항에 맞게 직접 정의한 역할로, 리소스별로 세부적으로 필요한 권한만 포함시킬 수 있기 때문에 가장 바람직한 IAM Usecase이다.

2. 서비스 계정 생성 및 등록

  • GCP는 위 사진과 같은 계층구조를 가지고 있다. 프로젝트에 따라서 사용하는 리소스들이 논리적으로 구분지어지기 때문에 서비스 계정 역시도 특정 프로젝트에 종속되게 된다.

1. 서비스 계정 생성

  • 최상단에서 프로젝트 선택 후 IAM 및 관리자 > 서비스 계정 > +서비스 계정 만들기를 클릭하여 서비스 계정을 생성할 수 있다.
  • 처음에는 아무런 권한 부여를 하지 않은 채로 생성을 한다.
  • 해당 실습에서 생성한 계정은 test1-357@codeit-hyunsoo.iam.gserviceaccount.com 이다.

2. 프로젝트의 주 구성원으로 등록

  • 최초 생성한 서비스 계정은 단지 만들어져있을 뿐이다. 따라서, 해당 서비스 계정을 활용하기 위해서는 특정 프로젝트의 구성원으로 등록되는 작업이 필요하다.
  • IAM 및 관리자 > IAM > +액세스 권한 부여 메뉴로 들어간 후 주 구성원 추가 > 새 주 구성원 칸에 위에서 만든 서비스 계정의 키워드를 입력하면 자동으로 아래에서 해당 계정을 선택할 수 있다.
  • 아래의 역할 선택도 필수 항목이기 때문에 선택을 해야하는데, 처음에는 Primitive Role과 Predefined Role만 존재를 하기 때문에 수행하려는 작업과 연관된 역할을 선택하고 추후에 Custom Role 적용을 통해 권한을 제한시켜주는 작업이 필요하다.
  • 아니면 Custom Role을 먼저 만들고 그 역할을 바로 적용시켜줄 수도 있다.
  • 역할까지 선택 후 저장 버튼을 누르면 선택한 프로젝트의 주 구성원으로 위에서 생성한 test1 서비스 계정이 등록되게 된다.

3. 서비스 계정 인증 Key 발급

  • 생성한 서비스 계정을 통해 사용자가 GCP의 리소스들과 CLI 방식이나 SDK 방식으로 작업하고 소통하기 위해서는 해당 서비스 계정의 인증 Key가 필요하다.
  • IAM 및 관리자 > 서비스 계정 메뉴에 들어가서 생성한 서비스 계정을 선택한다. 그리고 탭에 들어가서 키 추가 > 새 키 만들기를 선택하여 권한 인증에 필요한 JSON 형식의 Key 파일을 생성해준다.
  • 이렇게 생성한 Key는 연결된 서비스 계정의 권한을 그대로 가지고 있다. 예를 들어 해당 서비스 계정이 GCS 읽기 권한만을 가지고 있다면 그 Key로 수행할 수 있는 작업 역시 GCS 읽기 작업에 한정된다.

3. 서비스 계정을 통한 리소스 접근

  • 서비스 계정 생성 및 구성원 등록까지 마쳤으니 test1 서비스 계정을 통해 BigQuery에 있는 테이블을 조회해보는 실습을 해 볼 것이다.
  • python으로 조회를 해 올 것이기 때문에 아래 라이브러리들 설치가 필요하다.
    google-cloud-bigquery==3.17.2 
    db-dtypes==1.2.0
    pandas==2.1.1
    numpy==1.26.1
    pandas-gbq

1. 관련 권한 없이 조회

  • 먼저 서비스 계정에 bigquery의 데이터 조회 관련 권한을 주지 않고 코드를 실행해본다.
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 없이 코드가 잘 동작하는 것을 알 확인할 수 있다.
  • Predefined Role로 권한 추가를 해주었을 때는 권한 범위도 비교적 넓고, 여러가지 항목들이 추가가 되어야 했지만, Custom Role 생성 후 추가를 해줄때는, 필요한 권한들만 쏙쏙 뽑아서 하나의 역할로 통합을 한 후 추가되기 때문에 권한 범위도 훨씬 한정적이고, UI에서 보기에도 직관적일 수 있다.
profile
데이터 엔지니어의 작업공간 / #PYTHON #CLOUD #SPARK #AWS #GCP #NCLOUD

0개의 댓글