PSC cho Google APIs — Private Endpoint Tới Dịch Vụ Google
Tại Sao Cần Một Cách Khác Để Gọi Google APIs
Mọi workload trên GCP đều cần gọi Google APIs: đọc/ghi Cloud Storage, query BigQuery, publish Pub/Sub, lấy secret từ Secret Manager. Câu hỏi là: traffic đó đi đường nào?
Mặc định, các API này có endpoint public (storage.googleapis.com, bigquery.googleapis.com...) phân giải ra IP public. Một VM không có external IP sẽ không gọi được — trừ khi bạn bật một trong các cơ chế private. Private Google Access là cơ chế cổ điển: nó route traffic tới private.googleapis.com/restricted.googleapis.com (dải 199.36.153.x) qua mạng nội bộ Google mà không cần external IP (xem Chương 3).
PSC cho Google APIs là một mô hình mới hơn và mạnh hơn cho cùng nhu cầu, nhưng với một khác biệt bản chất: thay vì dùng dải IP cố định của Google, bạn tự chọn một internal IP trong VPC của mình làm endpoint để gọi Google APIs. Khác biệt nhỏ này mở khóa những thứ Private Google Access không làm được — đặc biệt là cho hybrid connectivity (on-prem gọi Google APIs qua một IP nội bộ định tuyến được). Hiểu vì sao khác biệt này quan trọng là mục tiêu của file.
Internal Model: Endpoint Cho Google APIs Khác Gì Endpoint Cho Service Thường
Ở file 01, endpoint trỏ tới một service attachment của một producer cụ thể. Endpoint cho Google APIs khác ở chỗ: nó không trỏ tới một service attachment đơn lẻ, mà trỏ tới một bundle of Google APIs — một "target" đặc biệt do Google định nghĩa sẵn.
Hai loại target: all-apis và vpc-sc
Khi tạo endpoint cho Google APIs, bạn chọn một trong hai bundle (About accessing Google APIs through endpoints):
all-apis: truy cập hầu hết Google APIs và service — gồm cả Cloud services, Google Maps, Google Ads. Không bao gồm các web app của Google Workspace (Gmail, Docs) và các website tương tác.vpc-sc: chỉ truy cập các Google APIs được VPC Service Controls hỗ trợ, chặn các service không được hỗ trợ. Đây là bundle khuyến nghị khi bạn cần enforce VPC Service Controls — nó đảm bảo traffic chỉ đi tới các API nằm trong phạm vi service perimeter, ngăn data exfiltration ra các API ngoài perimeter.
Mental model đúng: all-apis là endpoint "tiện dụng, phủ rộng"; vpc-sc là endpoint "an toàn cho data, hẹp có chủ đích". Lựa chọn không phải về tính năng mà về mô hình bảo mật: nếu kiến trúc của bạn dựa trên VPC Service Controls để chống exfiltration, bạn phải dùng vpc-sc để endpoint không trở thành lỗ hổng đi vòng qua perimeter.
Khác biệt bản chất với Private Google Access
Đây là phần dễ nhầm nhất. Cả hai đều cho phép gọi Google APIs mà không cần external IP, nhưng cơ chế và khả năng khác nhau:
| Chiều | Private Google Access | PSC cho Google APIs |
|---|---|---|
| IP đích | Dải cố định của Google (199.36.153.4/30, 199.36.153.8/30) | IP nội bộ do bạn tự chọn trong VPC |
| Bản chất | Một thuộc tính bật trên subnet | Một forwarding rule (endpoint) thật |
| Kiểm soát IP | Không (Google quyết định) | Có (bạn đặt IP, đặt tên DNS) |
| Hybrid (on-prem) | Phức tạp: phải route 199.36.153.x qua VPN/Interconnect và override DNS | Tự nhiên: on-prem route tới IP nội bộ của endpoint |
| Granularity | Toàn bộ Google APIs (hoặc restricted set) | Chọn bundle all-apis/vpc-sc |
Theo tài liệu, PSC endpoint khác biệt cơ bản ở chỗ dùng internal IP address do bạn cấp phát (ví dụ tên storage-vialink1.p.googleapis.com) thay vì dựa vào default DNS như storage.googleapis.com, đảm bảo "traffic từ Google Cloud resources tới các IP đó nằm trong mạng Google" (About accessing Google APIs through endpoints).
Điểm cốt lõi để reason đúng: Private Google Access là "cho phép subnet này gọi Google qua dải IP của Google". PSC cho Google APIs là "tạo một IP trong nhà tôi đại diện cho Google APIs". Cái sau cho bạn quyền kiểm soát IP và DNS — và đó chính là thứ làm cho hybrid connectivity trở nên đơn giản.
Global Internal IP: Vì Sao Endpoint Này Global Còn Endpoint Service Thì Regional
Một điểm khác biệt kỹ thuật quan trọng: endpoint cho Google APIs dùng global internal IP address, trong khi endpoint trỏ tới service attachment của producer (file 01) là regional.
Lý do nằm ở bản chất của thứ đứng phía sau:
- Service attachment của một producer gắn với một ILB regional ở một region cụ thể → endpoint phải regional và cùng region.
- Google APIs là global — chúng hiện diện ở mọi region qua front-end của Google. Vì vậy endpoint đại diện cho chúng cũng là global: một IP duy nhất, truy cập được từ mọi region trong VPC, và cả từ on-prem qua Cloud VPN/Interconnect (About accessing Google APIs through endpoints).
Hệ quả thực tế: bạn tạo một endpoint global cho Google APIs và mọi workload ở mọi region đều dùng được — không cần một endpoint per region như với service attachment thường.
Yêu cầu về IP address cho endpoint Google APIs
IP bạn chọn cho endpoint phải tuân thủ (About accessing Google APIs through endpoints):
- Là một IPv4 đơn (RFC 1918 hoặc non-RFC 1918 đều được).
- Nằm ngoài mọi subnet range và peered network.
- Không trùng với custom route
/32nào. - Nằm ngoài dải auto-mode (
10.128.0.0/9). - Nằm ngoài dải đã cấp cho private services access.
Đây là điểm khác với endpoint service thường (vốn lấy IP từ một subnet): endpoint Google APIs dùng một IP không thuộc subnet nào, hoạt động như một địa chỉ global độc lập.
DNS: p.googleapis.com và Service Directory
Cơ chế DNS tự động
Khi bạn tạo endpoint cho Google APIs với một tên (ví dụ xyz), Google Cloud tích hợp với Service Directory để tạo (About accessing Google APIs through endpoints):
- Một private DNS zone cho
p.googleapis.com. - Các DNS record cho các API thường dùng, dạng
SERVICE-ENDPOINT.p.googleapis.com(ví dụstorage-xyz.p.googleapis.com,bigquery-xyz.p.googleapis.com).
Khi workload gọi storage-xyz.p.googleapis.com, DNS phân giải về IP của endpoint, traffic đi qua PSC tới Cloud Storage. Client library của Google cần được cấu hình để dùng endpoint override này (qua api_endpoint hoặc biến môi trường tùy ngôn ngữ) — đây là điểm cần lưu ý: ứng dụng phải biết gọi tên p.googleapis.com thay vì googleapis.com mặc định.
Ràng buộc Service Directory region/namespace
Tất cả endpoint trong cùng một network phải chia sẻ cùng một Service Directory region và namespace (mặc định region là us-central1) (About accessing Google APIs through endpoints). Đây là một ràng buộc dễ bỏ sót khi vận hành nhiều endpoint.
Pattern: Hybrid — On-Prem Gọi Google APIs Qua PSC Endpoint
Đây là use case mà PSC cho Google APIs tỏa sáng và là lý do chính nó tồn tại bên cạnh Private Google Access.
Bài toán: một datacenter on-prem, kết nối GCP qua Cloud Interconnect/VPN, cần gọi Cloud Storage/BigQuery mà không đi qua internet public.
Với Private Google Access, bạn phải: route dải 199.36.153.8/32 (restricted) qua Interconnect, cấu hình Cloud Router advertise dải này về on-prem, và override DNS trên DNS server on-prem để *.googleapis.com phân giải về dải đó. Phức tạp và dễ sai ở phần DNS.
Với PSC cho Google APIs, mô hình đơn giản hơn nhiều: bạn tạo một endpoint với một IP nội bộ (ví dụ 10.50.0.5), advertise IP đó về on-prem qua Cloud Router. On-prem chỉ cần route tới 10.50.0.5 như một IP nội bộ bình thường, và gọi storage-xyz.p.googleapis.com. Vì endpoint là global internal IP, nó hoạt động qua hybrid link (About accessing Google APIs through endpoints).
Bài học cơ chế: việc bạn kiểm soát IP của endpoint (thay vì bị buộc dùng
199.36.153.xcủa Google) chính là thứ làm hybrid routing trở nên tự nhiên — bạn route một IP nội bộ thuộc IP plan của mình, không phải một dải ngoài do Google áp đặt.
Constraints & Failure Modes
Chỉ HTTP-based protocol. Bundle Google APIs chỉ hỗ trợ HTTP, HTTPS, HTTP/2 trên TCP. Không hỗ trợ MQTT, ICMP. Nếu workload cần protocol khác, PSC Google APIs không dùng được (About accessing Google APIs through endpoints).
Không bao gồm Workspace apps.
all-apiskhông cho truy cập Gmail, Docs, và website tương tác. Đây là giới hạn về phạm vi service, không phải lỗi cấu hình.Client phải dùng đúng endpoint name. Nếu application vẫn gọi
storage.googleapis.com(mặc định), traffic không đi qua PSC endpoint. Phải cấu hình client library/SDK dùng*.p.googleapis.com. Đây là failure mode âm thầm: "tôi đã tạo endpoint nhưng traffic vẫn ra public" — gần như luôn do client chưa override endpoint.Org Policy có thể chặn. Admin có thể dùng
constraints/compute.disablePrivateServiceConnectCreationForConsumersđể cấm tạo PSC endpoint. Nếu bị chặn ở tổ chức, việc tạo endpoint sẽ fail (About accessing Google APIs through endpoints).vpc-scthu hẹp có chủ đích. Nếu chọn bundlevpc-scrồi gọi một API không nằm trong danh sách VPC-SC-supported, request sẽ fail. Đây là thiết kế, không phải bug — chọn bundle đúng theo nhu cầu.
Anti-Pattern: Tạo Endpoint Nhưng Quên Override Client Endpoint
Sai lầm phổ biến nhất với PSC Google APIs, và nó soi sáng một hiểu lầm về cơ chế: nhiều người nghĩ rằng "tạo PSC endpoint xong thì mọi traffic tới Google APIs tự động đi qua đó". Không phải.
Vì sao sai về cơ chế: PSC endpoint chỉ là một IP + DNS record cho tên *.p.googleapis.com. Application của bạn, theo mặc định, vẫn resolve storage.googleapis.com ra IP public và gọi qua đó. Endpoint chỉ được dùng khi client chủ động gọi tên p.googleapis.com (hoặc bạn dùng DNS để override googleapis.com về endpoint, một cách phức tạp hơn).
Hệ quả ở scale: team tin rằng họ đã "private hóa" toàn bộ traffic Google APIs, trong khi thực tế phần lớn vẫn ra public. Điều này đặc biệt nguy hiểm nếu họ dựa vào đó để thỏa mãn yêu cầu compliance (data không rời mạng private) — một false sense of security.
Cách đúng: cấu hình endpoint override ở tầng client library (ví dụ storage.Client(client_options={"api_endpoint": "https://storage-xyz.p.googleapis.com"}) trong Python), hoặc thiết lập DNS response policy để buộc *.googleapis.com phân giải về endpoint. Sau đó verify bằng cách kiểm tra traffic thực sự đi qua endpoint IP (flow logs, connectivity tests — xem file 07).
References
- About accessing Google APIs through endpoints — bundle all-apis/vpc-sc, DNS p.googleapis.com, IP requirements, hybrid, constraints
- Configure Private Service Connect to access Google APIs — các bước tạo endpoint, override client
- Access regional Google APIs through endpoints
- Private Google Access — so sánh với Private Google Access
- Chương 3: Private Google Access
- Chương 3: VPC Service Controls — bối cảnh bundle vpc-sc