VPC Service Controls — Data Perimeter và Ngăn Chặn Data Exfiltration
VPC Service Controls Không Phải Là Network Firewall
Đây là điểm quan trọng nhất cần hiểu: VPC Service Controls (VPC SC) hoạt động ở cấp API, không phải ở cấp network. Nó không block network packets — nó block API requests đến Google managed services.
VPC Firewall: "Packet này có IP nguồn nào? Có được phép kết nối đến IP đích không?" VPC SC: "Request API này đến từ context nào? Context đó có được authorize access vào resource này không?"
Khi bạn cố access Cloud Storage bucket, GCP Cloud Storage API nhận request, kiểm tra VPC SC policies, và quyết định có serve request không — điều này xảy ra ở Google's API layer, không phải ở network layer trong VPC của bạn.
Bài Toán: Data Exfiltration Thông Qua Google Services
Tưởng tượng tình huống này:
Attacker đã compromise một service account hoặc user account
trong GCP project của bạn.
Tài nguyên bị compromise: Service account có access đọc
BigQuery tables chứa dữ liệu khách hàng.
Scenario 1 (không có VPC SC):
Attacker dùng gcloud BigQuery CLI từ laptop cá nhân
→ Google BigQuery API nhận request
→ Auth check: service account hợp lệ → ALLOWED
→ Attacker export toàn bộ data về laptop
Scenario 2 (có VPC SC):
Attacker cố access BigQuery từ laptop cá nhân
→ Google BigQuery API nhận request
→ VPC SC check: request từ outside perimeter → DENIED
→ Data không bị lấy raVPC SC ngăn chặn loại tấn công này bằng cách yêu cầu request đến sensitive services phải xuất phát từ authorized context (VPCs trong perimeter, authorized users với specific access conditions).
Service Perimeter: Model Cốt Lõi
Service perimeter là ranh giới bảo vệ một tập hợp Google Cloud projects và services:
VPC SC Perimeter "production-perimeter":
Projects within:
- prod-data-project (BigQuery, Cloud Storage)
- prod-compute-project (Compute Engine, GKE)
Restricted services:
- storage.googleapis.com (Cloud Storage)
- bigquery.googleapis.com (BigQuery)
- secretmanager.googleapis.com (Secret Manager)
- sqladmin.googleapis.com (Cloud SQL)
Access Policy:
VMs trong prod-compute-project's VPC → ALLOWED
Authorized users với device certificates → ALLOWED (via access level)
Everything else → DENIEDResources "In" vs "Out" Perimeter
- In perimeter: Resources trong projects listed trong perimeter. API calls to restricted services in these projects check VPC SC.
- Out perimeter: Tất cả còn lại. Requests từ outside phải satisfy ingress rules để vào.
Điểm kỹ thuật quan trọng: VPC SC không protect resources trong projects outside the perimeter. Nếu data được copy ra khỏi perimeter (ví dụ: copy GCS bucket ra ngoài), data mới đó không còn được VPC SC bảo vệ.
Ingress và Egress Rules
Ingress Rules: Ai Được Phép Vào
ingressPolicies:
- ingressFrom:
identities:
- serviceAccount:analyst-sa@trusted-project.iam.gserviceaccount.com
sources:
- accessLevel: accessPolicies/12345/accessLevels/corporate-device
ingressTo:
operations:
- serviceName: bigquery.googleapis.com
methodSelectors:
- method: BigQueryService.ListTables
- method: BigQueryService.GetQueryResults
resources:
- projects/prod-data-projectIngress rule này cho phép:
- Chỉ
analyst-saservice account - Từ devices thỏa mãn
corporate-deviceaccess level (ví dụ: corporate-managed device với cert) - Chỉ read operations (ListTables, GetQueryResults) — không phải write
- Chỉ đến
prod-data-project's BigQuery resources
Egress Rules: Data Nào Được Phép Ra
egressPolicies:
- egressFrom:
identities:
- serviceAccount:etl-sa@prod-compute-project.iam.gserviceaccount.com
- egressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: google.storage.v1.Objects.Insert
resources:
- projects/data-lake-projectETL service account được phép write vào Cloud Storage trong data-lake-project (outside perimeter) — cho phép data pipeline export data đã transform sang data lake, trong khi vẫn block unauthorized egress.
VPC SC và VPC Network: Hai Layers Khác Nhau
Để hiểu đúng, cần nắm rõ: VPC SC và VPC Firewall kiểm soát hai thứ hoàn toàn khác nhau.
Layer 1: VPC Network Firewall
Controls: Network connectivity (IP packets)
Question: "Packet này có được phép đi từ A đến B?"
Enforcement: Andromeda agent tại VM
Layer 2: VPC Service Controls
Controls: API access (HTTP/gRPC requests)
Question: "Request API này có được authorize không?"
Enforcement: Google API layer (không phải tại VM)Cần cả hai:
- VPC Firewall ngăn network attacks (port scanning, DDoS)
- VPC SC ngăn data exfiltration qua compromised credentials
Firewall không biết request đến BigQuery là legitimate hay exfiltration — chỉ biết packet đến IP của BigQuery API. VPC SC biết vì nó check identity, context, và access policy.
Dry Run Mode: Test Trước Khi Enforce
VPC SC có dry-run mode — đặc biệt quan trọng vì misconfigured VPC SC có thể break production workloads:
# Tạo perimeter ở dry-run mode trước
gcloud access-context-manager perimeters create prod-perimeter \
--policy=policies/12345 \
--title="Production Perimeter" \
--resources=projects/123456789 \
--restricted-services=bigquery.googleapis.com,storage.googleapis.com \
--enable-vpc-accessible-services \
--vpc-allowed-services=RESTRICTED-SERVICES \
--mode=dry-run
# Xem violations trong dry-run (không enforce, chỉ log)
gcloud logging read \
'logName="projects/my-project/logs/cloudaudit.googleapis.com%2Fpolicy"
protoPayload.methodName="google.identity.accesscontextmanager.v1.AccessContextManager.CommitServicePerimeters"'Trong dry-run mode, requests bị chặn trong enforcement mode sẽ được log nhưng không bị block. Review logs trong 1-2 tuần để hiểu những gì sẽ bị break trước khi enforce.
Tại sao dry-run quan trọng: VPC SC policies ảnh hưởng đến tất cả API calls đến restricted services trong perimeter — bao gồm calls từ CI/CD systems, monitoring agents, automated jobs. Enforce quá sớm mà không test → production outage.
Failure Mode: Breakglass Procedures
Trong production emergencies, nếu VPC SC đang block legitimate traffic:
# Tạm thời thêm ingress rule cho emergency access
gcloud access-context-manager perimeters update prod-perimeter \
--policy=policies/12345 \
--add-ingress-policies='[{"from": {"identities": ["user:oncall@company.com"]}, "to": {"resources": ["*"], "operations": [{"serviceName": "*"}]}}]'
# Sau khi incident resolve: xóa emergency rule
gcloud access-context-manager perimeters update prod-perimeter \
--policy=policies/12345 \
--clear-ingress-policiesCần có breakglass procedures được document và tested TRƯỚC khi incident xảy ra. Không phải lần đầu bạn làm thủ tục này là khi production đang cháy.
VPC SC với Shared VPC
Khi dùng Shared VPC với VPC SC:
Host project: prod-network-host (network management)
Service projects: team-alpha-prod, team-beta-prod
VPC SC perimeter bao gồm:
- team-alpha-prod (restricted services: BigQuery, GCS)
- team-beta-prod (restricted services: BigQuery, GCS)
Không include: prod-network-host
(Host project thường không cần bảo vệ data vì nó không chứa data resources)VMs trong service projects (team-alpha, team-beta) kết nối BigQuery từ trong perimeter → allowed. Admin access từ bên ngoài → cần ingress rules hoặc access levels.
Lưu Ý: VPC SC Không Encrypt Data
VPC SC kiểm soát access không phải confidentiality. Data vẫn được encrypt tại rest và in-transit (Google-managed keys hoặc CMEK). VPC SC thêm một layer access control ở API level.
Tổng hợp bảo mật layers:
- Encryption at rest/transit: Protect nếu storage media bị compromise
- IAM: Kiểm soát identity-based access
- VPC SC: Kiểm soát context-based access (từ đâu, với device nào)
- VPC Firewall: Kiểm soát network-level connectivity
References
- VPC Service Controls Overview — Tài liệu chính thức
- Service Perimeters — Tạo và quản lý perimeters
- Ingress/Egress Rules — Fine-grained access rules
- Troubleshoot VPC SC — Debug và repair perimeters
- VPC SC và Shared VPC — Integration patterns