IAM, Service Account & Custom VPC bằng gcloud
🎯 Mục tiêu: Tạo project, custom VPC, subnet; tạo Service Account với role tối thiểu; gán role IAM cho user.
🧰 Công cụ / nền tảng: gcloud CLI (hoặc Cloud Shell), tài khoản GCP có billing.
📦 Chuẩn bị: Cài gcloud SDK (gcloud --version); chạy gcloud auth login và gcloud auth application-default login.
▶️ Các bước (CLI):
# 1. Tạo project mới (thay PROJECT_ID bằng ID duy nhất)
export PROJECT_ID="htlab-devops-m11"
gcloud projects create $PROJECT_ID --name="HTLab DevOps M11"
gcloud config set project $PROJECT_ID
# 2. Bật billing (thay BILLING_ACCOUNT_ID)
# gcloud billing projects link $PROJECT_ID --billing-account=BILLING_ACCOUNT_ID
# 3. Bật các API cần thiết
gcloud services enable compute.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
monitoring.googleapis.com \
logging.googleapis.com
# 4. Tạo custom VPC (không tự tạo subnet)
gcloud compute networks create htlab-vpc \
--subnet-mode=custom \
--bgp-routing-mode=regional
# 5. Tạo subnet cho ứng dụng (asia-southeast1 = Singapore)
gcloud compute networks subnets create htlab-app-subnet \
--network=htlab-vpc \
--region=asia-southeast1 \
--range=10.10.1.0/24 \
--enable-private-ip-google-access
# 6. Tạo firewall rule: cho phép SSH từ IAP
gcloud compute firewall-rules create allow-iap-ssh \
--network=htlab-vpc \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20 \
--description="Allow SSH via IAP"
# 7. Tạo firewall rule: cho phép HTTP internal
gcloud compute firewall-rules create allow-internal-http \
--network=htlab-vpc \
--allow=tcp:80,tcp:8080,tcp:443 \
--source-tags=allow-http \
--target-tags=web-server
# 8. Tạo Service Account cho ứng dụng (least privilege)
gcloud iam service-accounts create htlab-app-sa \
--display-name="HTLab App Service Account"
SA_EMAIL="htlab-app-sa@${PROJECT_ID}.iam.gserviceaccount.com"
# 9. Gán role tối thiểu (chỉ đọc Storage)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${SA_EMAIL}" \
--role="roles/storage.objectViewer"
# 10. Kiểm tra IAM policy
gcloud projects get-iam-policy $PROJECT_ID \
--flatten="bindings[].members" \
--format="table(bindings.role,bindings.members)" | grep htlab
🖥️ Đối chiếu GUI (Cloud Console):
IAM & Admin → IAM: xem binding; VPC network → VPC networks: kiểm tra htlab-vpc và subnet; Firewall: kiểm tra 2 rule vừa tạo.
✅ Kết quả mong đợi: gcloud compute networks describe htlab-vpc ra subnetMode: CUSTOM; gcloud iam service-accounts list thấy htlab-app-sa; policy binding hiển thị role storage.objectViewer.
🧹 Cleanup:
# Giữ lại project, subnet dùng cho LAB-052 đến LAB-055
# Sau khi hoàn thành toàn bộ module, xóa project:
# gcloud projects delete $PROJECT_ID