1. Giới thiệu
VPC Service Controls (VPC-SC) là một chế độ kiểm soát bảo mật ở cấp tổ chức trong Google Cloud, cho phép khách hàng doanh nghiệp giảm thiểu rủi ro đánh cắp dữ liệu. VPC Service Controls cung cấp quyền truy cập vào các dịch vụ đa khách hàng theo nguyên tắc không tin tưởng bất cứ điều gì (zero-trust) bằng cách cho phép khách hàng giới hạn quyền truy cập để chỉ cho phép những địa chỉ IP, bối cảnh của thiết bị khách và thông số thiết bị đã được cấp phép trong khi kết nối đến các dịch vụ đa khách hàng qua Internet và các dịch vụ khác nhằm giảm thiểu các trường hợp mất mát do cố ý và vô ý. Như đã thấy trong Hướng dẫn cơ bản về VPC Service Controls I, bạn có thể sử dụng VPC Service Controls để tạo các ranh giới bảo vệ tài nguyên và dữ liệu của những dịch vụ mà bạn chỉ định rõ ràng.
Mục tiêu của hướng dẫn này là:
- Tìm hiểu kiến thức cơ bản về VPC Service Controls
- Cập nhật phạm vi dịch vụ và kiểm thử phạm vi đó bằng chế độ Chạy thử
- Bảo vệ 2 dịch vụ bằng VPC Service Controls
- Khắc phục lỗi vi phạm quy tắc chuyển dữ liệu ra bên ngoài của VPC Service Controls trong khi liệt kê một đối tượng từ Cloud Storage
2. Thiết lập và yêu cầu
Đối với hướng dẫn này, bạn cần đáp ứng các yêu cầu sau:
- Tổ chức GCP.
- Một thư mục trong Tổ chức.
- 2 dự án GCP trong cùng một Tổ chức được đặt trong thư mục.
- Các quyền bắt buộc ở cấp tổ chức.
- Tài khoản thanh toán cho cả hai dự án.
- Hướng dẫn cơ bản về VPC Service Controls I Thiết lập VPC Service Controls và Access Context Manager.

Resources-setup
- Thiết lập tài nguyên như mô tả trong phần "Thiết lập tài nguyên" của Hướng dẫn cơ bản về VPC Service Controls I
- Xác minh rằng bạn có các quyền cần thiết để quản trị Cloud Storage.
- Trong hướng dẫn này, chúng ta sẽ bắt đầu sử dụng CLI thay vì bảng điều khiển trên đám mây. Trong một trong các môi trường phát triển, hãy thiết lập gcloud CLI:
- Cloud Shell: để sử dụng một thiết bị đầu cuối trực tuyến đã thiết lập gcloud CLI, hãy kích hoạt Cloud Shell.
Kích hoạt Cloud Shell bằng cách nhấp vào biểu tượng ở góc trên cùng bên phải của bảng điều khiển đám mây. Có thể mất vài giây để phiên hoạt động khởi động. Hãy xem hướng dẫn về Cloud Shell để biết thêm thông tin chi tiết.

Chi phí
Bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên đám mây. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.
Các tài nguyên duy nhất sẽ phát sinh chi phí là VM Instance và Cloud Storage Object. Bạn có thể xem chi phí ước tính của phiên bản VM trong công cụ tính giá. Bạn có thể xem chi phí ước tính của Cloud Storage trong danh sách giá này.
3. Tạo một Nhóm lưu trữ và Đối tượng
Như đã đề cập trước đó, chúng ta sẽ sử dụng lại các tài nguyên đã tạo trong hướng dẫn trước. Vì vậy, chúng ta sẽ tiếp tục tạo vùng lưu trữ Cloud Storage. Trong hướng dẫn này, chúng ta sẽ bắt đầu sử dụng gcloud CLI thay vì bảng điều khiển.
- Trong Google Console, hãy chọn ProjectX. Trong dự án này, chúng ta sẽ tạo Storage Bucket và đối tượng.
- Đảm bảo bạn đặt cloud shell sử dụng ProjectX bằng cách chạy lệnh sau:
gcloud config set project PROJECT_ID
- Trong môi trường phát triển, hãy chạy lệnh sau:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
- Tạo một đối tượng lưu trữ để chúng ta có thể đọc đối tượng đó từ phiên bản máy ảo nằm trong ProjectZ. Chúng tôi sẽ tạo một tệp .txt.
nano hello.txt
Thêm mọi nội dung bạn muốn vào tệp văn bản.
- Tải đối tượng lên bộ chứa.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
- Xác minh rằng đối tượng đã được tải lên vùng lưu trữ bằng cách liệt kê đối tượng đó.
gcloud storage ls gs://BUCKET_NAME
Bạn phải thấy tệp hello.txt xuất hiện trong bảng điều khiển.
4. Protect Cloud Storage API
Trong lớp học lập trình trước, chúng ta đã tạo một ranh giới và bảo vệ Compute Engine API. Trong lớp học lập trình này, chúng ta sẽ chỉnh sửa chu vi chế độ chạy thử và thêm Cloud Storage. Việc này sẽ giúp chúng tôi xác định mức tác động của biện pháp bảo vệ và cho chúng tôi biết các lỗi vi phạm của VPC Service Controls trong nhật ký kiểm tra, nhưng các tài nguyên vẫn có thể truy cập được cho đến khi chúng tôi thực thi biện pháp bảo vệ.
- Trong Google Console, hãy chọn Tổ chức của bạn; Truy cập vào VPC Service Controls. Đảm bảo rằng bạn đang ở phạm vi Tổ chức.
- Mở Cloud Shell rồi cập nhật ranh giới Chạy thử "SuperProtection" đã tạo trong phòng thí nghiệm trước:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
- Xác minh rằng Cloud Storage API đã được cập nhật bằng cách mô tả chu vi
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY
Trong đầu ra, bạn sẽ thấy Cloud Storage API được liệt kê bên dưới các dịch vụ bị hạn chế
cùng với Compute Engine API nhưng có nhãn "-vpcAccessibleServices: {}":

5. Xác minh rằng API Cloud Storage đã được bảo vệ
Ở chế độ Chạy thử, hãy xác minh rằng chu vi "SuperProtection" đang cho chúng ta thấy lệnh từ chối bằng cách liệt kê đối tượng từ phiên bản máy ảo được tạo trong ProjectZ sang ProjectX đang lưu trữ Thùng lưu trữ
- Trong Cloud Console, hãy chuyển đến bộ chọn dự án rồi chọn ProjectZ, sau đó chuyển đến Compute Engine > VM Instances (Phiên bản máy ảo).
- Nhấp vào nút SSH để kết nối với Thực thể máy ảo và truy cập vào dòng lệnh của thực thể đó.

- Liệt kê tệp hello.txt mà chúng ta đã tải lên trước đó.
gcloud storage ls gs://BUCKET_NAME
Vì Cloud Storage API được bảo vệ ở chế độ chạy thử nghiệm, nên bạn có thể liệt kê các tài nguyên, nhưng phải có thông báo lỗi trong nhật ký kiểm tra ProjectZ.
- Chuyển đến Logs Explorer API trong ProjectZ và tìm thông báo lỗi cuối cùng của VPC Service Controls. Bạn có thể sử dụng bộ lọc này để lấy nhật ký mà chúng ta đang tìm:
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS" "(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"
Bộ lọc này sẽ cho chúng ta thấy lỗi vi phạm gần đây nhất ở chế độ Chạy thử thuộc về Cloud Storage. Dưới đây là ví dụ về nhật ký và chúng ta có thể xác thực rằng lỗi vi phạm là lỗi truyền dữ liệu ra ngoài khi cố gắng liệt kê nội dung trên nhóm lưu trữ nằm trong ProjectX.
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
- Vì chúng tôi đã xác thực rằng lệnh gọi API đến Cloud Storage tạo ra một lỗi vi phạm VPC Service Controls, nên chúng tôi sẽ thực thi phạm vi bằng cấu hình mới. Mở Cloud Shell và thực thi ranh giới Chạy thử:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
- Kết nối với phiên bản VM bằng SSH và liệt kê lại vùng lưu trữ để xác minh rằng bạn đã thực thi đúng chế độ Dry-run.
gcloud storage ls gs://BUCKET_NAME
Chúng ta sẽ nhận được thông báo vi phạm VPC Service Control trong giao diện dòng lệnh của máy ảo thay vì danh sách các đối tượng Bộ nhớ:
ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"
Chúng tôi đã ngăn chặn thành công hành vi đánh cắp dữ liệu bằng cách sử dụng VPC Service Controls để ngăn chặn việc đọc dữ liệu từ hoặc sao chép dữ liệu vào một tài nguyên bên ngoài ranh giới.
6. Khắc phục sự cố về việc từ chối danh sách.
Chúng ta sẽ khắc phục sự cố về việc bị từ chối từ CLI của phiên bản máy ảo. Hãy kiểm tra nhật ký kiểm tra và tìm mã nhận dạng riêng biệt của VPC Service Controls.
- Chuyển đến bộ chọn dự án rồi chọn ProjectZ.
- Tìm mã nhận dạng duy nhất của VPC Service Controls trong nhật ký kiểm tra bằng cách sử dụng truy vấn sau trong Trình khám phá nhật ký:
resource.type="audited_resource" protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
Thao tác này sẽ cho thấy tất cả nhật ký kiểm tra của VPC Service Controls. Chúng tôi sẽ tìm nhật ký lỗi gần đây nhất. Vì lệnh gọi API được thực hiện từ phiên bản VM, nên thực thể chính phải là tài khoản dịch vụ Compute Engine "PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Vì đã có mã nhận dạng duy nhất của VPC Service Controls, nên chúng ta có thể sử dụng mã này để lấy nhật ký mong muốn trực tiếp bằng cách sử dụng bộ lọc sau:
protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
- Nhấp vào tiêu đề VPC Service Controls (Các biện pháp kiểm soát dịch vụ VPC), rồi chọn "Khắc phục sự cố từ chối". Thao tác này sẽ mở Trình khắc phục sự cố VPC Service Controls.
API này sẽ cho chúng ta thấy lý do vi phạm trong một giao diện người dùng thân thiện, đồng thời cho biết đây có phải là lỗi vi phạm đầu vào hay đầu ra hay không, cùng với những thông tin hữu ích khác.
Trong bài tập này, chúng ta sẽ tìm những thông tin sau:
authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
Thông tin này đủ để chúng tôi biết rằng mình cần tạo một quy tắc chuyển dữ liệu ra để cho phép tài khoản dịch vụ Compute Engine truy cập vào vùng lưu trữ từ ProjectZ đến ProjectX. Ngoài ra, chúng ta có thể thấy rằng mạng không nằm trong cùng một ranh giới, vì vậy, chúng ta cần cho phép VPC giao tiếp với các dịch vụ và chia sẻ dữ liệu trên các ranh giới dịch vụ.
- Kích hoạt Cloud Shell và tạo một tệp .yaml có quy tắc chuyển dữ liệu ra bằng trình chỉnh sửa văn bản.
nano egresstorage.yaml
- egressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: \"*\"
resources:
- projects/PROJECTX_ID
egressFrom:
identities:
- serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
- Cập nhật chính sách chuyển dữ liệu vào để bảo vệ ProjectZ.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY
Giờ đây, chúng ta có thể thử truy cập lại vào nhóm này từ phiên bản máy ảo.
- Trong Cloud Console, hãy chuyển đến bộ chọn dự án rồi chọn ProjectZ, sau đó chuyển đến Compute Engine > VM Instances (Phiên bản máy ảo).
- Nhấp vào nút SSH để kết nối với Thực thể máy ảo và truy cập vào dòng lệnh của thực thể đó.
- Sau khi bạn truy cập vào VM CLI, hãy thử liệt kê các đối tượng trong Thùng lưu trữ.
gcloud storage ls gs://BUCKET_NAME/
Bạn sẽ nhận được thông báo lỗi sau:
ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
- Chúng ta cần cấp quyền đọc đối tượng cho tài khoản dịch vụ Compute Engine để có thể liệt kê các đối tượng trong Bộ chứa lưu trữ.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
- Một lần nữa, hãy thử liệt kê tệp hello.txt từ CLI của phiên bản VM .
gcloud storage ls gs://BUCKET_NAME/ . . gs://BUCKET_NAME/hello.txt
Giờ đây, chúng ta có thể liệt kê đối tượng mà không vi phạm quyền của VPC Service Controls. Tuy nhiên, còn việc tải tệp xuống thì sao? Hãy thử xem.
gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}
Và chúng ta sẽ nhận được đầu ra sau
Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
Completed files 1/1 | 54.0B/54.0B
7. Dọn dẹp
Mặc dù bạn không phải trả phí riêng khi sử dụng VPC Service Controls nếu không dùng dịch vụ, nhưng bạn nên dọn dẹp chế độ thiết lập đã dùng trong phòng thí nghiệm này. Bạn cũng có thể xoá phiên bản máy ảo và/hoặc dự án trên đám mây để tránh phát sinh phí. Khi bạn xoá dự án trên đám mây, hệ thống sẽ ngừng tính phí cho tất cả tài nguyên được dùng trong dự án đó.
- Để xoá phiên bản VM, hãy chọn hộp đánh dấu ở bên trái tên phiên bản VM, rồi nhấp vào Xoá.

- Để xoá hàng rào ảo, hãy hoàn tất các bước sau:
- Trong bảng điều khiển Cloud, hãy nhấp vào Bảo mật, rồi nhấp vào VPC Service Controls ở phạm vi Tổ chức.
- Trong trang VPC Service Controls, trong hàng của bảng tương ứng với ranh giới mà bạn muốn xoá, hãy nhấp vào "Biểu tượng xoá"
- Để xoá Cấp truy cập, hãy hoàn tất các bước sau:
- Trong bảng điều khiển Google Cloud, hãy mở trang Access Context Manager (Trình quản lý bối cảnh truy cập) ở phạm vi Thư mục.
- Trong lưới, ở hàng chứa cấp độ truy cập mà bạn muốn xoá, hãy nhấp vào "Biểu tượng xoá", rồi nhấp vào Xoá.
- Để xoá đối tượng Storage và Bucket, hãy hoàn tất các bước sau:
- Trong bảng điều khiển Cloud, hãy mở trang Thùng chứa Cloud Storage .
- Chọn hộp đánh dấu bên cạnh nhóm mà bạn đã tạo.
- Nhấp vào Xóa.
- Trong cửa sổ mở ra, hãy xác nhận rằng bạn muốn xoá nhóm.
- Nhấp vào Xóa.
- Để tắt Dự án, hãy hoàn tất các bước sau:
- Trong bảng điều khiển Cloud, hãy chuyển đến trang IAM & Admin Settings (Chế độ cài đặt IAM và quản trị) của dự án mà bạn muốn xoá.
- Trên trang IAM & Admin Settings (IAM và chế độ cài đặt quản trị), hãy nhấp vào Shutdown (Tắt).
- Nhập mã dự án rồi nhấp vào Tắt dù sao đi nữa.
8. Xin chúc mừng!
Trong lớp học lập trình này, bạn đã cập nhật, thực thi và khắc phục sự cố cho một ranh giới Chạy thử của VPC Service Controls.
Tìm hiểu thêm
- Xem tài liệu về VPC Service Controls.
- Xem tài liệu về Access Context Manager.
- Hãy xem tài liệu về trình khắc phục sự cố VPC-SC.
- Hãy xem Tài liệu về các quy tắc truy cập và thoát.
- Hãy xem tài liệu về Chạy thử.
- Hãy xem tài liệu về Cloud Storage.
Giấy phép
Tác phẩm này được cấp phép theo giấy phép Ghi công theo Creative Commons 2.0 Chung.