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

Tìm thấy 449 câu.

Câu 71 IAM
You have created a process that will run nightly. The process needs read and write access to two Cloud Storage buckets. You do not want to use your identity to ensure the process has sufficient privileges. How would you ensure the process can read and write to the Cloud Storage buckets?
  1. A Create a service account and grant it a role that provides read and write permission.
  2. B Create a service account and assign permissions directly to enable read and write access.
  3. C Create a Cloud Identity and grant it a role that provides read and write permissions.
  4. D Create a federated identity and grant it permissions directly to enable read and write access.
Xem giải thích

Đáp án

A — Tạo một SERVICE ACCOUNT và gán cho nó một VAI TRÒ có quyền đọc ghi.

Vì sao đúng

Hai điểm cần đúng: danh tính cho tiến trình tự động là service account, và quyền được cấp bằng VAI TRÒ, không phải permission rời.

⚠ Điểm mấu chốt thứ nhất — service account là danh tính của MÁY:

Tiến trình tự động chạy hằng đêm
        ↓
    Không nên dùng danh tính CÁ NHÂN
        ↓
    → người đó nghỉ việc → tiến trình chết
    → không rõ ai chịu trách nhiệm
    → quyền của cá nhân thường quá rộng
        ↓
SERVICE ACCOUNT
        ↓
    Danh tính riêng cho tiến trình
    → quyền tối thiểu, đúng việc nó cần
    → tồn tại độc lập với nhân sự
    → audit log ghi rõ service account nào đã làm gì

⚠ Điểm mấu chốt thứ hai — IAM chỉ gán được VAI TRÒ:

Google Cloud IAM
        ↓
    Bạn gán ROLE cho một MEMBER
        ↓
    KHÔNG gán permission trực tiếp được
        ↓
    → permission nằm BÊN TRONG role
        ↓
    Vai trò cho việc này:
      roles/storage.objectAdmin
        (đọc, ghi, xoá đối tượng)
      hoặc kết hợp
      roles/storage.objectViewer + objectCreator

⚠ Và cách cho tiến trình dùng service account — theo thứ tự an toàn:

1. GẮN service account vào tài nguyên chạy nó
        ↓
    VM, Cloud Run, Cloud Functions, GKE
    → thông tin xác thực lấy từ metadata server
    → KHÔNG có khoá nào để lộ

2. WORKLOAD IDENTITY (GKE)
        ↓
    Pod dùng service account Google, không cần khoá

3. WORKLOAD IDENTITY FEDERATION
        ↓
    Cho CI/CD ngoài GCP — cũng không cần khoá

4. Khoá JSON
        ↓
    → CÁCH CUỐI CÙNG, phải xoay và bảo vệ

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

  • B (tạo service account và gán PERMISSION trực tiếp) — đây là phương án gần nhất và danh tính hoàn toàn đúng, nhưng IAM của Google Cloud không gán permission trực tiếp: bạn chỉ gán role. Đây chính là điểm phân biệt giữa A và B.

  • D (tạo federated identity và gán permission trực tiếp) — sai cả hai vế: federated identity dành cho NGƯỜI DÙNG từ IdP ngoài, và vẫn không gán permission trực tiếp được.

  • C (tạo Cloud Identity và gán role) — Cloud Identity tạo danh tính NGƯỜI DÙNG, không phải danh tính cho tiến trình tự động.

Ghi nhớ

⚠ Các loại danh tính trong Google Cloud — bảng phải thuộc: | Loại | Dùng cho | |---|---| | Google Account | người dùng thật | | Service account | ứng dụng, VM, tiến trình tự động | | Google Group | gom người dùng — nên gán role cho GROUP | | Cloud Identity domain | mọi người dùng trong một tên miền | | Federated identity | người dùng từ IdP ngoài (SAML, OIDC) | | Bẫy | IAM chỉ gán ROLE, không gán permission |

Từ khoá nhận diện:

"tiến trình tự động cần quyền" → service account + role "gán permission trực tiếp" → luôn SAI trong GCP "CI/CD ngoài GCP" → Workload Identity Federation "pod GKE gọi API Google" → Workload Identity "không muốn quản khoá JSON" → gắn service account vào tài nguyên

Các vai trò Cloud Storage — nhắc lại Việc
roles/storage.objectViewer đọc đối tượng
roles/storage.objectCreator tạo đối tượng — không đọc, không xoá
roles/storage.objectAdmin đọc, ghi, xoá đối tượng — hợp cho đề này
roles/storage.admin cả bucket lẫn đối tượng
Nguyên tắc chọn vai trò hẹp nhất đủ dùng
Phân quyền hẹp hơn IAM Conditions theo tiền tố tên đối tượng
Thực hành tốt với service account Nội dung
Một service account cho MỘT ứng dụng không dùng chung
Quyền tối thiểu chỉ vai trò thật sự cần
KHÔNG dùng service account MẶC ĐỊNH nó có roles/editor — quá rộng
Không tạo khoá JSON khi tránh được dùng metadata server hoặc federation
Chặn tạo khoá Organization Policy iam.disableServiceAccountKeyCreation
Đặt tên rõ ràng nightly-image-processor@...
Impersonation — thay cho khoá JSON Nội dung
Cờ --impersonate-service-account=<email>
Quyền cần roles/iam.serviceAccountTokenCreator
Lợi ích không tải khoá về máy
Kiểm toán audit log ghi rõ ai impersonate ai
Dùng cho chạy lệnh thủ công với quyền của service account
Nếu buộc phải dùng khoá JSON Nội dung
Lưu ở đâu Secret Manager, không commit vào git
Xoay định kỳ, và ngay khi nghi bị lộ
Theo dõi Security Command Center cảnh báo khoá bị lộ
Giới hạn quyền tối thiểu tuyệt đối
Tốt hơn Workload Identity Federation — bỏ hẳn khoá

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Service account có quyền gì | gcloud projects get-iam-policy <id> lọc theo email | | Tài nguyên đang dùng SA nào | gcloud compute instances describe <ten> → serviceAccounts | | Có khoá JSON nào không | gcloud iam service-accounts keys list --iam-account=<email> |

Và một cấu hình rất nên bật ở cấp tổ chức: constraints/iam.disableServiceAccountKeyCreation. Khoá JSON của service account là nguồn rò rỉ phổ biến nhất trong các sự cố bảo mật trên cloud — chặn việc tạo chúng ngay từ đầu buộc mọi người dùng những cơ chế an toàn hơn, thay vì chỉ khuyến nghị rồi hy vọng ai cũng nhớ.

Câu 72 Chọn nhiều đáp án Storage management
You want to clone a persistent disk. What characteristics of the source and cloned disk must be the same?
  1. A Size
  2. B Zone
  3. C Region
  4. D disk type
Xem giải thích

Đáp án

B, C và D — ZONE, REGION và LOẠI ĐĨA (disk type) phải giống nhau.

Vì sao đúng

Clone (nhân bản) đĩa là thao tác tại chỗ trong cùng hạ tầng, nên vị trí và loại đĩa phải khớp; chỉ có kích thước là được phép khác.

⚠ Điểm mấu chốt — ba thứ phải khớp, một thứ được linh hoạt:

ZONE và REGION phải giống nhau
        ↓
    Clone là thao tác nội bộ trong cùng vị trí
    → không phải cơ chế sao chép liên vùng
        ↓
    Muốn sang zone hoặc Region khác
      → dùng SNAPSHOT, không dùng clone

DISK TYPE phải giống nhau
        ↓
    pd-standard, pd-balanced, pd-ssd,
    pd-extreme, hyperdisk
    → clone giữ nguyên loại
        ↓
KÍCH THƯỚC được phép LỚN HƠN
        ↓
    → đĩa clone có thể to hơn đĩa nguồn
    → nhưng KHÔNG được nhỏ hơn
        ↓
    → đây là lý do phương án A (Size) sai

⚠ Clone khác snapshot ở điểm nào:

CLONE
        ↓
    Tạo NGAY một đĩa mới dùng được liền
    → nhanh hơn nhiều so với khôi phục snapshot
    → CÙNG zone, CÙNG loại đĩa
    → dùng cho: nhân bản môi trường thử,
      tách bản để phân tích

SNAPSHOT
        ↓
    Bản sao lưu, lưu riêng
    → TOÀN CẦU — tạo đĩa ở MỌI Region
    → tăng dần (incremental), rẻ hơn để giữ lâu
    → dùng cho: sao lưu, khôi phục thảm hoạ

⚠ Và một lưu ý về tính nhất quán:

Clone một đĩa ĐANG ĐƯỢC GHI
        ↓
    → dữ liệu có thể không nhất quán
      ở mức file system
        ↓
    Nên: tạm dừng ghi, hoặc flush và freeze
         file system trước khi clone
        ↓
    Với CSDL: dùng cơ chế sao lưu của
    chính CSDL đó thì an toàn hơn

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

  • A (Size) — đây là phương án gần nhất và dễ nhầm vì trực giác "bản sao phải giống hệt", nhưng kích thước KHÔNG cần giống: đĩa clone được phép lớn hơn đĩa nguồn. Chỉ không được nhỏ hơn.

Ghi nhớ

⚠ Clone ↔ Snapshot ↔ Image — bảng phải thuộc: | | Clone | Snapshot | Image | |---|---|---|---| | Việc | tạo đĩa mới NGAY | bản sao lưu | khuôn tạo VM | | Phạm vi | CÙNG zone | TOÀN CẦU | toàn cầu | | Tốc độ | nhanh nhất | phải khôi phục | phải khởi chạy | | Lưu trữ riêng | không | có, tăng dần | có | | Dùng cho | nhân bản môi trường, phân tích | sao lưu, DR | instance template |

Từ khoá nhận diện:

"nhân bản đĩa ngay trong cùng zone" → clone "sao lưu, khôi phục ở Region khác" → snapshot "khuôn để tạo VM mới" → custom image "toàn bộ VM gồm nhiều đĩa" → machine image "đĩa clone nhỏ hơn nguồn" → KHÔNG được phép

Các loại persistent disk của GCP Nội dung
pd-standard HDD — rẻ nhất, thông lượng tuần tự tốt
pd-balanced SSD cân bằng — mặc định hợp lý
pd-ssd SSD hiệu năng cao
pd-extreme IOPS cấp phát riêng — cho CSDL nặng
Hyperdisk thế hệ mới, IOPS và thông lượng cấu hình độc lập
Local SSD gắn trực tiếp, nhanh nhất, MẤT khi VM dừng
Thay đổi được và không được với persistent disk Nội dung
Tăng dung lượng được, không cần dừng VM
Giảm dung lượng KHÔNG BAO GIỜ
Đổi loại đĩa được, qua snapshot rồi tạo đĩa mới
Đổi zone phải qua snapshot
Gắn vào nhiều VM chỉ ở chế độ CHỈ ĐỌC, hoặc multi-writer (hạn chế)
Snapshot — nhắc lại đặc điểm Nội dung
Tăng dần chỉ lưu phần thay đổi
Toàn cầu tạo đĩa ở MỌI Region
Nhất quán nên flush file system trước khi chụp
Tự động snapshot schedule (resource policy)
Chi phí theo dung lượng thực lưu
Khi nào dùng clone thay vì snapshot Tình huống
Dựng môi trường thử từ production nhanh, cùng zone
Tách một bản để điều tra sự cố không ảnh hưởng máy gốc
Nhân bản nhanh nhiều VM giống nhau trong cùng zone
Không dùng clone khi cần bản sao ở Region khác hoặc giữ lâu dài

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đĩa thuộc loại nào | gcloud compute disks describe <ten> --zone=<zone> | | Clone bằng lệnh gì | gcloud compute disks create <moi> --source-disk=<cu> --zone=<zone> | | Đĩa có đang gắn vào VM nào | cùng lệnh describe, xem users |

Và một điều cần lưu ý về tính nhất quán khi clone một đĩa đang được ghi: clone không đóng băng dữ liệu ở mức ứng dụng. Với một cơ sở dữ liệu đang chạy, bản clone có thể ở trạng thái giống như máy vừa bị mất điện — nên nếu dữ liệu quan trọng, hãy dùng cơ chế sao lưu của chính CSDL đó, hoặc ít nhất là flush và tạm khoá file system trước khi thực hiện.

Câu 73 Billing
As a consultant to a new GCP 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 roles/billing.accounts.create
  4. D billing.accounts.create
Xem giải thích

Đáp án

D — billing.accounts.create

Vì sao đúng

Câu này kiểm tra sự phân biệt giữa PERMISSION và ROLE.

⚠ Điểm mấu chốt — hai định dạng khác nhau:

PERMISSION (quyền đơn lẻ)
        ↓
    <dichvu>.<taiNguyen>.<hanhDong>
        ↓
    billing.accounts.create
    compute.instances.list
        ↓
    → KHÔNG có tiền tố "roles/"

ROLE (tập hợp permission)
        ↓
    roles/<dichvu>.<tenVaiTro>
        ↓
    roles/billing.creator
    roles/compute.admin
        ↓
    → LUÔN có tiền tố "roles/"

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

"What PERMISSION must an identity have..."
        ↓
    billing.accounts.create   ✓
        ↓
    Vai trò CHỨA permission này:
      roles/billing.creator
      (Billing Account Creator)
      → gán ở cấp TỔ CHỨC

Xem thêm câu #12479 (lô 131): cùng một câu hỏi, cùng đáp án. Chỉ khác chữ cái — ở đó là C, ở đây là D. Khoá nhất quán.

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

  • C (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ò.

  • A (billing.create) — thiếu phần tài nguyên: permission phải có ba phần.

  • 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 member | 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" → ba phần, không có roles/ "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 — gán ở cấp tổ chức
roles/billing.admin quản lý billing account
roles/billing.user GẮN project vào billing account
roles/billing.viewer chỉ xem chi phí
roles/billing.costsManager quản budget và báo cáo
Kết hợp thường gặp projectCreator + billing.user
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
Vị trí NẰM NGOÀI phân cấp organization/folder/project
Tách bạch chi phí nhiều billing account, hoặc label + billing export
Cảnh báo budget và alert
Ba loại vai trò — nhắc lại Nội dung
Basic viewer / editor / owner — quá rộ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ì
Xem role gồm gì gcloud iam roles describe roles/billing.creator
Tìm role gcloud iam roles list --filter="..."
Bật quyền xem chi phí cho IAM Nội dung
Bước bắt buộc Billing preferences → Activate IAM Access
Thiếu bước này kể cả người có AdministratorAccess cũng không vào được
Chính sách billing.*, ce.* cho Cost Explorer
Thực hành tốt role chỉ đọc chi phí cho đội tài chính

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: 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ư permission ba phần đều là phương án bịa trong đề thi.

Câu 74 Computing Options
A startup has an app that allows users to upload images to Cloud Storage. The images should be analyzed as soon as possible once they are loaded. Processing takes approximately 1 second for each image. There are periods when no images are uploaded and other times when many images are upload in short periods of time. What compute option would you use to process images?
  1. A Kubernetes Engine
  2. B Compute Engine
  3. C App Engine Flexible
  4. D Cloud Functions
Xem giải thích

Đáp án

D — Cloud Functions.

Vì sao đúng

Đề mô tả đúng mô hình của Cloud Functions: phản ứng với một sự kiện, xử lý rất ngắn, tải lúc có lúc không.

⚠ Điểm mấu chốt — kích hoạt trực tiếp từ sự kiện Cloud Storage:

Người dùng tải ảnh lên Cloud Storage
        ↓
    Sự kiện object finalized
        ↓
    Cloud Function được gọi NGAY
        ↓
    Xử lý ~1 giây rồi kết thúc
        ↓
    → "phân tích ngay khi ảnh được tải lên"

⚠ Mô hình chi phí khớp với tải trong đề:

Không có ảnh nào
    → 0 instance, KHÔNG tốn tiền
        ↓
Rất nhiều ảnh cùng lúc
    → tự chạy nhiều instance song song
        ↓
    Trả tiền theo: số lần gọi × thời gian chạy

Xem thêm câu #12486 (lô 131): cùng một câu hỏi, cùng đáp án Cloud Functions. Chỉ khác chữ cái — ở đó là C, ở đây là D. Khoá nhất quán.

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

  • C (App Engine Flexible) — đây là phương án gần nhất về mức độ "được quản lý", nhưng nó KHÔNG co về 0: luôn có ít nhất một instance chạy, nên tốn tiền trong những khoảng không có ảnh nào.

  • A (Kubernetes Engine) — rất nhiều công quản lý, và cụm chạy liên tục.

  • B (Compute Engine) — tự quản máy hoàn toàn, và máy chạy 24/7.

Ghi nhớ

⚠ Chọn dịch vụ theo mô hình kích hoạt — bảng phải thuộc: | Mô hình | Dịch vụ | |---|---| | Phản ứng với SỰ KIỆN, xử lý ngắn | Cloud Functions | | Container, HTTP hoặc sự kiện, co về 0 | Cloud Run | | Ứng dụng web nhiều route | App Engine | | Microservice phức tạp | GKE | | Cần kiểm soát hệ điều hành | Compute Engine |

Từ khoá nhận diện:

"khi có tệp mới trong Cloud Storage" → Cloud Functions "API chạy liên tục" → App Engine hoặc Cloud Run "đã có container" → Cloud Run "tải lúc có lúc không, rẻ nhất" → dịch vụ co về 0 "App Engine Flexible" → KHÔNG co về 0

Các nguồn sự kiện của Cloud Functions Nguồn
Cloud Storage finalized, deleted, archived, metadataUpdated
Pub/Sub message mới
HTTP gọi trực tiếp
Firestore tài liệu thay đổi
Cloud Scheduler theo lịch (qua Pub/Sub)
Eventarc hơn 90 nguồn sự kiện của GCP
Giới hạn của Cloud Functions Nội dung
Thời gian chạy tối đa 9 phút (gen 1), 60 phút (gen 2, HTTP)
Bộ nhớ tới 32 GB (gen 2)
Cold start có — giảm bằng min-instances
max-instances trần chi phí và trần tải xuống hạ tầng phía sau
Đồng thời gen 2 xử lý nhiều request trên một instance
Gen 2 chạy trên nền Cloud Run
Thiết kế hàm xử lý sự kiện Nội dung
Idempotent sự kiện có thể được gửi HƠN MỘT LẦN
Thời gian chạy ngắn việc dài → Cloud Run job hoặc Dataflow
max-instances tránh làm sập CSDL phía sau
Dead letter topic với trigger Pub/Sub
Service account riêng quyền tối thiểu

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Hàm có được gọi không | Cloud Logging, lọc theo tên hàm | | Xử lý mất bao lâu | chỉ số execution time | | Có lỗi không | chỉ số error rate, và log của hàm |

Và một tính chất phải tính tới ngay khi viết hàm loại này: sự kiện có thể được gửi hơn một lần. Cloud Storage đảm bảo giao ít nhất một lần, nên hãy làm cho thao tác ghi kết quả idempotent — chẳng hạn đặt tên tệp kết quả theo tên tệp gốc — để một ảnh xử lý hai lần không tạo ra hai bản ghi khác nhau.

Câu 75 Load balancing
You want to load balance an application that receives traffic from other resources in the same VPC. All traffic is TCP with IPv4 addresses. What load balancer would you recommend?
  1. A TCP Proxy Load Balancing
  2. B SSL Proxy Load Balancing
  3. C Network TCP/UDP Load Balancing
  4. D Internal TCP/UDP Load Balancing
Xem giải thích

Đáp án

D — INTERNAL TCP/UDP Load Balancing.

Vì sao đúng

Ba từ khoá trong đề: lưu lượng từ tài nguyên TRONG CÙNG VPC, TCP, IPv4.

⚠ Điểm mấu chốt — "internal" vì nguồn nằm trong VPC:

Lưu lượng đến từ tài nguyên TRONG CÙNG VPC
        ↓
    → không đến từ internet
        ↓
    → cần load balancer NỘI BỘ (internal)
        ↓
    Load balancer NGOẠI (external)
      có IP công cộng → sai mô hình,
      và lưu lượng phải đi vòng ra ngoài

⚠ Và "TCP/UDP" vì đây là tầng 4:

Đề nói "tất cả lưu lượng là TCP"
        ↓
    → không nói gì về HTTP
        ↓
    → dùng load balancer TẦNG 4
        ↓
Internal TCP/UDP Load Balancing
        ↓
    - Passthrough: GIỮ NGUYÊN IP nguồn
    - Không kết thúc kết nối
    - Độ trễ rất thấp
    - Theo REGION

⚠ Kiến trúc điển hình dùng nó:

Tầng web (nhiều VM)
        ↓
    gọi tới tầng ứng dụng nội bộ
        ↓
Internal TCP/UDP LB (IP riêng cố định)
        ↓
    Phân phối tới nhóm VM tầng ứng dụng
        ↓
    → tầng web chỉ cần biết MỘT địa chỉ IP riêng
    → thêm bớt VM phía sau không ảnh hưởng gì

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

  • C (Network TCP/UDP Load Balancing) — đây là phương án gần nhất và cùng tầng 4, cùng passthrough, nhưng đây là load balancer NGOẠI: nó có IP công cộng và phục vụ lưu lượng từ internet. Đề nói rõ nguồn nằm trong cùng VPC.

  • A (TCP Proxy Load Balancing) — là load balancer NGOẠI, toàn cầu, và kết thúc kết nối TCP (proxy) nên không giữ IP nguồn.

  • B (SSL Proxy Load Balancing) — cũng là ngoại và toàn cầu, dành cho lưu lượng TLS không phải HTTP. Đề không nhắc tới TLS.

Ghi nhớ

⚠ Các load balancer của Google Cloud — bảng phải thuộc: | Loại | Tầng | Trong/Ngoài | Đặc điểm | |---|---|---|---| | Global external HTTP(S) | 7 | ngoài | URL map, anycast, CDN, Cloud Armor | | Internal HTTP(S) | 7 | trong | URL map, trong VPC | | External passthrough Network | 4 | ngoài | giữ IP nguồn, theo Region | | Internal passthrough (TCP/UDP) | 4 | trong | giữ IP nguồn, IP riêng, theo Region | | TCP Proxy / SSL Proxy | 4 | ngoài | toàn cầu, kết thúc kết nối |

Từ khoá nhận diện:

"lưu lượng từ trong VPC, TCP" → Internal TCP/UDP LB "lưu lượng từ trong VPC, HTTP có định tuyến URL" → Internal HTTP(S) LB "từ internet, web" → Global external HTTP(S) LB "từ internet, TCP/UDP, giữ IP nguồn" → External passthrough Network LB "TLS không phải HTTP, toàn cầu" → SSL Proxy LB

⚠ Passthrough ↔ Proxy — khác biệt quan trọng: | | Passthrough | Proxy | |---|---|---| | Kết nối | giữ nguyên, không kết thúc | kết thúc rồi mở kết nối mới | | IP nguồn | GIỮ NGUYÊN của client | thay bằng IP của LB | | Độ trễ | thấp hơn | cao hơn một chút | | Tính năng | ít | nhiều: TLS, header, định tuyến | | Ví dụ | Network LB, Internal TCP/UDP LB | HTTP(S) LB, TCP/SSL Proxy |

Internal TCP/UDP LB — chi tiết Nội dung
Phạm vi theo REGION
Địa chỉ IP RIÊNG trong subnet
Backend instance group hoặc zonal NEG
Health check bắt buộc — dải 130.211.0.0/22, 35.191.0.0/16
Global access bật để client ở Region khác cũng gọi được
Giao thức TCP, UDP, và cả L3_DEFAULT (mọi giao thức IP)
Chọn load balancer theo hai câu hỏi Câu hỏi
1. Lưu lượng từ đâu? internet → external; trong VPC → internal
2. Có cần đọc HTTP không? có → tầng 7; không → tầng 4
Bổ sung cần IP nguồn thật → passthrough
Bổ sung cần toàn cầu → HTTP(S) LB hoặc TCP/SSL Proxy
Bổ sung cần CDN, WAF → Global external HTTP(S) LB
Kiến trúc nhiều tầng điển hình trên GCP Tầng
Người dùng internet Global external HTTP(S) LB + Cloud Armor + Cloud CDN
Tầng web MIG ở nhiều zone
Giữa web và app Internal HTTP(S) LB hoặc Internal TCP/UDP LB
Tầng ứng dụng MIG
Tầng dữ liệu Cloud SQL với IP riêng

Ba việc kiểm chứng: | Việc | Cách | |---|---| | LB thuộc loại nào | gcloud compute forwarding-rules describe <ten> → loadBalancingScheme | | Backend có khoẻ không | gcloud compute backend-services get-health <ten> --region=<region> | | Firewall đã mở dải health check chưa | gcloud compute firewall-rules list --filter="sourceRanges:130.211.0.0/22" |

Và một cấu hình rất đáng bật khi kiến trúc trải nhiều Region: global access cho Internal TCP/UDP Load Balancer. Mặc định chỉ client trong cùng Region gọi được; bật tuỳ chọn này cho phép client ở Region khác trong cùng VPC cũng truy cập được — thứ rất hay cần khi hệ thống mở rộng mà không ai muốn dựng thêm một load balancer nữa.

Câu 76 Storage management
A photographer wants to share images they have stored in a Cloud Storage bucket called free-photos-on-gcp. What command would you use to allow all users to read these files?
  1. A gsutil ch allUsers:Viewer gs://free-photos-on-gcp
  2. B gsutil iam ch allUsers:objectViewer gs://free-photos-on-gcp
  3. C gcloud iam ch allUsers:Viewer gs://free-photos-on-gcp
  4. D gcloud ch allUsers:objectViewer gs://free-photos-on-gcp
Xem giải thích

Đáp án

B — gsutil iam ch allUsers:objectViewer gs://free-photos-on-gcp

Vì sao đúng

Ba điều cần đúng: công cụ là gsutil, nhóm con là iam ch, và vai trò là objectViewer.

⚠ Điểm mấu chốt — cú pháp gsutil iam ch:

gsutil iam ch <MEMBER>:<ROLE> gs://<bucket>
        ↓
    iam ch  → "change IAM policy"
        ↓
    allUsers → mọi người trên internet,
               kể cả không đăng nhập
        ↓
    objectViewer → ĐỌC ĐỐI TƯỢNG
        ↓
    → đúng nhu cầu "cho mọi người đọc ảnh"

⚠ Vì sao là objectViewer chứ không phải Viewer:

roles/storage.objectViewer
        ↓
    ĐỌC nội dung ĐỐI TƯỢNG trong bucket
        ↓
    → đây là thứ cần để xem ảnh

Không có vai trò nào tên đơn giản là "Viewer"
trong ngữ cảnh này
        ↓
    (roles/viewer là BASIC ROLE cấp project,
     hoàn toàn khác và quá rộng)

⚠ Nhưng phải nói rõ về rủi ro của allUsers:

allUsers = CÔNG KHAI HOÀN TOÀN
        ↓
    Bất kỳ ai có URL đều đọc được
    Không cần đăng nhập
        ↓
    Cần cân nhắc:
      - Public Access Prevention có đang bật không
        (Organization Policy có thể CHẶN việc này)
      - chi phí dữ liệu ra nếu bị tải nhiều
      - đặt Cloud CDN trước để giảm chi phí
        ↓
    Chia sẻ CÓ KIỂM SOÁT hơn:
      - signed URL (hết hạn theo thời gian)
      - allAuthenticatedUsers (phải đăng nhập Google)

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

  • A (gsutil ch allUsers:Viewer ...) — đây là phương án gần nhất và dùng đúng công cụ, nhưng thiếu nhóm con iam: cú pháp đúng là gsutil iam ch. (gsutil acl ch là lệnh khác, thao tác trên ACL kiểu cũ.)

  • C (gcloud iam ch ...) — sai công cụ: gcloud iam quản lý vai trò và service account, không thao tác trên bucket. Với gcloud thì lệnh đúng là gcloud storage buckets add-iam-policy-binding.

  • D (gcloud ch ...) — không có cấu trúc lệnh nào như vậy.

Ghi nhớ

⚠ Ba cách cấp quyền công khai cho bucket — bảng phải thuộc: | Công cụ | Lệnh | |---|---| | gsutil (cũ) | gsutil iam ch allUsers:objectViewer gs://<bucket> | | gcloud storage (mới) | gcloud storage buckets add-iam-policy-binding gs://<bucket> --member=allUsers --role=roles/storage.objectViewer | | Console | Permissions → Grant access | | Gỡ quyền | gsutil iam ch -d allUsers:objectViewer gs://<bucket> |

Từ khoá nhận diện:

"cho mọi người đọc" → allUsers + objectViewer "chỉ người đã đăng nhập Google" → allAuthenticatedUsers "chia sẻ tạm thời, có hạn" → signed URL "chia sẻ cho cả tổ chức" → domain:congty.com "gsutil acl ch" → ACL kiểu CŨ — nên dùng IAM

Các loại member trong IAM binding Nội dung
allUsers BẤT KỲ AI trên internet — công khai hoàn toàn
allAuthenticatedUsers bất kỳ ai có tài khoản Google đã đăng nhập
user:email@example.com một người cụ thể
group:nhom@congty.com một Google Group
serviceAccount:... một service account
domain:congty.com mọi người trong tên miền
Vì sao allUsers cần cân nhắc kỹ Rủi ro
Ai cũng đọc được không kiểm soát được ai tải
Chi phí dữ liệu ra bị tải nhiều là hoá đơn tăng
Public Access Prevention Organization Policy có thể CHẶN thẳng
Giảm chi phí đặt Cloud CDN trước bucket
Thay thế signed URL cho chia sẻ có kiểm soát
Public Access Prevention — nên biết Nội dung
Việc chặn mọi cấu hình khiến bucket thành công khai
Đặt ở đâu trên bucket, hoặc ép bằng Organization Policy
Constraint storage.publicAccessPrevention
Khi bật allUsers và allAuthenticatedUsers bị từ chối
Thực hành tốt bật mặc định, chỉ tắt cho bucket thật sự cần công khai
Chia sẻ có kiểm soát — các lựa chọn Cách
Signed URL hết hạn theo thời gian, không cần cấp quyền
Signed policy document cho form tải LÊN từ trình duyệt
allAuthenticatedUsers phải đăng nhập Google
domain: giới hạn trong tổ chức
Cloud CDN + signed cookie phân phối toàn cầu có kiểm soát

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bucket có công khai không | gsutil iam get gs://<bucket> — tìm allUsers | | Đọc thử không cần đăng nhập | mở URL công khai trong cửa sổ ẩn danh | | Có bị chặn bởi policy không | gcloud storage buckets describe → publicAccessPrevention |

Và một điều nên kiểm tra trước khi chạy lệnh này trong môi trường doanh nghiệp: Organization Policy có đang bật Public Access Prevention hay không. Nhiều tổ chức bật nó ở cấp tổ chức để tránh rò rỉ dữ liệu, và khi đó lệnh sẽ bị từ chối — một hành vi đúng đắn, và câu trả lời không phải là gỡ chính sách mà là dùng signed URL hoặc Cloud CDN cho nhu cầu chia sẻ.

Câu 77 Data pipelines
A startup is implementing an IoT application that will ingest data at high speeds. The architect for the startup has decided that data should be ingested in a queue that can store the data until the processing application is able to process it. The architect also wants to use a managed service in Google Cloud. What service would you recommend?
  1. A Cloud Dataflow
  2. B Cloud Dataproc
  3. C Bigtable
  4. D Cloud Pub/Sub
Xem giải thích

Đáp án

D — Cloud Pub/Sub.

Vì sao đúng

Đề mô tả chính xác vai trò của một hàng đợi tin nhắn: nhận dữ liệu tốc độ cao, lưu tạm cho tới khi bên xử lý sẵn sàng, và là dịch vụ được quản lý.

⚠ Điểm mấu chốt — Pub/Sub là bộ đệm giữa hai tốc độ khác nhau:

Thiết bị IoT gửi dữ liệu RẤT NHANH
        ↓
    Ứng dụng xử lý chỉ tiêu thụ được
    ở tốc độ nhất định
        ↓
    Không có bộ đệm
        ↓
    → mất dữ liệu khi có đợt tăng đột biến
        ↓
PUB/SUB
        ↓
    Nhận và LƯU TRỮ tin nhắn
    → mặc định giữ tới 7 NGÀY
        ↓
    Bên xử lý tiêu thụ theo tốc độ của mình
        ↓
    → tách rời hoàn toàn nhà sản xuất
      và người tiêu thụ

⚠ Và nó co giãn tự động, không cần cấu hình:

Pub/Sub
        ↓
    KHÔNG có shard, không có partition
    KHÔNG cần cấp phát năng lực
        ↓
    → tự co giãn tới hàng triệu message mỗi giây
    → đúng nghĩa "dịch vụ được quản lý"
        ↓
    (Khác Kafka hay Kinesis, nơi bạn phải
     tính số partition hoặc shard)

⚠ Kiến trúc IoT điển hình trên GCP:

Thiết bị
    ↓
PUB/SUB          ← nhận và đệm      ← đề này
    ↓
DATAFLOW         ← xử lý luồng
    ↓
BIGTABLE         ← dữ liệu nóng, độ trễ thấp
    +
BIGQUERY         ← dữ liệu lịch sử, phân tích
    ↓
LOOKER           ← báo cáo

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

  • A (Cloud Dataflow) — đây là phương án gần nhất vì nó thường đứng ngay sau Pub/Sub trong kiến trúc luồng, nhưng Dataflow là công cụ XỬ LÝ, không phải hàng đợi lưu trữ tạm. Đề nói rõ cần "một hàng đợi có thể lưu dữ liệu".

  • C (Bigtable) — CSDL để lưu dữ liệu lâu dài, không phải hàng đợi tách rời nhà sản xuất và người tiêu thụ.

  • B (Cloud Dataproc) — nền tảng Hadoop/Spark, không phải hàng đợi.

Ghi nhớ

⚠ Pub/Sub — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Mô hình | publish/subscribe — nhiều người đăng ký cùng một topic | | Co giãn | tự động, không cấu hình shard | | Giữ tin nhắn | mặc định 7 ngày (cấu hình 10 phút – 31 ngày) | | Đảm bảo giao | ít nhất một lần — hoặc đúng một lần với exactly-once | | Thứ tự | không đảm bảo mặc định — bật ordering key nếu cần | | Hai kiểu nhận | pull và push | | Dead letter topic | tin nhắn xử lý hỏng nhiều lần được chuyển sang đây |

Từ khoá nhận diện:

"hàng đợi, đệm dữ liệu, tách rời" → Pub/Sub "xử lý luồng" → Dataflow "lưu dữ liệu IoT, độ trễ thấp" → Bigtable "phân tích lịch sử" → BigQuery "cần thứ tự tin nhắn" → ordering key

Pub/Sub ↔ Pub/Sub Lite Khác nhau
Pub/Sub tự co giãn hoàn toàn, không cấu hình năng lực
Pub/Sub Lite phải cấp phát năng lực — rẻ hơn ở khối lượng lớn ổn định
Phạm vi Pub/Sub toàn cầu; Lite theo zone hoặc Region
Chọn Pub/Sub khi mặc định, tải biến động
Chọn Lite khi khối lượng rất lớn, ổn định, muốn tối ưu chi phí
Push ↔ Pull subscription Nội dung
Pull người tiêu thụ chủ động lấy — kiểm soát tốc độ tốt hơn
Push Pub/Sub gửi tới một endpoint HTTPS
Push phù hợp Cloud Run, Cloud Functions
Pull phù hợp worker chạy liên tục, cần kiểm soát luồng
StreamingPull pull hiệu năng cao, kết nối duy trì
Thiết kế người tiêu thụ cho đúng Nội dung
Idempotent tin nhắn có thể tới HƠN MỘT LẦN
Ack deadline gia hạn nếu xử lý lâu — mặc định 10 giây
Dead letter topic bắt buộc nên có cho tin nhắn hỏng
Retry policy backoff luỹ thừa
Theo dõi num_undelivered_messages, oldest_unacked_message_age
Các chỉ số Pub/Sub nên đặt alert Chỉ số
num_undelivered_messages tồn đọng — người tiêu thụ không theo kịp
oldest_unacked_message_age tin nhắn cũ nhất chưa xử lý — dấu hiệu tắc nghẽn
send_request_count thông lượng vào
dead_letter_message_count số tin nhắn hỏng
Dùng cho co giãn worker theo độ sâu hàng đợi

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có tồn đọng không | num_undelivered_messages trong Cloud Monitoring | | Subscription cấu hình ra sao | gcloud pubsub subscriptions describe <ten> | | Tin nhắn có tới không | gcloud pubsub subscriptions pull <ten> --auto-ack |

Và một chỉ số nên đặt cảnh báo ngay từ ngày đầu: oldest_unacked_message_age. Nó cho biết tin nhắn cũ nhất chưa được xử lý đã nằm trong hàng đợi bao lâu — dấu hiệu sớm và rõ ràng nhất cho việc người tiêu thụ đang không theo kịp, thường xuất hiện trước khi bất kỳ ai nhận ra dữ liệu đang bị chậm trễ.

Câu 78 Chọn nhiều đáp án Resource management
An auditor is reviewing your GCP 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 User Login
  3. C System Event
  4. D Policy Access
  5. E Data Access
  6. F Performance Metrics
Xem giải thích

Đáp án

A, C và E — ADMIN ACTIVITY, SYSTEM EVENT và DATA ACCESS.

Vì sao đúng

Cloud Audit Logs có bốn loại, và ba loại này 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
    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í dụ: đọc đối tượng 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
    → luôn bật, có phí

⚠ 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

Xem thêm câu #12477 (lô 131): cùng một câu hỏi, cùng ba loại log. Chỉ khác chữ cái — ở đó là A, B và D, ở đây là A, C và E. Khoá nhất quán.

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

  • D (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.

  • B (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.

  • 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 | LUÔN BẬT, không tắt được | miễn phí | | Data Access | ĐỌC dữ liệu | 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 | 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" → sink sang Cloud Storage hoặc BigQuery

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 bucket nhạy cảm, BigQuery, Secret Manager, KMS
Loại trừ theo từng principal (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
Cloud Logging — kiến trúc Thành phần
Log bucket nơi lưu, đặt được thời gian giữ
Log sink chuyển sang Cloud Storage, BigQuery, Pub/Sub
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ả tổ chức về một nơi
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 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
So sánh với AWS Nội dung
Admin Activity ≈ CloudTrail management event
Data Access ≈ CloudTrail data 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 | | Tìm một hành động | Logs Explorer, logName chứa cloudaudit.googleapis.com | | Log 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 gom về một nơi, không ai trong các project thành viên xoá được — điều kiện để một bản ghi kiểm toán có giá trị chứng minh.

Câu 79 Networking

You are setting up a service in Kubernetes Engine. You would like to have all internal clients send requests to a stable internal IP address. What type of service would you create?

  1. A Headless
  2. B NodePort
  3. C LoadBalancer
  4. D ClusterIP
Xem giải thích

Đáp án

D — CLUSTERIP.

Vì sao đúng

Đề nói rõ hai điều: client NỘI BỘ trong cụm, và một địa chỉ IP nội bộ ỔN ĐỊNH.

⚠ Điểm mấu chốt — ClusterIP là kiểu service mặc định:

ClusterIP
        ↓
    Cấp một IP ẢO ỔN ĐỊNH trong cụm
        ↓
    → chỉ truy cập được TỪ BÊN TRONG cụm
    → không lộ ra ngoài
        ↓
    Pod phía sau bị thay, IP pod đổi
        ↓
    → IP của service KHÔNG ĐỔI
    → client nội bộ luôn gọi vào một địa chỉ
        ↓
    Và có DNS nội bộ:
      <ten-service>.<namespace>.svc.cluster.local

⚠ Bốn kiểu service của Kubernetes:

ClusterIP     ← mặc định
        ↓
    IP nội bộ ổn định, chỉ trong cụm

NodePort
        ↓
    Mở một cổng (30000-32767) trên MỌI node
    → truy cập được từ ngoài qua <node-ip>:<port>

LoadBalancer
        ↓
    Tạo một load balancer của nhà cung cấp cloud
    → có IP ngoài (hoặc IP nội bộ nếu khai annotation)

ExternalName
        ↓
    Ánh xạ tên service tới một tên miền BÊN NGOÀI
    → chỉ là bản ghi CNAME, không có proxy

⚠ Và headless service là một biến thể riêng:

Headless service (clusterIP: None)
        ↓
    KHÔNG cấp IP ảo nào
        ↓
    DNS trả về TRỰC TIẾP IP của TỪNG POD
        ↓
    → dùng cho StatefulSet, CSDL phân tán
      nơi client cần biết từng thành viên
    → KHÔNG cho "một IP ổn định" như đề yêu cầu

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

  • A (Headless) — đây là phương án gần nhất và cũng là service nội bộ, nhưng nó cố ý KHÔNG cấp IP ổn định: DNS trả về IP của từng pod. Trái thẳng yêu cầu "một địa chỉ IP nội bộ ổn định".

  • B (NodePort) — mở cổng trên mọi node để truy cập TỪ NGOÀI, không phải cách chuẩn cho giao tiếp nội bộ.

  • C (LoadBalancer) — tạo một load balancer của cloud, mặc định có IP ngoài. Thừa và tốn kém cho giao tiếp trong cụm. (Có thể khai annotation để thành internal LB, nhưng vẫn phức tạp hơn ClusterIP.)

Ghi nhớ

⚠ Bốn kiểu Service của Kubernetes — bảng phải thuộc: | Kiểu | Truy cập từ | Đặc điểm | |---|---|---| | ClusterIP | CHỈ trong cụm | mặc định — IP ảo ổn định | | NodePort | ngoài, qua <node-ip>:<port> | cổng 30000-32767 | | LoadBalancer | ngoài, qua LB của cloud | tự tạo Google Cloud LB | | ExternalName | — | CNAME tới tên miền ngoài | | Headless (clusterIP: None) | trong cụm | DNS trả IP TỪNG POD |

Từ khoá nhận diện:

"client nội bộ, IP ổn định" → ClusterIP "lộ ra internet" → LoadBalancer, hoặc Ingress "StatefulSet, cần biết từng pod" → headless service "định tuyến theo đường dẫn HTTP" → Ingress (dùng Global HTTP(S) LB) "nội bộ nhưng cần load balancer thật" → internal LoadBalancer qua annotation

Service ↔ Ingress ↔ Gateway API Nội dung
Service tầng 4 — ClusterIP, NodePort, LoadBalancer
Ingress tầng 7 — định tuyến HTTP theo host và path
Gateway API kế thừa Ingress, linh hoạt hơn, chuẩn mới
Trên GKE Ingress tạo ra Google Cloud HTTP(S) Load Balancer
Khuyến nghị Gateway API cho triển khai mới
DNS nội bộ của Kubernetes Nội dung
Dạng đầy đủ <service>.<namespace>.svc.cluster.local
Trong cùng namespace chỉ cần <service>
Khác namespace <service>.<namespace>
Headless service trả về IP của từng pod
Trên GKE kube-dns hoặc Cloud DNS cho GKE
Cách một Service tìm pod Nội dung
Selector khớp nhãn (label) của pod
Endpoints / EndpointSlice danh sách IP pod khớp selector
Pod chết tự động bị gỡ khỏi endpoint
Readiness probe pod chưa sẵn sàng thì KHÔNG nhận lưu lượng
Không có selector phải tự tạo Endpoints — dùng cho dịch vụ ngoài cụm
Trên GKE — vài lưu ý riêng Nội dung
LoadBalancer tạo Network LB (tầng 4)
Ingress tạo Global external HTTP(S) LB
Container-native load balancing (NEG) LB gửi thẳng tới POD, bỏ qua kube-proxy
Internal LoadBalancer annotation networking.gke.io/load-balancer-type: "Internal"
Khuyến nghị bật NEG — độ trễ thấp hơn, health check chính xác hơn

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Service thuộc kiểu nào | kubectl get svc — cột TYPE và CLUSTER-IP | | Service có tìm thấy pod không | kubectl get endpoints <ten> — trống là selector sai | | Gọi thử từ trong cụm | kubectl run -it --rm test --image=busybox -- wget -O- <service> |

Và một nguyên nhân rất phổ biến khi service "không hoạt động": selector không khớp nhãn của pod. Lệnh kubectl get endpoints <ten> sẽ hiện danh sách trống — dấu hiệu rõ ràng nhất, và nhanh hơn nhiều so với việc đi kiểm tra mạng hay firewall khi vấn đề thực ra chỉ là một nhãn viết sai một ký tự.

Câu 80 Cloud Storage
Due to security concerns, you want to ensure all data written to your Cloud Storage buckets are encrypted. What do you need to do to ensure data is encrypted when stored in Cloud Storage?
  1. A Use the --encrypt flag with gsutil
  2. B Set a lifecycle policy that specifies encryption is on
  3. C Set up customer managed encryption keys and use those keys to encrypt data before saving to Cloud Storage
  4. D Nothing, this is the default behavior.
Xem giải thích

Đáp án

D — Không cần làm gì cả, đây là hành vi MẶC ĐỊNH.

Vì sao đúng

Google Cloud mã hoá mọi dữ liệu khi lưu trữ theo mặc định, ở mọi dịch vụ, không cần bật gì.

⚠ Điểm mấu chốt — mã hoá khi lưu là mặc định, không tắt được:

Cloud Storage (và mọi dịch vụ lưu trữ của GCP)
        ↓
    Dữ liệu được mã hoá TRƯỚC KHI ghi xuống đĩa
        ↓
    Thuật toán AES-256
    Khoá do Google quản lý mặc định
        ↓
    → KHÔNG có tuỳ chọn để TẮT
    → không tốn thêm chi phí
    → hoàn toàn trong suốt với ứng dụng

⚠ Ba mức kiểm soát khoá — bạn chọn mức nào:

GOOGLE-MANAGED (mặc định)
        ↓
    Google tạo, xoay và quản lý khoá
    → không cần làm gì

CMEK — Customer-Managed Encryption Keys
        ↓
    Khoá của bạn trong Cloud KMS
    → kiểm soát xoay khoá, thu hồi, ghi log dùng khoá
    → dùng khi có yêu cầu tuân thủ

CSEK — Customer-Supplied Encryption Keys
        ↓
    Bạn cung cấp khoá TRONG MỖI REQUEST
    → Google KHÔNG lưu khoá
    → mất khoá là MẤT DỮ LIỆU VĨNH VIỄN

⚠ Và mã hoá KHI TRUYỀN cũng mặc định:

Truy cập Cloud Storage
        ↓
    Qua HTTPS/TLS
        ↓
    Muốn ÉP chỉ dùng HTTPS
        ↓
    → bucket policy hoặc Organization Policy
    → thực ra Cloud Storage đã yêu cầu TLS
      cho mọi API request

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

  • C (dựng CMEK và dùng khoá đó mã hoá dữ liệu trước khi lưu) — đây là phương án gần nhất và CMEK là tính năng có thật, rất hữu ích, nhưng câu hỏi chỉ yêu cầu "bảo đảm dữ liệu được mã hoá" — điều đó đã có sẵn. CMEK là để kiểm soát khoá, không phải để bật mã hoá.

  • A (dùng cờ --encrypt với gsutil) — không có cờ này.

  • B (đặt lifecycle policy khai bật mã hoá) — lifecycle policy quyết định chuyển lớp lưu trữ hay xoá theo tuổi, hoàn toàn không liên quan tới mã hoá.

Ghi nhớ

⚠ Mã hoá trên Google Cloud — bảng phải thuộc: | Loại | Trạng thái | |---|---| | Khi lưu (at rest) | MẶC ĐỊNH, mọi dịch vụ, AES-256, không tắt được | | Khi truyền (in transit) | MẶC ĐỊNH qua TLS | | Khi đang dùng (in use) | Confidential Computing — phải chọn | | Kiểm soát khoá | Google-managed → CMEK → CSEK | | Chi phí | mặc định miễn phí; CMEK trả phí Cloud KMS |

Từ khoá nhận diện:

"bảo đảm dữ liệu được mã hoá" → đã có sẵn, mặc định "cần KIỂM SOÁT khoá, xoay khoá, ghi log dùng khoá" → CMEK "khoá không được lưu ở Google" → CSEK "mã hoá BỘ NHỚ khi đang xử lý" → Confidential VM "khoá phải nằm trong HSM" → Cloud HSM

CMEK — khi nào thật sự cần Nội dung
Yêu cầu tuân thủ phải chứng minh kiểm soát được khoá
Xoay khoá theo lịch riêng Cloud KMS tự xoay
Thu hồi truy cập tức thì vô hiệu hoá khoá → dữ liệu không đọc được
Ghi log việc dùng khoá Cloud Audit Logs cho mọi thao tác KMS
Rủi ro xoá khoá = mất dữ liệu vĩnh viễn
Chi phí phí Cloud KMS theo khoá và theo thao tác
Cloud KMS — ba mức bảo vệ khoá Nội dung
Software khoá phần mềm — rẻ nhất
Cloud HSM khoá trong module phần cứng FIPS 140-2 Level 3
Cloud EKM khoá nằm ở hệ thống BÊN NGOÀI Google
Xoay khoá tự động theo lịch
Xoá khoá có thời gian chờ 24 giờ – 120 ngày
Bảo mật Cloud Storage — nhiều lớp Lớp
Mã hoá khi lưu mặc định
Uniform bucket-level access bỏ ACL, chỉ dùng IAM
Public Access Prevention chặn công khai
VPC Service Controls vành đai chống rò rỉ dữ liệu
Object Versioning chống xoá nhầm
Bucket Lock / retention policy WORM — bất biến
Data Access audit log ghi ai đọc gì
Câu hỏi kiểu này trên đề thi Mẹo
"làm gì để bật mã hoá" thường đáp án là "không cần làm gì"
Vì sao Google mã hoá mặc định ở mọi dịch vụ
Khi nào cần hành động khi đề nói "kiểm soát khoá", "tuân thủ", "xoay khoá"
Tương tự AWS S3 cũng đã mã hoá mặc định từ đầu 2023

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bucket dùng khoá nào | gcloud storage buckets describe gs://<ten> → defaultKmsKeyName | | Đối tượng mã hoá bằng gì | gcloud storage objects describe gs://<ten>/<tep> | | Ai đã dùng khoá KMS | Cloud Audit Logs, lọc cloudkms.googleapis.com |

Và một điều đáng nhớ khi đọc đề thi: câu hỏi "cần làm gì để dữ liệu được mã hoá" trên Google Cloud thường có đáp án là "không cần làm gì". Mã hoá khi lưu là mặc định ở mọi dịch vụ, nên khi một câu hỏi vẫn đòi hành động, hãy đọc kỹ xem yêu cầu thật sự có phải là kiểm soát khoá hay không.