Skip to content

Dịch vụ khu vực vs toàn cầu: Chủ quyền dữ liệu & Hàm ý kiến trúc

Vì sao quan trọng trong sản xuất

Dịch vụ GCP chia thành 2 loại:

Dịch vụ toàn cầu: Hoạt động toàn cầu, tự động sao chép dữ liệu

  • Ví dụ: Cloud Storage, BigQuery, Cloud Spanner
  • Vấn đề: Vi phạm yêu cầu cư trú dữ liệu (GDPR, HIPAA)

Dịch vụ khu vực: Chạy vùng cụ thể, bạn kiểm soát vị trí

  • Ví dụ: Compute Engine, Cloud SQL, GKE
  • Lợi ích: Đảm bảo chủ quyền dữ liệu

Chọn sai loại dịch vụ → vi phạm tuân thủ → phạt luật.

Mô hình nội bộ: Ràng buộc chủ quyền dữ liệu

Dịch vụ toàn cầu (Hành vi mặc định)

Bộ chứa Cloud Storage tạo (mặc định):
├─ Lớp lưu trữ mặc định: STANDARD (đa vùng)
├─ Vị trí dữ liệu: Sao chép tới đa vùng tự động
│  └─ Ví dụ: bộ chứa đa vùng "us"
│     └─ Dữ liệu lưu trữ: us-central1 HOẶC us-east1 HOẶC us-west1
│     └─ GCP chọn tự động

├─ Vấn đề tuân thủ:
│  ├─ GDPR: "Xử lý phải ở EU"
│  ├─ Chuyện gì xảy ra: Dữ liệu ở trung tâm dữ liệu US
│  └─ Vi phạm: Phạt bởi cơ quan EU

├─ Yêu cầu quy định:
│  ├─ GDPR (EU): Tất cả dữ liệu cá nhân EU phải ở EU
│  ├─ CCPA (California): Dữ liệu cư dân California phải ở vùng CA
│  ├─ HIPAA (Sức khỏe): Dữ liệu bệnh nhân chỉ vùng cụ thể
│  ├─ SOC 2: Yêu cầu kiểm toán, vị trí dữ liệu nhạy cảm
│  └─ FedRAMP (Chính phủ): Dữ liệu chính phủ US chỉ cơ sở phê duyệt

Dịch vụ khu vực (Vị trí kiểm soát)

Máy chủ Compute Engine tạo:
├─ Vùng cụ thể: europe-west1-b (Bỉ)
├─ Dữ liệu lưu trữ: Chỉ europe-west1-b (kiểm soát)
├─ Sao chép: Lựa chọn (sao chép vùng EU khác nếu cần)

├─ Lợi ích tuân thủ:
│  ├─ GDPR: Dữ liệu ở EU → Tuân thủ
│  ├─ Kiểm soát: Bạn quyết định sao chép
│  └─ Kiểm toán: Vị trí dữ liệu có thể chứng minh

├─ Cơ sở dữ liệu khu vực (Cloud SQL):
│  ├─ Chính: europe-west1
│  ├─ Bản sao: europe-west1 (cùng vùng, rõ ràng)
│  ├─ Hoặc: Vùng EU khác (eu-west4) nếu cần
│  └─ Sao lưu: Ảnh chụp khu vực, ở vùng

Mô hình kiến trúc production

Mô hình 1: Kiến trúc tuân thủ GDPR

Yêu cầu: Xử lý dữ liệu dùng EU chỉ vùng EU

Kiến trúc:
├─ Tầng tính toán:
│  └─ Cụm GKE ở eu-west1 (Bỉ)

├─ Tầng cơ sở dữ liệu:
│  └─ PostgreSQL Cloud SQL (eu-west1 chính + eu-west4 bản sao)

├─ Tầng lưu trữ:
│  └─ Bộ chứa Cloud Storage khu vực (europe-west1)
│  └─ KHÔNG đa vùng (vi phạm GDPR)

├─ Tầng phân tích:
│  └─ Tập dữ liệu BigQuery đa vùng EU
│  └─ Hoặc: Tập dữ liệu khu vực BigQuery EU (tuân thủ hơn)

└─ Tầng sao lưu:
   └─ Ảnh chụp eu-west1 thôi (không đa vùng)

Xác nhận tuân thủ:
├─ Kiểm toán vị trí dữ liệu:
│  └─ Chạy: "Mỗi dữ liệu sống ở đâu?"
│  └─ Kết quả: Tất cả vùng EU

├─ Kiểm soát truy cập:
│  └─ DLP (Ngăn chặn mất dữ liệu) quét dữ liệu nhạy cảm
│  └─ Cảnh báo nếu: Phát hiện ngoài vùng EU

└─ Tài liệu:
   └─ Thỏa thuận xử lý dữ liệu (DPA) với GCP
   └─ Chứng minh: Xử lý dữ liệu EU ở EU

Mô hình 2: Tuân thủ đa vùng (Tách US + EU)

Yêu cầu: Dữ liệu dùng US ở US, dữ liệu dùng EU ở EU

Thách thức: Ứng dụng duy nhất cần phục vụ cả hai

Kiến trúc:
├─ Tầng ứng dụng (toàn cầu, đa vùng):
│  ├─ Bộ cân bằng tải: Toàn cầu (định tuyến địa lý)
│  └─ Điều khiển lưu lượng: Dùng→vùng gần nhất

├─ Tầng dữ liệu US:
│  ├─ Vùng: us-central1
│  ├─ Cơ sở dữ liệu: Cloud SQL (us-central1 chính)
│  ├─ Lưu trữ: Cloud Storage khu vực (us-central1)
│  └─ Dùng: Chỉ US

├─ Tầng dữ liệu EU:
│  ├─ Vùng: eu-west1
│  ├─ Cơ sở dữ liệu: Cloud SQL (eu-west1 chính)
│  ├─ Lưu trữ: Cloud Storage khu vực (eu-west1)
│  └─ Dùng: Chỉ EU

└─ Logíc định tuyến ứng dụng:
   └─ nếu (dùng.vị_trí == 'US') → Kết nối dịch vụ us-central1
   └─ nếu (dùng.vị_trí == 'EU') → Kết nối dịch vụ eu-west1

Mô hình 3: Dịch vụ toàn cầu chia sẻ với dữ liệu khu vực

Kịch bản: Phân tích BigQuery (dịch vụ toàn cầu) với ràng buộc dữ liệu khu vực

Thách thức:
├─ BigQuery xử lý truy vấn toàn cầu
├─ Nhưng dữ liệu cá nhân phải ở vùng
├─ Cách phân tích mà không vi phạm ràng buộc?

Giải pháp:
├─ Tách tập dữ liệu mỗi vùng:
│  ├─ Tập dữ liệu 1: Dữ liệu cá nhân EU (BigQuery đa vùng EU)
│  ├─ Tập dữ liệu 2: Dữ liệu cá nhân US (BigQuery đa vùng US)
│  └─ Tập dữ liệu 3: Nặc danh/tổng hợp (toàn cầu, không ràng buộc)

├─ Chiến lược truy vấn:
│  ├─ Phân tích EU: Truy vấn tập dữ liệu EU (ở EU)
│  ├─ Phân tích US: Truy vấn tập dữ liệu US (ở US)
│  └─ Phân tích toàn cầu: Truy vấn tập dữ liệu nặc danh

├─ Phân tích liên vùng:
│  └─ Nếu cần: Phải tổng hợp biên vùng
│  └─ Ví dụ: "Đếm US" + "Đếm EU" = "Đếm toàn cầu" (cho phép)
│  └─ Nhưng: Không thể chạy truy vấn duy nhất qua dữ liệu cá nhân (không cho)

Kịch bản tuân thủ thực tế

Kịch bản 1: Lưu trữ đa vùng vô tình (Vi phạm GDPR)

Lỗi: Tạo bộ chứa Cloud Storage mà không chỉ định vùng

Dấu hiệu:
├─ Bộ chứa tạo: "eu-gdpr-data"
├─ Kỳ vọng: Dữ liệu ở Âu
├─ Thực tế: Bộ chứa đa vùng (mặc định)
│  └─ Dữ liệu lưu trữ: us-central1, us-east1, eu-west1
│  └─ Trung tâm dữ liệu US giữ dữ liệu cá nhân EU!

Phát hiện:
├─ Kiểm toán: "eu-gdpr-data lưu trữ ở đâu?"
├─ Phản hồi GCP: "Đa vùng (vị trí US + EU)"
├─ Kiểm tra tuân thủ: Thất bại (dữ liệu ngoài EU)

Tác động:
├─ Kiểm toán quy định: Phát hiện vi phạm GDPR
├─ Thông báo: Cơ quan giám sát EU
├─ Phạt: 4% doanh thu toàn cầu (có thể hàng triệu)
├─ Bắt buộc: Tạo bộ chứa khu vực mới, di chuyển dữ liệu

Giải quyết:
├─ Tạo: Bộ chứa khu vực eu-west1
├─ Di chuyển: Tất cả dữ liệu từ đa vùng tới khu vực
├─ Xóa: Bộ chứa đa vùng
└─ Chứng chỉ: Cung cấp bằng chứng vị trí dữ liệu cơ quan

Kịch bản 2: Vi phạm sao chép (Cư trú dữ liệu)

Kiến trúc:
├─ Chính: Cloud SQL ở eu-west1 (yêu cầu EU)
├─ Bản sao: Cloud SQL ở us-central1 (cho dự phòng)

Vấn đề:
├─ Chính ở EU ✓ (tuân thủ)
├─ Bản sao ở US ✗ (không tuân thủ)
├─ Tại sao: Dữ liệu cá nhân EU sao chép tới US

Hậu quả:
├─ Vi phạm GDPR: Dữ liệu chuyển ngoài EU
├─ Cơ sở chuyển: Cần SCC (Điều khoản hợp đồng tiêu chuẩn)
├─ Phát hiện kiểm toán: Cơ chế chuyển dữ liệu không phù hợp
└─ Sửa: Dùng chỉ bản sao EU (eu-west4) hoặc xóa bản sao US

Cách tiếp cận đúng:
└─ Chính: eu-west1
└─ Bản sao: eu-west4 (cả hai ở EU, luôn)

Kịch bản 3: Chuyển dữ liệu ngầm (BigQuery)

Kịch bản: Dùng Âu với BigQuery EU, nhóm US phân tích dữ liệu

Câu hỏi: Phân tích chuyển dữ liệu tới US?
├─ Tập dữ liệu BigQuery: Đa vùng EU
├─ Truy vấn: Nhà phân tích US gửi truy vấn
├─ Thực hiện: Truy vấn chạy ở đâu?

Trả lời:
├─ Thực hiện truy vấn: Ở vùng EU
├─ Kết quả: Nhà phân tích US tải xuống
├─ Chuyển dữ liệu: Không, phân tích ở EU
├─ Tuân thủ: OK (tính toán không di chuyển dữ liệu)

Nhưng nếu:
├─ Xuất kết quả Cloud Storage: Kiểm tra vị trí bộ chứa
├─ Nếu bộ chứa us-central1: Bây giờ dữ liệu ở US ✗
├─ Giải pháp: Xuất bộ chứa khu vực EU thay thế ✓

Lỗi thường gặp & Mô hình chống

Lỗi 1: Giả định dịch vụ toàn cầu = dữ liệu phân tán khắp nơi

Suy nghĩ sai:

"Cloud Storage lưu trữ dữ liệu toàn cầu, tất cả dữ liệu nhân bản thế giới"

Hiểu đúng:

  • Đa vùng: Sao chép chỉ vùng chọn
  • Khu vực: Vùng duy nhất
  • Bạn chọn: gs://my-bucket/ us (đa vùng US thôi) vs gs://my-bucket/ europe-west1 (khu vực EU thôi)

Phòng chống: Luôn chỉ định vị trí lưu trữ tạo bộ chứa Cloud Storage.

Lỗi 2: Dựa vào xử lý dữ liệu "ẩn"

Suy nghĩ sai:

"GCP xử lý dữ liệu vùng EU, nên luôn xử lý EU"

Hiểu đúng:

  • Dịch vụ một số: Xử lý ngầm ngoài vùng
  • Ví dụ: Dịch vụ toàn cầu BigQuery có thể cache US
  • Phải xác nhận: Thực sự xử lý ở đâu tuân thủ
  • Tốt hơn: Dùng dịch vụ/tập dữ liệu khu vực khi cần

Phòng chống: Xem tài liệu tuân thủ GCP mỗi dịch vụ dùng.

Lỗi 3: Quên sao lưu/ảnh chụp tuân thủ

Suy nghĩ sai:

"Chỉ cơ sở dữ liệu chính quan trọng, sao lưu có thể ở đâu"

Hiểu đúng:

  • Sao lưu: Cũng dữ liệu cá nhân nếu chính có
  • Phải tuân theo yêu cầu cư trú giống
  • Vị trí sao lưu mặc định: Cùng vùng (thường)
  • Nguy hiểm: Đặt sao lưu vùng khác → vi phạm dữ liệu

Phòng chống: Xác nhận vị trí lưu trữ sao lưu cấu hình dịch vụ.

Hướng dẫn triển khai GCP

Buộc ràng buộc khu vực

bash
# Tạo bộ chứa Cloud Storage khu vực (không đa vùng)
gsutil mb -l europe-west1 gs://eu-data-regional-bucket

# Tạo máy chủ Cloud SQL khu vực
gcloud sql instances create eu-db \
  --database-version=POSTGRES_15 \
  --region=europe-west1 \
  --tier=db-f1-micro

# Tạo cụm GKE khu vực
gcloud container clusters create eu-cluster \
  --region=europe-west1 \
  --num-nodes=3

# Tạo tập dữ liệu BigQuery khu vực
bq mk --location=EU --dataset eu_data_dataset

# Xác nhận vị trí khu vực
gsutil bucketpolicyonly get gs://eu-data-regional-bucket
gcloud sql instances describe eu-db --format='value(region)'
bq show --format=json eu_data_dataset | jq '.location'

Kiểm toán tuân thủ

bash
# Tìm tất cả bộ chứa Cloud Storage vị trí
gsutil ls -L -b

# Kiểm tra bộ chứa đa vùng (vi phạm tiềm ẩn)
for bucket in $(gsutil ls); do
  LOCATION=$(gsutil bucketpolicyonly get "$bucket" 2>/dev/null | grep 'Location' || echo "Unknown")
  if [[ "$LOCATION" == *"multi"* ]]; then
    echo "CẢNH BÁO: Bộ chứa đa vùng tìm thấy: $bucket"
  fi
done

# Liệt kê máy chủ Cloud SQL vùng
gcloud sql instances list --format='table(name, region, databaseVersion)'

# Kiểm toán tuân thủ vị trí dữ liệu
gcloud logging read \
  'severity=WARNING AND protoPayload.methodName=~"gcp.resourcemanager"' \
  --format='table(severity, timestamp, protoPayload.resourceName)'

Xác nhận cư trú dữ liệu

bash
# Tạo chứng chỉ tuân thủ (bằng chứng vị trí khu vực)
# 1. Liệt kê tất cả dịch vụ mỗi vùng
gcloud compute instances list --format='value(name, zone)' | cut -d- -f1-3 | sort -u
gcloud sql instances list --format='value(name, region)'
gcloud container clusters list --format='value(name, location)'

# 2. Tạo báo cáo tuân thủ
cat > compliance_report.txt << EOF
Báo cáo tuân thủ cư trú dữ liệu - Tạo $(date)

VM Compute Engine (Vùng EU):
$(gcloud compute instances list --format='table(name, zone)' --filter='zone:europe*')

Cơ sở dữ liệu Cloud SQL (Vùng EU):
$(gcloud sql instances list --format='table(name, region)' --filter='region:europe*')

Bộ chứa Cloud Storage (Khu vực EU):
$(gsutil ls -L -b | grep europe)

Trạng thái tuân thủ: ĐÃ XÁC NHẬN ✓
Ngày xác nhận: $(date)
Kiểm toán viên: [Tên bạn]
EOF

echo "Báo cáo tuân thủ tạo: compliance_report.txt"

Tài liệu tham khảo


Tiếp theo: Kỹ thuật lưu lượng & Cân bằng tải đa đường — Chương cuối: Kết hợp tất cả