Ngân hàng đề — Google Cloud Associate Cloud Engineer

Tìm thấy 449 câu.

Câu 11

A client of yours wants to deploy a stateless application to a Kubernetes cluster using a deployment. The replication controller is named my-app-rc. The application should scale based on CPU utilization; specifically when CPU utilization exceeds 80%. There should never be fewer than 2 pods or more than 6. What command would you use to implement autoscaling with these parameters?

  1. A

    kubectl autoscale deployment my-app-rc --min=2 --max=6 --cpu-percent=80

  2. B

    kubectl apply deployment my-app-rc --min=2 --max=6 --cpu-percent=80

  3. C gcloud containers autoscale rc my-app-rc --min=2 --max=6 --cpu-percent=80
  4. D gcloud containers apply rc my-app-rc --min=2 --max=6 --cpu-percent=80
Xem giải thích

Đáp án

A — kubectl autoscale deployment my-app-rc --min=2 --max=6 --cpu-percent=80

Vì sao đúng

Đây là lệnh tạo Horizontal Pod Autoscaler (HPA) — đúng công cụ cho việc co giãn số pod theo CPU.

⚠ Điểm mấu chốt — kubectl quản lý bên trong cụm, gcloud quản lý chính cụm:

gcloud container clusters ...
        ↓
    Tạo, xoá, nâng cấp CỤM
    Quản node pool
        ↓
kubectl ...
        ↓
    Quản lý TÀI NGUYÊN BÊN TRONG cụm:
      pod, deployment, service, HPA, configmap…
        ↓
    → co giãn pod là việc BÊN TRONG cụm
    → phải dùng kubectl

⚠ Cú pháp lệnh khớp đúng ba tham số của đề:

kubectl autoscale deployment my-app-rc \
  --min=2 --max=6 --cpu-percent=80
        ↓
    --min=2         → không bao giờ dưới 2 pod
    --max=6         → không bao giờ trên 6 pod
    --cpu-percent=80 → mục tiêu CPU trung bình 80%
        ↓
    → tạo ra một đối tượng HorizontalPodAutoscaler

⚠ Một điều kiện bắt buộc để HPA hoạt động:

HPA tính phần trăm CPU SO VỚI `requests`
        ↓
    Container KHÔNG khai resources.requests.cpu
        ↓
    → HPA không có mẫu số để tính
    → chỉ số hiện <unknown>
    → autoscaler KHÔNG hoạt động
        ↓
    → luôn phải đặt `requests` cho container

Vì sao các phương án khác sai

  • B (kubectl apply deployment ...) — đây là phương án gần nhất vì dùng đúng công cụ kubectl, nhưng apply dùng để áp một tệp manifest (kubectl apply -f tep.yaml), không nhận các cờ --min, --max, --cpu-percent.

  • C và D (gcloud containers ...) — sai hai lần: nhóm lệnh đúng là gcloud container (số ít), và gcloud không quản lý HPA — đó là tài nguyên bên trong cụm.

Ghi nhớ

⚠ gcloud ↔ kubectl — bảng phải thuộc: | Công cụ | Quản lý gì | |---|---| | gcloud container clusters | tạo, xoá, nâng cấp CỤM; node pool | | kubectl | pod, deployment, service, HPA, ingress — BÊN TRONG cụm | | Lấy thông tin đăng nhập | gcloud container clusters get-credentials <ten> | | Bẫy | gcloud không tạo được HPA, deployment hay service |

Từ khoá nhận diện:

"co giãn số POD theo CPU" → kubectl autoscale (HPA) "thêm NODE khi pod Pending" → Cluster Autoscaler "chỉnh CPU/RAM cho mỗi pod" → VPA "tạo hoặc nâng cấp cụm" → gcloud container clusters "kết nối kubectl với cụm" → get-credentials

Ba bộ autoscaler trong GKE — nhắc lại Việc
HPA số lượng POD — theo CPU, bộ nhớ, hoặc chỉ số tuỳ chỉnh
VPA tài nguyên mỗi pod — thường phải khởi động lại pod
Cluster Autoscaler số lượng NODE — phản ứng với pod Pending
Node auto-provisioning tự tạo node pool mới với loại máy phù hợp
Kết hợp phổ biến HPA + Cluster Autoscaler
HPA — điều kiện và chi tiết Nội dung
Bắt buộc container phải khai resources.requests
Chỉ số mặc định CPU — tính theo % của requests
Chỉ số khác bộ nhớ, chỉ số tuỳ chỉnh, chỉ số ngoài (Cloud Monitoring)
Metrics server GKE đã cài sẵn
Kiểm tra kubectl get hpa — cột TARGETS hiện <unknown> là thiếu requests
Hành vi co giãn có stabilization window để tránh dao động
Các lệnh kubectl hay dùng Việc
kubectl get pods -o wide xem pod và node của chúng
kubectl describe pod <ten> chẩn đoán vì sao pod không chạy
kubectl logs <pod> -c <container> xem log
kubectl scale deployment <ten> --replicas=N co giãn thủ công
kubectl autoscale deployment ... tạo HPA
kubectl rollout status / undo theo dõi và lùi lại lần triển khai
kubectl top pods mức dùng tài nguyên hiện tại
requests và limits — quan trọng hơn người ta tưởng Nội dung
requests cơ sở để scheduler xếp pod, và để HPA tính %
limits trần cứng — vượt CPU thì bị bóp, vượt bộ nhớ thì OOMKilled
Đặt quá thấp node bị nhồi, pod bị giết
Đặt quá cao lãng phí, Cluster Autoscaler thêm node không cần
Công cụ VPA ở chế độ gợi ý để tìm giá trị đúng

Ba việc kiểm chứng: | Việc | Cách | |---|---| | HPA có hoạt động không | kubectl get hpa — xem cột TARGETS và REPLICAS | | Vì sao không co giãn | kubectl describe hpa <ten> — đọc phần Events | | Pod dùng bao nhiêu tài nguyên | kubectl top pods |

Và một nguyên nhân chiếm phần lớn các ca "HPA không hoạt động": container quên khai resources.requests.cpu. Khi đó kubectl get hpa hiện <unknown> ở cột TARGETS, autoscaler không có mẫu số để tính phần trăm, và số pod nằm im mãi ở mức tối thiểu — một triệu chứng rất dễ bị đổ nhầm cho cấu hình HPA thay vì cho manifest của chính deployment.

Câu 12

You have a Cloud Datastore database that you would like to back up. You'd like to issue a command and have it return immediately while the backup runs in the background.  You want the backup file to be stored in a Cloud Storage bucket named my-datastore-backup. What command would you use?

  1. A gcloud datastore backup gs://my-datastore-backup
  2. B gcloud datastore export gs://my-datastore-backup --async
  3. C gsutil datastore export gs://my-datastore-backup --async
  4. D gcloud datastore export gs://my-datastore-backup
Xem giải thích

Đáp án

B — gcloud datastore export gs://my-datastore-backup --async

Vì sao đúng

Đề đòi hai thứ: sao lưu ra Cloud Storage, và lệnh trả về ngay trong khi việc chạy nền.

⚠ Điểm mấu chốt — động từ là EXPORT, không phải backup:

Datastore / Firestore
        ↓
    Không có lệnh "backup"
        ↓
    Cơ chế sao lưu là XUẤT DỮ LIỆU (export)
    ra một bucket Cloud Storage
        ↓
    gcloud datastore export gs://bucket
        ↓
    Và khôi phục bằng:
      gcloud datastore import gs://bucket/...

⚠ Và --async là phần thứ hai của yêu cầu:

Không có --async
        ↓
    Lệnh CHỜ tới khi export xong
    → với dữ liệu lớn có thể mất hàng giờ
        ↓
Có --async
        ↓
    Lệnh trả về NGAY, kèm một OPERATION ID
        ↓
    → theo dõi bằng:
      gcloud datastore operations list
      gcloud datastore operations describe <id>
        ↓
    → đúng yêu cầu "trả về ngay, chạy nền"

⚠ Cờ --async là mẫu chung của gcloud:

Rất nhiều lệnh gcloud chạy lâu đều có --async
        ↓
    gcloud compute instances create --async
    gcloud container clusters create --async
    gcloud sql backups create --async
        ↓
    → trả về operation, theo dõi riêng
    → rất hữu ích trong script và CI/CD

Vì sao các phương án khác sai

  • D (gcloud datastore export gs://my-datastore-backup) — đây là phương án gần nhất và lệnh hoàn toàn đúng, nhưng thiếu --async: nó sẽ chờ cho tới khi export xong, trái với yêu cầu "trả về ngay".

  • A (gcloud datastore backup ...) — không có động từ backup trong nhóm gcloud datastore.

  • C (gsutil datastore export ...) — sai công cụ: gsutil chỉ làm việc với Cloud Storage, không quản lý Datastore.

Ghi nhớ

⚠ Sao lưu và khôi phục Datastore/Firestore — bảng phải thuộc: | Việc | Lệnh | |---|---| | Sao lưu | gcloud datastore export gs://bucket | | Khôi phục | gcloud datastore import gs://bucket/<duong-dan> | | Chạy nền | --async | | Theo dõi | gcloud datastore operations list / describe | | Xuất một phần | --kinds và --namespaces | | Bucket | nên CÙNG Region với database để tránh phí và độ trễ |

Từ khoá nhận diện:

"sao lưu Datastore/Firestore" → export ra Cloud Storage "lệnh trả về ngay" → --async "theo dõi việc đang chạy nền" → operations list / describe "gsutil quản lý dịch vụ khác" → luôn SAI — gsutil chỉ cho Cloud Storage "khôi phục về thời điểm" → Firestore PITR (7 ngày), Datastore mode không có

Firestore ↔ Datastore — nên biết Nội dung
Firestore in Datastore mode kế thừa Datastore, API tương thích ngược
Firestore in Native mode thời gian thực, offline, cho ứng dụng di động và web
Chọn một lần không đổi mode được sau khi tạo
Lệnh CLI gcloud datastore và gcloud firestore — nhiều lệnh trùng nhau
PITR Firestore có point-in-time recovery 7 ngày
Export không phải snapshot nhất quán tại một thời điểm Nội dung
Đặc điểm export KHÔNG đóng băng dữ liệu
Hệ quả dữ liệu ghi trong lúc export có thể có hoặc không trong bản xuất
Muốn nhất quán dừng ghi, hoặc dùng PITR (Firestore)
Chi phí tính như thao tác đọc trên toàn bộ thực thể được xuất
Định dạng LevelDB — không đọc trực tiếp được, chỉ dùng để import lại
Tự động hoá sao lưu định kỳ Cách
Cloud Scheduler kích hoạt theo lịch
Cloud Functions hoặc Workflows gọi API export
Object Lifecycle trên bucket tự xoá bản xuất cũ
Thay thế Firestore scheduled backups — tính năng có sẵn, không cần tự dựng
Giữ nhiều nơi copy bản xuất sang bucket ở Region khác
Các dịch vụ CSDL của Google Cloud Dùng khi
Firestore / Datastore NoSQL tài liệu, ứng dụng web và di động
Bigtable NoSQL cột rộng, thông lượng rất cao, chuỗi thời gian
Cloud SQL MySQL, PostgreSQL, SQL Server được quản lý
Cloud Spanner SQL, giao dịch, mở rộng ngang TOÀN CẦU
BigQuery kho dữ liệu phân tích
Memorystore Redis, Memcached được quản lý

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Export xong chưa | gcloud datastore operations list | | Bản xuất nằm ở đâu | gcloud storage ls gs://my-datastore-backup | | Import có chạy được không | thử import vào một project THỬ NGHIỆM |

Và một việc rất nên làm định kỳ với mọi cơ chế sao lưu, không riêng Datastore: thử khôi phục thật vào một project thử nghiệm. Một bản xuất tồn tại trong bucket không chứng minh được điều gì cho tới khi bạn nạp nó trở lại thành công — và thời điểm để phát hiện bản xuất bị hỏng chắc chắn không phải là lúc dữ liệu thật đã mất.

Câu 13

A software development team is using Google Cloud Artifact Registry to manage container images. You have recently joined the team and want to view metadata about existing registries. What command would you use?

  1. A

    gcloud artifacts repositories list

  2. B

    gcloud reposoitories container list

  3. C gcloud container metadata list
  4. D

    gcloud container list metadata

Xem giải thích

Đáp án

A — gcloud artifacts repositories list

Vì sao đúng

Câu này kiểm tra cấu trúc lệnh gcloud và tên dịch vụ đúng.

⚠ Điểm mấu chốt — nhóm lệnh là artifacts, không phải container:

Artifact Registry (dịch vụ HIỆN HÀNH)
        ↓
    gcloud artifacts ...
        ↓
Container Registry (GCR — dịch vụ CŨ, đã ngừng)
        ↓
    gcloud container images ...
        ↓
    → đề nói rõ "Artifact Registry"
    → nhóm lệnh phải là `artifacts`

⚠ Và cấu trúc nhóm trước, động từ sau:

gcloud  artifacts  repositories  list
          ↑            ↑          ↑
        nhóm       nhóm con    động từ
        ↓
    → "gcloud repositories container list" sai thứ tự
    → "gcloud container metadata list" sai cả nhóm

⚠ Artifact Registry lưu được nhiều hơn container image:

Định dạng hỗ trợ:
        ↓
    Docker / OCI image
    Maven, npm, Python, Go
    Apt, Yum
    Helm chart
        ↓
    → đây là lý do nó thay thế Container Registry:
      một nơi cho MỌI loại artifact
        ↓
    Mỗi repository khai một ĐỊNH DẠNG và một VỊ TRÍ

Vì sao các phương án khác sai

  • B (gcloud reposoitories container list) — sai chính tả (reposoitories), sai thứ tự, và không có nhóm lệnh nào như vậy.

  • C (gcloud container metadata list) — nhóm gcloud container dành cho GKE, và không có nhóm con metadata.

  • D (gcloud container list metadata) — sai thứ tự (động từ phải đứng sau nhóm) và cũng sai nhóm lệnh.

Ghi nhớ

⚠ Các lệnh Artifact Registry hay dùng — bảng đáng thuộc: | Lệnh | Việc | |---|---| | gcloud artifacts repositories list | liệt kê repository | | gcloud artifacts repositories describe <ten> | xem chi tiết một repository | | gcloud artifacts repositories create | tạo mới — khai --repository-format và --location | | gcloud artifacts docker images list <repo> | liệt kê image | | gcloud artifacts docker images delete | xoá image | | gcloud auth configure-docker <location>-docker.pkg.dev | cấu hình Docker để push/pull |

Từ khoá nhận diện:

"Artifact Registry" → gcloud artifacts "GKE, cụm Kubernetes" → gcloud container clusters "Container Registry (GCR)" → dịch vụ CŨ, đã ngừng — chuyển sang Artifact Registry "quét lỗ hổng image" → Artifact Analysis (tên cũ: Container Analysis) "chặn image chưa duyệt chạy trên GKE" → Binary Authorization

Artifact Registry ↔ Container Registry Khác nhau
Artifact Registry hiện hành — nhiều định dạng, IAM chi tiết theo repository
Container Registry (GCR) cũ, đã ngừng phát triển — chỉ Docker, quyền dựa trên bucket
Tên miền <location>-docker.pkg.dev ↔ gcr.io
Phân quyền IAM ở mức REPOSITORY ↔ dựa vào quyền của bucket GCS
Khuyến nghị mọi dự án mới dùng Artifact Registry
Bảo mật cho image container Lớp
Artifact Analysis quét lỗ hổng tự động khi push
Binary Authorization chỉ cho phép image đã ký chạy trên GKE
IAM theo repository artifactregistry.reader / writer / admin
CMEK mã hoá bằng khoá của bạn
Immutable tag chặn ghi đè tag đã tồn tại — rất đáng bật
Dọn dẹp cleanup policy tự xoá image cũ
Vai trò IAM của Artifact Registry Nội dung
roles/artifactregistry.reader kéo image
roles/artifactregistry.writer đẩy và kéo
roles/artifactregistry.repoAdmin quản lý một repository
roles/artifactregistry.admin quản lý mọi repository
Thực hành tốt service account của GKE chỉ cần reader
Vị trí của repository Nội dung
Regional ví dụ asia-southeast1 — gần cụm GKE để kéo nhanh
Multi-regional us, europe, asia
Ảnh hưởng vị trí quyết định độ trễ khi kéo image và phí dữ liệu ra
Lưu ý không đổi vị trí sau khi tạo

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có những repository nào | gcloud artifacts repositories list | | Image trong repo | gcloud artifacts docker images list <location>-docker.pkg.dev/<proj>/<repo> | | Docker đã cấu hình chưa | gcloud auth configure-docker <location>-docker.pkg.dev |

Và một tính năng rất nên bật ngay khi tạo repository cho môi trường production: immutable tag. Nó ngăn việc đẩy đè lên một tag đã tồn tại, nên v1.2.3 hôm nay và v1.2.3 sáu tháng sau chắc chắn là cùng một image — thứ khiến việc điều tra sự cố và việc kiểm toán trở nên đáng tin cậy thay vì phải đoán.

Câu 14 Networking

A developer is trying to upload files from their local device to a Compute Engine VM using the gcloud compute scp command. The copy command is failing. What would you check to try to correct the problem?

  1. A Add the identity of the developer to the administrator group for the VM.
  2. B Ensure firewall rules allow traffic to port 22 to allow SSH connections.
  3. C Grant the identity the roles/compute.admin role
  4. D Grant the identity compute.admin permission
Xem giải thích

Đáp án

B — Kiểm tra firewall rule có cho phép lưu lượng tới CỔNG 22 để SSH kết nối được không.

Vì sao đúng

gcloud compute scp chạy trên nền SSH, nên mọi thứ chặn SSH cũng chặn nó.

⚠ Điểm mấu chốt — scp dùng đúng đường của SSH:

gcloud compute scp
        ↓
    Bên dưới là SSH (cổng 22)
        ↓
    Firewall của GCP MẶC ĐỊNH CHẶN mọi ingress
        ↓
    Không có luật cho phép cổng 22
        ↓
    → kết nối không thiết lập được
    → lệnh copy thất bại

⚠ Luật firewall cần có:

Direction: INGRESS
Source:    35.235.240.0/20   (nếu dùng IAP)
           hoặc IP của người dùng
Protocol:  tcp:22
Target:    network tag của VM, hoặc service account
        ↓
    Mạng "default" của GCP có sẵn luật
      default-allow-ssh
        ↓
    → VPC tự tạo thì KHÔNG có luật này
    → phải tự thêm

⚠ Và cách hiện đại hơn — IAP TCP forwarding:

Identity-Aware Proxy (IAP) cho SSH
        ↓
    Kết nối đi qua hạ tầng của Google
        ↓
    → VM KHÔNG cần IP công cộng
    → chỉ mở cổng 22 cho dải 35.235.240.0/20
      (dải của IAP), không mở cho internet
        ↓
    gcloud compute ssh <vm> --tunnel-through-iap
    gcloud compute scp <tep> <vm>: --tunnel-through-iap
        ↓
    → phân quyền bằng IAM
      (roles/iap.tunnelResourceAccessor)

Vì sao các phương án khác sai

  • C và D (cấp roles/compute.admin hoặc quyền compute.admin) — đây là các phương án gần nhất vì quyền cũng có thể là nguyên nhân, nhưng compute.admin quá rộng cho việc chỉ cần SSH, và quyền IAM không mở được đường mạng. (Quyền tối thiểu để SSH là roles/compute.osLogin hoặc compute.instanceAdmin.v1.)

  • A (thêm danh tính vào "administrator group" của VM) — không có khái niệm nhóm quản trị của VM trong Google Cloud. Quyền được cấp bằng IAM, và đăng nhập hệ điều hành quản bằng OS Login.

Ghi nhớ

⚠ Firewall của Google Cloud — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Mặc định | CHẶN mọi ingress, CHO PHÉP mọi egress | | Phạm vi | áp cho cả VPC, không gắn vào từng máy | | Nhắm mục tiêu | network tag, service account, hoặc mọi instance | | Ưu tiên | 0-65535, số NHỎ HƠN thắng (mặc định 1000) | | Chiều | ingress và egress khai riêng | | Mạng default | có sẵn default-allow-ssh, default-allow-icmp, default-allow-internal |

Từ khoá nhận diện:

"scp hoặc ssh thất bại" → firewall cổng 22, trước tiên "không muốn VM có IP công cộng" → IAP TCP forwarding "quản lý người dùng SSH tập trung" → OS Login "VM ra internet mà không có IP công cộng" → Cloud NAT "VM gọi API Google mà không ra internet" → Private Google Access

Danh sách kiểm tra khi SSH/SCP thất bại Bước
1 Firewall có luật ingress tcp:22 không
2 Luật có nhắm đúng tag hoặc service account của VM không
3 VM có IP công cộng không, hoặc dùng --tunnel-through-iap
4 Quyền IAM: roles/compute.osLogin hoặc instanceAdmin
5 Nếu dùng IAP: roles/iap.tunnelResourceAccessor
6 gcloud compute ssh --troubleshoot — công cụ chẩn đoán có sẵn
Ba cách đăng nhập VM của GCP Nội dung
Metadata SSH key cách cũ — khoá gắn vào project hoặc instance
OS Login quản lý người dùng SSH bằng IAM — khuyến nghị
IAP TCP forwarding không cần IP công cộng, không mở cổng ra internet
Kết hợp tốt nhất OS Login + IAP
Vai trò roles/compute.osLogin và roles/compute.osAdminLogin
OS Login — vì sao nên bật Nội dung
Quản lý người dùng bằng IAM, không phải bằng khoá rải rác
Thu hồi gỡ vai trò IAM là mất quyền ngay
Kiểm toán đăng nhập được ghi trong Cloud Audit Logs
Hỗ trợ xác thực hai yếu tố
Bật ở đâu metadata enable-oslogin=TRUE — cấp project hoặc cấp instance
Dải IP cần nhớ Nội dung
35.235.240.0/20 IAP TCP forwarding
130.211.0.0/22 và 35.191.0.0/16 health check của load balancer
169.254.169.254 metadata server
199.36.153.8/30 private.googleapis.com (Private Google Access)

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có luật SSH không | gcloud compute firewall-rules list --filter="allowed.ports=22" | | VM có tag gì | gcloud compute instances describe <ten> --format="value(tags.items)" | | Vì sao không kết nối được | gcloud compute ssh <vm> --troubleshoot |

Và một lệnh rất đáng nhớ khi gặp sự cố loại này: gcloud compute ssh <vm> --troubleshoot. Nó tự kiểm tra firewall, quyền IAM, trạng thái VM, cấu hình OS Login và dải IAP rồi báo cáo chính xác mắt xích nào đang thiếu — nhanh hơn nhiều so với việc lần lượt kiểm tra từng thứ bằng tay.

Câu 15 Resource management

A manager in your company is having trouble tracking the use and cost of resources across several projects. In particular, they do not know which resources are created by the different teams they manage. What would you suggest the manager use to help better understand which resources are used by which team?

  1. A Audit logs
  2. B Labels
  3. C Trace logs
  4. D IAM policies
Xem giải thích

Đáp án

B — LABELS (nhãn).

Vì sao đúng

Label là cơ chế của Google Cloud để gắn siêu dữ liệu vào tài nguyên và chia nhỏ chi phí theo các chiều do bạn định nghĩa.

⚠ Điểm mấu chốt — label xuất hiện trong dữ liệu thanh toán:

Gắn label lên tài nguyên:
    team = data-platform
    env  = production
    cost-center = 4021
        ↓
    Label được đưa vào BILLING EXPORT
        ↓
    → xuất dữ liệu thanh toán sang BigQuery
    → truy vấn: chi phí GROUP BY label
        ↓
    → biết đội nào tốn bao nhiêu
    → đúng thứ người quản lý trong đề cần

⚠ Label ↔ Tag ↔ Network tag — ba thứ KHÁC NHAU trong GCP:

LABEL
        ↓
    Cặp khoá-giá trị, dùng cho
    TỔ CHỨC và PHÂN TÍCH CHI PHÍ
    → xuất hiện trong billing export

TAG (Resource Manager tag)
        ↓
    Dùng cho ĐIỀU KIỆN IAM và
    ORGANIZATION POLICY
    → quản lý tập trung, có phân quyền

NETWORK TAG
        ↓
    Chỉ dùng để FIREWALL RULE nhắm mục tiêu
    → không liên quan tới chi phí

⚠ Quy tắc của label:

Tối đa 64 label mỗi tài nguyên
Khoá: chữ thường, số, gạch dưới, gạch ngang
Giá trị: cũng vậy, được để rỗng
        ↓
    → KHÔNG có chữ hoa
    → khác với tag của AWS (phân biệt hoa thường)
        ↓
    Nên chốt bộ label chuẩn từ đầu:
      team, env, app, cost-center, owner

Vì sao các phương án khác sai

  • A (Audit logs) — đây là phương án gần nhất vì audit log cho biết AI đã tạo tài nguyên, nhưng nó không có thông tin chi phí và cũng không phải công cụ để phân loại chi tiêu. Muốn ra con số tiền vẫn phải tự đối chiếu thủ công.

  • C (Trace logs) — Cloud Trace theo dõi độ trễ của request, phục vụ chẩn đoán hiệu năng, không liên quan tới chi phí.

  • D (IAM policies) — quyết định AI ĐƯỢC LÀM GÌ, không phân loại tài nguyên theo đội và không đưa gì vào hoá đơn.

Ghi nhớ

⚠ Ba loại "nhãn" trong Google Cloud — bảng phải thuộc: | Loại | Dùng để | |---|---| | Label | tổ chức và PHÂN TÍCH CHI PHÍ — vào billing export | | Tag (Resource Manager) | điều kiện IAM và Organization Policy | | Network tag | firewall rule nhắm mục tiêu | | Bẫy | ba thứ hoàn toàn khác nhau, đừng lẫn |

Từ khoá nhận diện:

"chi phí theo đội / theo dự án" → label + billing export "ai đã tạo tài nguyên" → Cloud Audit Logs "điều kiện IAM theo thuộc tính tài nguyên" → tag "firewall nhắm vào nhóm máy" → network tag hoặc service account "cảnh báo khi vượt ngân sách" → Budget và alert

Phân tích chi phí trong Google Cloud Công cụ
Billing reports xem nhanh trên console, lọc theo project, dịch vụ, label
Billing export sang BigQuery chi tiết nhất — truy vấn SQL tuỳ ý
Budgets và alerts cảnh báo theo ngưỡng và theo dự báo
Cost breakdown / Recommendations gợi ý tiết kiệm
Committed use discount cam kết 1-3 năm để giảm giá
Quota trần cứng ngăn chi tiêu vượt kiểm soát
Bộ label chuẩn nên chốt từ đầu Ví dụ
team hoặc owner ai chịu trách nhiệm
env prod / staging / dev
app ứng dụng nào
cost-center mã trung tâm chi phí
data-classification mức nhạy cảm
Ép tuân thủ Organization Policy, hoặc kiểm tra trong CI/CD của hạ tầng dạng mã
Cách tách bạch chi phí — từ mềm tới cứng Nội dung
Label mềm nhất, phụ thuộc kỷ luật của mọi người
Project riêng cho mỗi đội ranh giới rõ ràng, chi phí tự tách
Billing account riêng tách bạch tuyệt đối, hoá đơn riêng
Folder theo phòng ban gom project, áp policy chung
Khuyến nghị project riêng cho mỗi đội hoặc mỗi môi trường
Lệnh làm việc với label Việc
gcloud compute instances add-labels <vm> --labels=team=data gắn label
gcloud compute instances remove-labels gỡ
gcloud projects update <id> --update-labels=... label cho project
gcloud <dichvu> list --filter="labels.team=data" lọc theo label
Hầu hết dịch vụ đều hỗ trợ label

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tài nguyên có label gì | gcloud compute instances describe <ten> --format="value(labels)" | | Chi phí theo đội | truy vấn billing export trong BigQuery, GROUP BY label | | Tài nguyên nào thiếu label | lọc --filter="-labels.team:*" |

Và một điểm cần lưu ý khi bắt đầu dùng label để chia chi phí: label chỉ áp cho chi phí phát sinh SAU khi gắn. Dữ liệu thanh toán của tháng trước sẽ không tự có label mới, nên càng gắn sớm càng tốt — và với những khoản chi phí không gắn label được, cách tách bạch tuyệt đối vẫn là mỗi đội một project riêng.

Câu 16 Chọn nhiều đáp án Resource management

An auditor is reviewing your Google Cloud use. They have asked for access to any audit logs available in GCP. What audit logs are available for each project, folder, and organization?

  1. A Admin Activity
  2. B Data Access
  3. C Policy Access
  4. D System Event
  5. E User Login
  6. F Performance Metrics
Xem giải thích

Đáp án

A, B và D — ADMIN ACTIVITY, DATA ACCESS và SYSTEM EVENT.

Vì sao đúng

Cloud Audit Logs của Google Cloud có bốn loại, và ba loại được nêu trong đáp án là những loại có ở mọi project, folder và organization.

⚠ Bốn loại audit log — bảng cần thuộc:

ADMIN ACTIVITY                      ← luôn có
        ↓
    Thao tác GHI làm THAY ĐỔI cấu hình
      hoặc siêu dữ liệu
    Ví dụ: tạo VM, sửa IAM policy
        ↓
    → LUÔN BẬT, KHÔNG TẮT ĐƯỢC, MIỄN PHÍ
    → giữ 400 ngày

DATA ACCESS                         ← luôn có
        ↓
    Thao tác ĐỌC dữ liệu, và ghi do người dùng
    Ví dụ: đọc đối tượng trong Cloud Storage
        ↓
    → PHẢI BẬT THỦ CÔNG (trừ BigQuery)
    → CÓ PHÍ, khối lượng rất lớn
    → giữ 30 ngày mặc định

SYSTEM EVENT                        ← luôn có
        ↓
    Hành động do CHÍNH GOOGLE thực hiện
    Ví dụ: live migration của VM
        ↓
    → LUÔN BẬT, MIỄN PHÍ, giữ 400 ngày

POLICY DENIED
        ↓
    Bị từ chối do vi phạm chính sách bảo mật
    (VPC Service Controls…)
        ↓
    → luôn bật, có phí

⚠ Vì sao Data Access cần chú ý nhất:

Khối lượng RẤT LỚN
        ↓
    Mỗi lượt đọc một đối tượng là một bản ghi
        ↓
    → bật cho toàn bộ dịch vụ có thể rất tốn kém
        ↓
    Nên: bật chọn lọc cho dịch vụ và
    tài nguyên NHẠY CẢM
    → cấu hình trong IAM → Audit Logs

⚠ Kiểm toán viên cần gì thì lấy ở đâu:

"Ai đã đổi quyền IAM"      → Admin Activity
"Ai đã đọc dữ liệu nhạy cảm" → Data Access (phải bật trước)
"Google đã làm gì với VM"   → System Event
"Ai bị chặn bởi chính sách" → Policy Denied

Vì sao các phương án khác sai

  • C (Policy Access) — đây là phương án gần nhất vì tên gần giống, nhưng loại log đúng tên là Policy DENIED, không phải "Policy Access".

  • E (User Login) — không phải một loại Cloud Audit Log. Việc đăng nhập được ghi ở Google Workspace audit log hoặc Cloud Identity, một hệ thống khác.

  • F (Performance Metrics) — chỉ số hiệu năng thuộc Cloud Monitoring, không phải audit log.

Ghi nhớ

⚠ Bốn loại Cloud Audit Log — bảng phải thuộc: | Loại | Ghi gì | Bật sẵn | Chi phí | |---|---|---|---| | Admin Activity | thay đổi cấu hình và siêu dữ liệu | LUÔN BẬT, không tắt được | miễn phí | | Data Access | ĐỌC dữ liệu, ghi do người dùng | phải bật (trừ BigQuery) | CÓ PHÍ | | System Event | hành động của Google | luôn bật | miễn phí | | Policy Denied | bị chặn bởi chính sách bảo mật | luôn bật | có phí | | Thời gian giữ | Admin và System 400 ngày; Data Access 30 ngày | | |

Từ khoá nhận diện:

"ai đã thay đổi cấu hình" → Admin Activity "ai đã ĐỌC dữ liệu" → Data Access — phải bật trước "Google đã tự làm gì" → System Event "bị chặn bởi VPC Service Controls" → Policy Denied "giữ log lâu hơn mặc định" → sink sang Cloud Storage hoặc BigQuery

Cloud Logging — kiến trúc cần biết Thành phần
Log bucket nơi lưu log, đặt được thời gian giữ
Log sink chuyển log sang Cloud Storage, BigQuery, Pub/Sub, hoặc bucket khác
Log-based metric biến mẫu log thành CHỈ SỐ để đặt alert
Log Analytics truy vấn log bằng SQL
Aggregated sink gom log của cả folder hoặc organization về một nơi
Loại trừ exclusion filter để giảm chi phí nạp log
Lưu trữ log dài hạn cho kiểm toán Cách
Aggregated sink ở cấp organization gom mọi project
Đích là bucket ở PROJECT RIÊNG quyền ghi rất hẹp
Bucket Lock trên Cloud Storage log BẤT BIẾN — không xoá được
Lifecycle policy chuyển sang Coldline hoặc Archive
Truy vấn BigQuery cho phân tích, Cloud Storage cho lưu trữ
Bật Data Access log cho đúng Nội dung
Cấu hình ở IAM & Admin → Audit Logs
Ba loại con ADMIN_READ, DATA_READ, DATA_WRITE
Nên bật cho Cloud Storage bucket nhạy cảm, BigQuery, Secret Manager, KMS
Loại trừ có thể loại trừ theo từng principal (ví dụ service account nội bộ ồn ào)
Cảnh báo chi phí bật toàn bộ cho mọi dịch vụ là rất tốn
So sánh với AWS — cho người quen AWS Nội dung
Admin Activity ≈ CloudTrail management event
Data Access ≈ CloudTrail data event
System Event ≈ AWS Health event
Log sink ≈ CloudTrail ghi ra S3
Log-based metric ≈ CloudWatch metric filter

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Data Access đã bật chưa | IAM → Audit Logs, xem từng dịch vụ | | Tìm một hành động cụ thể | Logs Explorer với logName chứa cloudaudit.googleapis.com | | Log có được lưu lâu dài không | gcloud logging sinks list |

Và một cấu hình rất nên dựng sớm cho mục đích kiểm toán: aggregated sink ở cấp organization đổ vào một bucket trong project log riêng, có Bucket Lock. Khi đó log của mọi project được gom về một nơi, không ai trong các project thành viên xoá được — và đó chính là điều kiện để một bản ghi kiểm toán có giá trị chứng minh.

Câu 17 Resource management

To avoid potentially violating a regulation, your company has determined that it will only use Google Cloud resources in North America. How would you ensure no resources are created outside of North America?

  1. A Create a policy at the organization level of the resource hierarchy that includes a constraint using a Resource Location Restriction.
  2. B Create an IAM policy that prevents users from creating resources outside of North America.
  3. C Create a policy at the folder level of the resource hierarchy that includes a constraint using a Resource Location Restriction.
  4. D Create a data lifecycle management policy that prevents data from being saved outside of North America.
Xem giải thích

Đáp án

A — Tạo policy ở cấp TỔ CHỨC với ràng buộc RESOURCE LOCATION RESTRICTION.

Vì sao đúng

Yêu cầu là không tài nguyên nào được tạo ngoài Bắc Mỹ, và Organization Policy là cơ chế duy nhất ép được điều đó ở mọi nơi.

⚠ Điểm mấu chốt — ràng buộc vị trí là một Organization Policy:

constraints/gcp.resourceLocations
        ↓
    Khai danh sách vị trí ĐƯỢC PHÉP
      ví dụ: in:us-locations,
             in:northamerica-locations
        ↓
    → mọi lời gọi tạo tài nguyên ở vị trí khác
      BỊ TỪ CHỐI
        ↓
    Áp ở cấp ORGANIZATION
        ↓
    → KẾ THỪA xuống mọi folder và mọi project
    → kể cả project TẠO MỚI SAU NÀY

⚠ Vì sao phải ở cấp TỔ CHỨC, không phải folder:

Áp ở cấp FOLDER (phương án C)
        ↓
    Chỉ phủ các project TRONG folder đó
        ↓
    → project nằm ngoài folder KHÔNG bị ràng buộc
    → project tạo mới ở nhánh khác cũng vậy
        ↓
Áp ở cấp ORGANIZATION
        ↓
    → phủ TOÀN BỘ, không có ngoại lệ ngoài ý muốn
    → đúng yêu cầu "không tài nguyên nào"

⚠ Vì sao IAM policy không làm được:

IAM trả lời câu hỏi "AI được làm GÌ"
        ↓
    Không có khái niệm "ở ĐÂU"
        ↓
    → không diễn đạt được ràng buộc vị trí
        ↓
Organization Policy trả lời
    "CẤU HÌNH nào được phép tồn tại"
        ↓
    → đây mới là công cụ đúng

Vì sao các phương án khác sai

  • C (tạo policy ở cấp FOLDER với cùng ràng buộc) — đây là phương án gần nhất và dùng đúng ràng buộc, chỉ sai phạm vi: folder không phủ được mọi project trong tổ chức, nên vẫn có chỗ lọt.

  • B (tạo IAM policy ngăn tạo tài nguyên ngoài Bắc Mỹ) — IAM không có điều kiện theo vị trí tài nguyên theo cách này. Đây là việc của Organization Policy.

  • D (chính sách quản lý vòng đời dữ liệu) — lifecycle policy quyết định dữ liệu được chuyển lớp lưu trữ hay xoá khi nào, hoàn toàn không kiểm soát vị trí địa lý.

Ghi nhớ

⚠ Organization Policy ↔ IAM — bảng phải thuộc: | | Organization Policy | IAM | |---|---|---| | Trả lời câu hỏi | "CẤU HÌNH nào được phép" | "AI được làm GÌ" | | Ví dụ | giới hạn vị trí, cấm IP công cộng | cấp vai trò cho người dùng | | Phạm vi | organization / folder / project | organization → tài nguyên | | Kế thừa | từ trên xuống, con có thể ghi đè nếu được phép | từ trên xuống, cộng dồn | | Tương đương AWS | ≈ SCP | ≈ IAM policy |

Từ khoá nhận diện:

"tài nguyên chỉ được ở khu vực X" → gcp.resourceLocations "cấm VM có IP công cộng" → compute.vmExternalIpAccess "cấm chia sẻ công khai" → iam.allowedPolicyMemberDomains "ai được làm gì" → IAM "phủ mọi project kể cả project mới" → áp ở cấp ORGANIZATION

Các Organization Policy constraint hay dùng Việc
gcp.resourceLocations giới hạn khu vực tạo tài nguyên
compute.vmExternalIpAccess cấm VM có IP công cộng
iam.allowedPolicyMemberDomains chỉ cho phép danh tính thuộc tên miền của công ty
iam.disableServiceAccountKeyCreation cấm tạo khoá service account
storage.uniformBucketLevelAccess ép dùng IAM thay vì ACL cho bucket
sql.restrictPublicIp cấm Cloud SQL có IP công cộng
compute.requireShieldedVm ép dùng Shielded VM
Cách khai giá trị cho resourceLocations Nội dung
in:us-locations mọi vị trí ở Hoa Kỳ
in:northamerica-locations Bắc Mỹ
in:asia-southeast1-locations một Region cụ thể
in:eu-locations châu Âu
Cách khai dùng allowed values hoặc denied values
Kế thừa con kế thừa, trừ khi được phép ghi đè
Bẫy khi áp policy vị trí Nội dung
Tài nguyên ĐÃ TỒN TẠI không bị xoá policy chỉ chặn tạo mới
Một số dịch vụ là toàn cầu IAM, Cloud DNS, Billing — không bị ràng buộc vị trí
Có thể làm đứt dịch vụ đang chạy ví dụ chặn Region mà bản sao lưu đang lưu ở đó
Nên làm áp thử ở một folder trước, rồi mở rộng lên tổ chức
Kiểm tra tài nguyên cũ Cloud Asset Inventory để quét toàn bộ
Bộ chính sách nền nên có ở mọi tổ chức Nội dung
Giới hạn vị trí tuân thủ chủ quyền dữ liệu
Cấm IP công cộng cho VM và Cloud SQL giảm bề mặt tấn công
Cấm tạo khoá service account ép dùng Workload Identity
Chỉ cho phép danh tính trong tên miền công ty chống chia sẻ ra ngoài
Ép uniform bucket-level access bỏ ACL kiểu cũ
Công cụ triển khai Terraform, hoặc Policy Intelligence để mô phỏng trước

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Policy đang áp là gì | gcloud resource-manager org-policies describe gcp.resourceLocations --organization=<id> | | Có chặn đúng không | thử tạo một VM ở Region bị cấm — phải bị từ chối | | Còn tài nguyên nào sai chỗ không | Cloud Asset Inventory, lọc theo location |

Và một việc phải làm ngay sau khi áp chính sách này: quét lại toàn bộ tài nguyên đã tồn tại bằng Cloud Asset Inventory. Organization Policy chỉ chặn việc tạo mới — mọi tài nguyên đã nằm ngoài Bắc Mỹ từ trước vẫn tiếp tục chạy và vẫn đang lưu dữ liệu ở đó, và chính chúng mới là phần vi phạm mà kiểm toán viên sẽ tìm thấy.

Câu 18 Billing

As a consultant to a new Google Cloud customer, you are asked to help set up billing accounts. What permission must an identity have in order to create a billing account?

  1. A billing.create
  2. B roles/billing.create
  3. C billing.accounts.create
  4. D roles/billing.accounts.create
Xem giải thích

Đáp án

C — billing.accounts.create

Vì sao đúng

Câu này kiểm tra sự phân biệt giữa PERMISSION và ROLE — hai khái niệm rất hay bị lẫn trong IAM của Google Cloud.

⚠ Điểm mấu chốt — permission và role đặt tên khác nhau:

PERMISSION (quyền đơn lẻ)
        ↓
    Định dạng: <dichvu>.<taiNguyen>.<hanhDong>
        ↓
    billing.accounts.create
    compute.instances.list
    storage.objects.get
        ↓
    → KHÔNG có tiền tố "roles/"

ROLE (vai trò — tập hợp permission)
        ↓
    Định dạng: roles/<dichvu>.<tenVaiTro>
        ↓
    roles/billing.creator
    roles/compute.admin
    roles/storage.objectViewer
        ↓
    → LUÔN có tiền tố "roles/"

⚠ Đề hỏi PERMISSION, nên đáp án không có roles/:

"What PERMISSION must an identity have..."
        ↓
    → cần một permission, không phải role
        ↓
    billing.accounts.create   ✓
        ↓
    Vai trò CHỨA permission này là:
      roles/billing.creator
      (Billing Account Creator)

⚠ Và vai trò này gán ở cấp TỔ CHỨC:

roles/billing.creator
        ↓
    Gán ở cấp ORGANIZATION
        ↓
    → tạo billing account mới
        ↓
    Các vai trò billing khác:
      roles/billing.admin   → quản lý billing account
      roles/billing.user    → GẮN project vào billing account
      roles/billing.viewer  → chỉ xem
        ↓
    Muốn tạo project VÀ gắn billing:
      cần cả resourcemanager.projectCreator
      và billing.user

Vì sao các phương án khác sai

  • D (roles/billing.accounts.create) — đây là phương án gần nhất và là bẫy chính: nó trộn hai định dạng. Tiền tố roles/ chỉ dùng cho vai trò, và không có vai trò nào tên như vậy.

  • A (billing.create) — thiếu phần tài nguyên: định dạng permission phải có ba phần — dịch vụ, tài nguyên, hành động.

  • B (roles/billing.create) — cũng trộn định dạng, và không có vai trò nào tên này.

Ghi nhớ

⚠ Permission ↔ Role — bảng phải thuộc: | | Permission | Role | |---|---|---| | Định dạng | <dichvu>.<taiNguyen>.<hanhDong> | roles/<dichvu>.<ten> | | Ví dụ | compute.instances.create | roles/compute.instanceAdmin | | Gán trực tiếp cho người dùng | KHÔNG | CÓ | | Quan hệ | một role chứa NHIỀU permission | | | Bẫy | roles/ đứng trước permission là luôn SAI | |

Từ khoá nhận diện:

"permission nào" → không có tiền tố roles/, có ba phần "role nào" → có tiền tố roles/ "tạo billing account" → roles/billing.creator "gắn project vào billing account" → roles/billing.user "xem chi phí" → roles/billing.viewer

Các vai trò Billing — bảng đáng thuộc Việc
roles/billing.creator TẠO billing account mới — gán ở cấp tổ chức
roles/billing.admin quản lý billing account: gắn project, xem, sửa
roles/billing.user GẮN project vào một billing account
roles/billing.viewer chỉ xem chi phí và giao dịch
roles/billing.costsManager quản lý budget và báo cáo chi phí
Kết hợp thường gặp projectCreator + billing.user để tạo project có thanh toán
Cấu trúc phân cấp tài nguyên của GCP Cấp
Organization gốc, gắn với tên miền Cloud Identity
Folder nhóm project theo phòng ban hoặc môi trường
Project ranh giới chính của tài nguyên, quyền và hạn ngạch
Resource VM, bucket, bảng…
Billing account NẰM NGOÀI phân cấp này — gắn vào project
Kế thừa IAM từ trên xuống, cộng dồn
Ba loại vai trò — nhắc lại Nội dung
Basic viewer / editor / owner — quá rộng, tránh dùng
Predefined theo dịch vụ, Google bảo trì — nên dùng
Custom tự chọn permission — bạn tự bảo trì
Tìm role phù hợp gcloud iam roles list --filter="..."
Xem role gồm gì gcloud iam roles describe roles/billing.creator
Billing account — nên biết Nội dung
Quan hệ một billing account trả cho NHIỀU project
Một project chỉ gắn vào MỘT billing account tại một thời điểm
Tách bạch chi phí dùng nhiều billing account, hoặc label + billing export
Sub-account dành cho đối tác bán lại (reseller)
Cảnh báo budget và alert đặt trên billing account hoặc project

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ai có quyền billing | gcloud beta billing accounts get-iam-policy <id> | | Vai trò gồm permission nào | gcloud iam roles describe roles/billing.creator | | Project gắn billing nào | gcloud beta billing projects describe <project> |

Và một cách rất nhanh để không bao giờ nhầm hai định dạng này: permission luôn có ba phần và không có dấu gạch chéo, còn role luôn bắt đầu bằng roles/. Bất kỳ chuỗi nào vừa có roles/ vừa trông như một permission ba phần — như roles/billing.accounts.create — đều là phương án bịa trong đề thi.

Câu 19 Computing Options

Your company has a complicated billing structure for Google Cloud projects. You would like to set up multiple configurations for use with the command line interface. What command would you use to create those?

  1. A gcloud config configurations create
  2. B gcloud configurations create
  3. C gcloud config configurations set
  4. D gcloud configurations set
Xem giải thích

Đáp án

A — gcloud config configurations create

Vì sao đúng

Câu này kiểm tra cấu trúc nhóm — nhóm con — động từ của gcloud, và tên nhóm con đúng.

⚠ Điểm mấu chốt — configurations nằm TRONG nhóm config:

gcloud  config  configurations  create
          ↑          ↑            ↑
        nhóm     nhóm con      động từ
        ↓
    → không có nhóm nào tên "configurations"
      ở cấp trên cùng
    → nên "gcloud configurations create" là SAI

⚠ Configuration là gì và giải quyết vấn đề gì:

Một configuration lưu một BỘ cài đặt:
        ↓
    project, account, region, zone
        ↓
    Nhiều configuration song song:
      gcloud config configurations create prod
      gcloud config configurations create dev
        ↓
    Chuyển qua lại:
      gcloud config configurations activate prod
        ↓
    → không phải gõ --project mỗi lệnh
    → không sợ chạy nhầm lệnh vào project sản xuất
        ↓
    Đúng nhu cầu "cấu trúc thanh toán phức tạp,
    nhiều project" của đề

⚠ Phân biệt create với activate và set:

gcloud config configurations create <ten>
        ↓
    TẠO một configuration mới

gcloud config configurations activate <ten>
        ↓
    CHUYỂN sang dùng configuration đó

gcloud config set <thuoc-tinh> <gia-tri>
        ↓
    ĐẶT một thuộc tính trong configuration
    ĐANG HOẠT ĐỘNG
        ↓
    → ba việc khác nhau, đừng lẫn

Xem thêm câu #12462 (cùng lô): cùng nguyên tắc — gcloud luôn là nhóm trước, động từ sau. Khoá nhất quán.

Vì sao các phương án khác sai

  • C (gcloud config configurations set) — đây là phương án gần nhất vì nhóm và nhóm con hoàn toàn đúng, nhưng động từ sai: configurations không có động từ set. Để tạo là create, để chuyển là activate.

  • B và D (gcloud configurations create/set) — thiếu nhóm config. Không có nhóm cấp cao nào tên configurations.

Ghi nhớ

⚠ Các lệnh về configuration — bảng phải thuộc: | Lệnh | Việc | |---|---| | gcloud config configurations create <ten> | tạo mới | | gcloud config configurations activate <ten> | chuyển sang dùng | | gcloud config configurations list | liệt kê, thấy cái nào đang IS_ACTIVE | | gcloud config configurations delete <ten> | xoá | | gcloud config set project <id> | đặt thuộc tính trong configuration hiện tại | | gcloud config list | xem cấu hình đang dùng | | --configuration=<ten> | dùng một configuration cho ĐÚNG một lệnh |

Từ khoá nhận diện:

"nhiều bộ cấu hình CLI" → gcloud config configurations "đặt project mặc định" → gcloud config set project "xem cấu hình hiện tại" → gcloud config list "gcloud configurations ..." → SAI — thiếu nhóm config "nhiều tài khoản đăng nhập" → gcloud auth list, và --account

Các thuộc tính hay đặt trong configuration Thuộc tính
project project mặc định
account tài khoản đăng nhập
compute/region, compute/zone Region và zone mặc định
run/region Region cho Cloud Run
container/cluster cụm GKE mặc định
core/disable_prompts tắt hỏi xác nhận — hữu ích trong script
Mẫu dùng configuration trong thực tế Nội dung
Một configuration cho mỗi môi trường prod, staging, dev
Một cho mỗi khách hàng với công ty tư vấn
Hiện tên trong dấu nhắc shell tránh chạy nhầm vào production
Trong CI/CD dùng --project tường minh, đừng dựa vào configuration
Kiểm tra trước lệnh nguy hiểm gcloud config get-value project
Cấu trúc lệnh gcloud — nhắc lại Nội dung
Cấu trúc gcloud <nhóm> [<nhóm con>] <động từ> [tham số]
Động từ thường gặp list, describe, create, delete, update
Trợ giúp gcloud <nhóm> --help
Tìm lệnh gcloud help <từ khoá>, hoặc gcloud alpha/beta cho tính năng mới
Định dạng đầu ra --format=json, --format="value(...)"
Lọc --filter="..."
Cờ toàn cục đáng nhớ Việc
--project=<id> ghi đè project cho một lệnh
--configuration=<ten> dùng một configuration khác
--impersonate-service-account=<email> chạy lệnh dưới danh nghĩa một service account
--format và --filter định dạng và lọc kết quả
--quiet không hỏi xác nhận — cho script
--verbosity=debug gỡ lỗi khi lệnh thất bại

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đang dùng configuration nào | gcloud config configurations list | | Project hiện tại | gcloud config get-value project | | Tài khoản hiện tại | gcloud auth list |

Và một thói quen giúp tránh một loại sự cố rất khó chịu: hiện tên configuration đang hoạt động ngay trong dấu nhắc shell. Phần lớn các lần chạy nhầm lệnh vào môi trường sản xuất bắt nguồn từ việc quên rằng phiên terminal hiện tại đang trỏ vào project nào — và một dòng chữ trong dấu nhắc giải quyết triệt để chuyện đó.

Câu 20 Chọn nhiều đáp án Computing Options

As a developer using Google Cloud, you will need to set up a local development environment. You will want to authorize the use of gcloud commands to access resources. What commands could you use to authorize access?

  1. A gcloud init
  2. B gcloud login
  3. C gcloud auth login
  4. D gcloud config login
Xem giải thích

Đáp án

A và C — gcloud init và gcloud auth login.

Vì sao đúng

Cả hai lệnh đều mở trình duyệt để đăng nhập tài khoản Google và cấp quyền cho gcloud, chỉ khác nhau ở phạm vi công việc.

⚠ Điểm mấu chốt — hai lệnh, hai mức độ:

gcloud auth login
        ↓
    CHỈ xác thực
        ↓
    Mở trình duyệt → đăng nhập →
    lưu thông tin xác thực vào máy
        ↓
    → không đụng tới project hay Region

gcloud init
        ↓
    Xác thực VÀ cấu hình trọn gói
        ↓
    Chạy một hướng dẫn từng bước:
      1. đăng nhập (gọi auth login bên dưới)
      2. chọn project
      3. chọn Region và zone mặc định
      4. tạo hoặc chọn configuration
        ↓
    → lệnh nên dùng khi thiết lập máy LẦN ĐẦU

⚠ Ba loại thông tin xác thực của gcloud:

Tài khoản người dùng
        ↓
    gcloud auth login
    → cho làm việc thủ công trên máy cá nhân

Application Default Credentials (ADC)
        ↓
    gcloud auth application-default login
    → cho THƯ VIỆN CLIENT của ứng dụng
      chạy trên máy local
        ↓
    → hai loại này TÁCH BIỆT
    → đăng nhập cái này không cấp cho cái kia

Service account
        ↓
    gcloud auth activate-service-account
      --key-file=key.json
    → cho máy chủ và CI/CD

⚠ Và một điểm rất quan trọng về ADC:

Ứng dụng Python/Java/Go dùng thư viện client
        ↓
    Chúng tìm ADC, KHÔNG dùng thông tin
    của `gcloud auth login`
        ↓
    → chạy code local mà báo lỗi xác thực
      dù đã `gcloud auth login`
        ↓
    → phải chạy thêm:
      gcloud auth application-default login

Vì sao các phương án khác sai

  • B (gcloud login) — đây là phương án gần nhất và rất dễ gõ nhầm, nhưng login không phải một nhóm ở cấp cao nhất. Đúng phải là gcloud auth login.

  • D (gcloud config login) — nhóm config dùng để đặt thuộc tính cấu hình, không có động từ login.

Ghi nhớ

⚠ Các lệnh xác thực của gcloud — bảng phải thuộc: | Lệnh | Việc | |---|---| | gcloud init | thiết lập trọn gói: đăng nhập + project + Region | | gcloud auth login | chỉ đăng nhập tài khoản người dùng | | gcloud auth application-default login | cấp ADC cho THƯ VIỆN CLIENT | | gcloud auth activate-service-account --key-file | dùng service account | | gcloud auth list | xem các tài khoản đã đăng nhập | | gcloud auth revoke | thu hồi thông tin xác thực | | gcloud auth print-access-token | in token để dùng với curl |

Từ khoá nhận diện:

"thiết lập máy lần đầu" → gcloud init "chỉ cần đăng nhập" → gcloud auth login "code local gọi API Google mà lỗi xác thực" → application-default login "CI/CD, máy chủ" → service account, hoặc Workload Identity Federation "gcloud login" → SAI — thiếu nhóm auth

Application Default Credentials — thứ tự tìm kiếm Bước
1 Biến môi trường GOOGLE_APPLICATION_CREDENTIALS
2 Thông tin từ gcloud auth application-default login
3 Metadata server — khi chạy trên GCE, GKE, Cloud Run, Cloud Functions
Hệ quả code chạy TRÊN Google Cloud tự có thông tin xác thực
Thực hành tốt không tải khoá service account về máy khi có thể tránh
Xác thực cho CI/CD — theo thứ tự khuyến nghị Cách
Workload Identity Federation KHÔNG có khoá nào cả — GitHub Actions, GitLab, AWS…
Workload Identity (GKE) pod dùng service account của Google mà không cần khoá
Metadata server khi chạy trên chính Google Cloud
Khoá service account JSON cách cuối cùng — phải xoay và bảo vệ
Chặn tạo khoá Organization Policy iam.disableServiceAccountKeyCreation
Impersonation — rất hữu ích và an toàn Nội dung
Cờ --impersonate-service-account=<email>
Việc chạy lệnh dưới danh nghĩa một service account
Quyền cần roles/iam.serviceAccountTokenCreator
Lợi ích không cần tải khoá JSON về máy
Kiểm toán audit log ghi rõ ai đã impersonate ai

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đang đăng nhập bằng tài khoản nào | gcloud auth list | | ADC đã có chưa | kiểm tra tệp trong ~/.config/gcloud/ | | Token hiện tại là của ai | gcloud auth print-access-token rồi tra tokeninfo |

Và một nguyên nhân gây bối rối rất phổ biến với người mới: gcloud auth login và gcloud auth application-default login là hai thứ tách biệt. Lệnh đầu cho phép bạn chạy lệnh gcloud, lệnh sau cho phép mã ứng dụng của bạn gọi API — nên hoàn toàn có chuyện gcloud chạy ngon lành trong khi script Python ngay bên cạnh lại báo lỗi không tìm thấy thông tin xác thực.