Hướng dẫn cơ bản về dịch vụ VPC Service Controls II – Khắc phục lỗi vi phạm thoát ra

1. Giới thiệu

Chế độ kiểm soát dịch vụ VPC (VPC-SC) là một biện pháp 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 hạn chế quyền truy cập vào các IP được cấp phép, ngữ cảnh máy khách và các thông số thiết bị trong khi kết nối với 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ả tổn thất do cố ý và vô ý. Như chúng ta đã thấy trong Hướng dẫn cơ bản về các biện pháp kiểm soát dịch vụ VPC (VPC), bạn có thể sử dụng VPC Service Controls để tạo những phạm vi bảo vệ tài nguyên và dữ liệu của các 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 thông tin cơ bản về dịch vụ VPC Service Controls
  • Cập nhật phạm vi dịch vụ và kiểm thử phạm vi dịch vụ bằng chế độ Chạy thử nghiệm
  • Bảo vệ hai dịch vụ bằng giải pháp VPC Service Controls
  • Khắc phục lỗi vi phạm đầu ra Kiểm soát dịch vụ đám mây riêng ảo (VPC) 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, chúng ta cần những điều kiện tiên quyết sau đây:

dbec101f41102ca2.png

Thiết lập tài nguyên

  1. Thiết lập tài nguyên như mô tả trong phần "Thiết lập tài nguyên" mục Hướng dẫn cơ bản về kiểm soát dịch vụ VPC I
  2. Xác minh rằng bạn có các quyền cần thiết để quản lý Cloud Storage.
  3. 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 Cloud. Tại một trong các môi trường phát triển, hãy thiết lập Giao diện dòng lệnh (CLI) của gcloud:
  • 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 Cloud. Có thể mất vài giây để phiên bắt đầu. Xem hướng dẫn về Cloud Shell để biết thêm thông tin.

a0ceb29950db4eac.png

  • shell cục bộ: để sử dụng một môi trường phát triển cục bộ, hãy cài đặtkhởi động giao diện dòng lệnh (CLI) của gcloud.

Chi phí

Bạn phải bật tính năng thanh toán trong Cloud Console để sử dụng các API/tài nguyên trên Cloud. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh phát sinh việc thanh toán ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạ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.

Tài nguyên duy nhất sẽ phát sinh chi phí là Thực thể máy ảo và Đối tượng Cloud Storage. Bạn có thể xem chi phí ước tính của thực thể máy ảo trong công cụ tính giá. Bạn có thể xem chi phí ước tính của Cloud Storage trong bảng giá này.

3. Tạo bộ chứa và đối tượng lưu trữ

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 bộ chứa 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.

  1. Trong Google Console, hãy chọn ProjectX. Trong dự án này, chúng ta sẽ tạo Bộ chứa lưu trữ và đối tượng.
  2. Hãy đảm bảo rằng bạn đã thiết lập Cloud shell để sử dụng ProjectX bằng cách chạy lệnh sau:
gcloud config set project PROJECT_ID
  1. Trong môi trường phát triển của bạn, hãy chạy lệnh sau:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. Tạo một đối tượng lưu trữ để chúng ta có thể đọc đối tượng đó từ thực thể 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.

  1. Tải đối tượng lên bộ chứa.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
  1. Xác minh rằng đối tượng đã được tải lên bộ chứa 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 được liệt kê trong bảng điều khiển.

4. API Protect Cloud Storage

Trong lớp học lập trình trước, chúng ta đã tạo một phạm vi và API Compute Engine được bảo vệ. Trong lớp học lập trình này, chúng ta sẽ chỉnh sửa phạm vi chế độ chạy thử nghiệm và thêm Cloud Storage. Việc này sẽ giúp chúng tôi xác định tác động của biện pháp bảo vệ theo phạm vi bằng cách cho chúng tôi thấy các lỗi vi phạm của VPC Service Controls trong nhật ký kiểm tra. Tuy nhiên, các tài nguyên sẽ vẫn truy cập được cho đến khi chúng tôi thực thi phạm vi.

  1. 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.
  2. Mở Cloud Shell và cập nhật "SuperProtection" của phạm vi Chạy khô đã tạo trong Lab trước đó:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
  1. Xác minh rằng Cloud Storage API đã được cập nhật bằng cách mô tả phạm vi
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY 

Trong kết quả, 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: {}":

2025ddc01a2e9a81.pngs

5. Xác minh rằng Cloud Storage API đã được bảo vệ

Ở chế độ Chạy thử nghiệm, hãy xác minh rằng ứng dụng "SuperProtection" phạm vi đang cho chúng tôi thấy việc từ chối bằng cách liệt kê đối tượng từ thực thể máy ảo được tạo trong ProjectZ sang ProjectX đang lưu trữ Bộ chứa bộ nhớ

  1. Trong Cloud Console, hãy chuyển đến bộ chọn dự án rồi chọn ProjectZ, sau đó chuyển đến Compute Engine > Phiên bản máy ảo.
  2. Nhấp vào nút SSH để kết nối với Phiên bản máy ảo và truy cập vào dòng lệnh của phiên bản đó.

5ca02149b78c11f9.pngS

  1. Liệt kê tệp hello.txt mà chúng ta đã tải lên trước đó.
gcloud storage ls gs://BUCKET_NAME

Vì API Cloud Storage được bảo vệ ở chế độ 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 của ProjectZ.

  1. Chuyển đến Logs Explorer API (API Trình khám phá nhật ký) trong ProjectZ rồi tìm thông báo lỗi gần đây nhất của dịch vụ 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 kiế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 tôi biết lỗi vi phạm gần đây nhất ở chế độ Chạy thử nghiệm thuộc Cloud Storage. Sau đây là một ví dụ về giao diện của nhật ký và chúng ta có thể xác thực rằng lỗi vi phạm là một đầu ra khi cố gắng liệt kê nội dung trên bộ chứa 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"
  1. Vì đã xác thực rằng lệnh gọi API đến Cloud Storage tạo ra lỗi vi phạm VPC Service Controls, 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 chu vi Chạy thử nghiệm:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. Kết nối với thực thể máy ảo bằng SSH và liệt kê lại bộ chứa lưu trữ để xác minh rằng phạm vi Chạy thử nghiệm đã được thực thi đúng cách.
gcloud storage ls gs://BUCKET_NAME

Chúng tôi sẽ thấy một lỗi vi phạm về Kiểm soát dịch vụ đám mây riêng ảo (VPC) trong VM CLI 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 hoạt động đánh cắp dữ liệu bằng cách sử dụng VPC Service Controls để ngăn đọ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 phạm vi.

6. Khắc phục sự cố từ chối danh sách.

Chúng tôi sẽ khắc phục sự cố từ chối nhận được từ giao diện dòng lệnh (CLI) của thực thể máy ảo. Hãy kiểm tra nhật ký kiểm tra và tìm mã nhận dạng duy nhất của VPC Service Controls.

  1. Chuyển đến bộ chọn dự án rồi chọn ProjectZ.
  2. Tìm mã nhận dạng duy nhất của tuỳ chọn kiểm soát dịch vụ VPC 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ẽ hiển thị 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 mới nhất. Vì lệnh gọi API được thực hiện từ thực thể máy ảo nên tài khoản 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 để trực tiếp lấy nhật ký mong muốn bằng cách dùng bộ lọc sau:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. Nhấp vào tiêu đề VPC Service Controls (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 tôi biết lý do vi phạm trong một giao diện người dùng thân thiện, cũng như liệu đây có phải là lỗi vi phạm lưu lượng truy cập vào hay ra, cùng nhiều thông tin hữu ích khác hay không.

Trong bài tập này, chúng ta sẽ tìm những nội dung 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 cần tạo một quy tắc đầu ra để cho phép tài khoản dịch vụ Compute Engine truy cập vào bộ chứa 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 phạm vi, vì vậy, chúng ta cần cho phép giao tiếp VPC với các dịch vụ và chia sẻ dữ liệu giữa các phạm vi dịch vụ.

  1. Kích hoạt Cloud Shell và tạo tệp .yaml có quy tắc xuất dữ liệu 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
  1. Cập nhật chính sách lưu lượng vào để bảo vệ ProjectZ.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

Bây giờ, chúng ta có thể thử truy cập lại vào bộ chứa từ thực thể máy ảo.

  1. Trong Cloud Console, hãy chuyển đến bộ chọn dự án rồi chọn ProjectZ, sau đó chuyển đến Compute Engine > Phiên bản máy ảo.
  2. Nhấp vào nút SSH để kết nối với Phiên bản máy ảo và truy cập vào dòng lệnh của phiên bản đó.
  3. Sau khi bạn đã vào Giao diện dòng lệnh (CLI) của máy ảo, hãy thử liệt kê các đối tượng trong Bộ chứa 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).
  1. 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
  1. Một lần nữa, hãy thử liệt kê tệp hello.txt trong CLI của thực thể máy ảo .
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

Bây giờ, chúng ta có thể liệt kê đối tượng mà không vi phạm quyền Kiểm soát dịch vụ VPC, nhưng còn tải tệp xuống thì sao? Hãy thử xem sao.

gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}

Và chúng ta sẽ nhận được kết quả 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 cho việc sử dụng dịch vụ VPC Service Controls khi không sử dụng dịch vụ này, nhưng tốt nhất là bạn nên dọn dẹp chế độ thiết lập được sử 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 Cloud để tránh phát sinh phí. Khi bạn xoá dự án Cloud của mình, hệ thống sẽ ngừng tính phí cho tất cả tài nguyên dùng trong dự án đó.

  1. Để xoá phiên bản máy ảo của bạn, hãy đánh dấu vào hộp ở bên trái tên phiên bản máy ảo đó, rồi nhấp vào Xoá.

da0abf0894fe03cd.png

  1. Để xoá phạm vi, hãy hoàn tất các bước sau:
  • Trong bảng điều khiển Google Cloud, hãy nhấp vào Bảo mật, rồi nhấp vào Chế độ kiểm soát dịch vụ VPC ở phạm vi Tổ chức.
  • Trên trang VPC Service Controls, trong hàng của bảng tương ứng với phạm vi mà bạn muốn xoá, hãy nhấp vào "Xoá biểu tượng"
  1. Để xoá Cấp truy cập, hãy hoàn tất các bước sau:
  • Trong bảng điều khiển của Google Cloud, hãy mở trang Access Context Manager ở phạm vi Thư mục.
  • Trong lưới, tại hàng tương ứng với cấp truy cập mà bạn muốn xoá, hãy nhấp vào "Xoá Biểu tượng", sau đó nhấp vào Xoá.
  1. Để xoá đối tượng Storage và Bộ chứa, hãy hoàn tất các bước sau:
  • Trong bảng điều khiển Google Cloud, hãy mở trang bộ chứa trong Cloud Storage .
  • Chọn hộp đánh dấu bên cạnh bộ chứa mà bạn đã tạo.
  • Nhấp vào Xóa.
  • Trong cửa sổ mở ra, xác nhận rằng bạn muốn xoá bộ chứa.
  • Nhấp vào Xóa.
  1. Để tắt Dự án của bạn, hãy hoàn tất các bước sau:
  • Trong bảng điều khiển Google Cloud, hãy chuyển đến IAM & Trang Cài đặt quản trị của dự án mà bạn muốn xoá.
  • Trên IAM và trang Cài đặt quản trị, nhấp vào Tắt.
  • Nhập mã dự án rồi nhấp vào Vẫn tắt.

8. Xin chúc mừng!

Trong lớp học lập trình này, bạn đã cập nhật phạm vi chạy thử nghiệm của VPC Service Controls, thực thi và khắc phục sự cố.

Tìm hiểu thêm

Giấy phép

Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.