Ngân hàng đề — Google Cloud Associate Cloud Engineer
Tìm thấy 449 câu.
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?
-
A
kubectl autoscale deployment my-app-rc --min=2 --max=6 --cpu-percent=80
-
B
kubectl apply deployment my-app-rc --min=2 --max=6 --cpu-percent=80
- C gcloud containers autoscale rc my-app-rc --min=2 --max=6 --cpu-percent=80
- 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ưngapplydù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.
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?
- A gcloud datastore backup gs://my-datastore-backup
- B gcloud datastore export gs://my-datastore-backup --async
- C gsutil datastore export gs://my-datastore-backup --async
- 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ừbackuptrong nhómgcloud datastore. -
C (
gsutil datastore export ...) — sai công cụ:gsutilchỉ 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" →
exportra 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.
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?
-
A
gcloud artifacts repositories list
-
B
gcloud reposoitories container list
- C gcloud container metadata list
-
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ómgcloud containerdành cho GKE, và không có nhóm conmetadata. -
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.
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?
- A Add the identity of the developer to the administrator group for the VM.
- B Ensure firewall rules allow traffic to port 22 to allow SSH connections.
- C Grant the identity the roles/compute.admin role
- 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.adminhoặc quyềncompute.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ưngcompute.adminquá 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.osLoginhoặccompute.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.
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?
- A Audit logs
- B Labels
- C Trace logs
- 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.
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?
- A Admin Activity
- B Data Access
- C Policy Access
- D System Event
- E User Login
- 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.
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?
- A Create a policy at the organization level of the resource hierarchy that includes a constraint using a Resource Location Restriction.
- B Create an IAM policy that prevents users from creating resources outside of North America.
- C Create a policy at the folder level of the resource hierarchy that includes a constraint using a Resource Location Restriction.
- 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.
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?
- A billing.create
- B roles/billing.create
- C billing.accounts.create
- 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.
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?
- A gcloud config configurations create
- B gcloud configurations create
- C gcloud config configurations set
- 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:configurationskhông có động từset. Để tạo làcreate, để chuyển làactivate. -
B và D (
gcloud configurations create/set) — thiếu nhómconfig. Không có nhóm cấp cao nào tênconfigurations.
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ómconfig"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 đó.
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?
- A gcloud init
- B gcloud login
- C gcloud auth login
- 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ưngloginkhông phải một nhóm ở cấp cao nhất. Đúng phải làgcloud auth login. -
D (
gcloud config login) — nhómconfigdù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ómauth
| 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.