- LAB: Google Cloud의 서비스 계정과 IAM 역할 설정하기: 챌린지 실습
- 1 Credit
작업 1. Gemini 사용 설정 및 살펴보기 (선택)
패스
작업 2. gcloud CLI로 서비스 계정 만들기
# 1. gcloud 인증
gcloud auth login --no-launch-browser # 문서 기본은 --no-browser. 시크릿 창이 아니라 일반 브라우저로 가서 이걸로 함. URL 열고 인증코드 붙여넣기
# 2. lab-vm SSH 접속 후 환경 확인
gcloud compute ssh lab-vm --zone=us-east1-c
gcloud config list # account는 VM 기본 서비스 계정
# 3. devops 서비스 계정 만들기
gcloud iam service-accounts create devops \
--display-name="DevOps Service Account" \
--description="DevOps 작업을 위한 서비스 계정" # 이메일은 devops@{PROJECT_ID}.iam.gserviceaccount.com
작업 3. gcloud CLI로 서비스 계정에 IAM 권한 부여
# 1. 프로젝트 ID 저장
export PROJECT_ID=$(gcloud config get-value project)
# 2. devops 서비스 계정 이메일 저장
export SA="devops@${PROJECT_ID}.iam.gserviceaccount.com"
# 3. IAM 역할 부여
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SA" \
--role="roles/iam.serviceAccountUser" # Service Account User. 다른 SA로 actAs
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SA" \
--role="roles/compute.instanceAdmin" # Compute Instance Admin. VM 생성/수정/삭제
작업 4. 서비스 계정이 연결된 컴퓨팅 인스턴스 만들기
# 1. devops SA를 붙인 vm-2 만들기
# lab-vm SSH에서 $PROJECT_ID, $SA 유지. zone은 us-east1-c
gcloud compute instances create vm-2 \
--service-account="$SA" \
--scopes="cloud-platform" \
--zone=us-east1-c # cloud-platform = API 접근 범위 전체
# 2. vm-2 SSH 접속
gcloud compute ssh vm-2 --zone=us-east1-c # 여기부터 devops 자격 증명
# 3. 권한 확인
gcloud compute instances list # lab-vm, vm-2 보이면 instanceAdmin 조회 권한 OK
작업 5. YAML로 커스텀 역할 만들기
# 1. role-definition.yaml 만들기
export PROJECT_ID=$(gcloud config get-value project) # 세션에 없으면. lab-vm에서 실행
cat <<EOF > role-definition.yaml
title: "Custom SQL Role"
description: "Allows connecting and getting Cloud SQL instances"
stage: "GA"
includedPermissions:
- cloudsql.instances.connect
- cloudsql.instances.get
EOF # 역할 ID는 아래 CustomSqlRole
# 2. YAML로 커스텀 역할 만들기
gcloud iam roles create CustomSqlRole \
--project=$PROJECT_ID \
--file=role-definition.yaml # 프로젝트 수준 커스텀 역할 생성
# 3. 채점용으로 홈 디렉터리에 복사
# 채점이 파일 위치/소유권을 봄. student-01-..., sa_... 는 랩마다 다름. ls /home 하고 맞추기
sudo cp ~/role-definition.yaml /home/student-01-98f6829d5332/role-definition.yaml 2>/dev/null || true
sudo cp ~/role-definition.yaml /home/sa_100279010484714384218/role-definition.yaml 2>/dev/null || true
sudo chmod 644 /home/student-01-98f6829d5332/role-definition.yaml 2>/dev/null || true
sudo chmod 644 /home/sa_100279010484714384218/role-definition.yaml 2>/dev/null || true
작업 6. 서비스 계정으로 BigQuery 액세스
# 1. bigquery-qwiklab 서비스 계정 만들고 역할 부여
export PROJECT_ID=$(gcloud config get-value project)
export BQ_SA="bigquery-qwiklab@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud iam service-accounts create bigquery-qwiklab \
--display-name="BigQuery Qwiklab Service Account"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$BQ_SA" \
--role="roles/bigquery.user" # BigQuery 사용자
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$BQ_SA" \
--role="roles/bigquery.dataViewer" # BigQuery 데이터 뷰어
# 2. bigquery-instance VM 만들기
gcloud compute instances create bigquery-instance \
--service-account="$BQ_SA" \
--scopes="cloud-platform" \
--zone=us-east1-c # bigquery-qwiklab SA를 붙인 VM
# 3. SSH 접속 후 패키지 설치
gcloud compute ssh bigquery-instance --zone=us-east1-c # 키 질문 나오면 Y, 엔터 연타
sudo apt-get update && sudo apt-get install -y python3-pip
pip3 install google-cloud-bigquery pandas db-dtypes --break-system-packages
# 4. query.py 만들고 실행
export PROJECT_ID=$(gcloud config get-value project)
export BQ_SA="bigquery-qwiklab@${PROJECT_ID}.iam.gserviceaccount.com"
echo "
from google.auth import compute_engine
from google.cloud import bigquery
credentials = compute_engine.Credentials(
service_account_email='${BQ_SA}')
query = '''
SELECT name, SUM(number) as total_people
FROM \`bigquery-public-data.usa_names.usa_1910_2013\`
WHERE state = 'TX'
GROUP BY name, state
ORDER BY total_people DESC
LIMIT 20
'''
client = bigquery.Client(
project='${PROJECT_ID}',
credentials=credentials)
print(client.query(query).to_dataframe())
" > query.py # 테이블명은 echo 깨지지 않게 백틱
python3 query.py