VPC Service Controls – Bảo vệ Dịch vụ chuyển dữ liệu của BigQuery

1. Giới thiệu

Trong lớp học này, chúng ta sẽ tìm hiểu cách bảo vệ Dịch vụ chuyển dữ liệu của BigQuery bằng VPC Service Controls (Chế độ kiểm soát dịch vụ VPC) trong khi chuyển dữ liệu từ Cloud Storage sang một tập dữ liệu BigQuery. Sau đó, chúng ta sẽ bảo vệ Cloud Storage và lặp lại quy trình chuyển dữ liệu từ Cloud Storage sang BigQuery. Việc bảo vệ Cloud Storage gây ra lỗi vi phạm VPC Service Controls. Bạn cần khắc phục lỗi này để quá trình chuyển diễn ra thành công. Cuối cùng, chúng ta cũng bảo vệ BigQuery rồi cố gắng sao chép tập dữ liệu giữa các dự án. Điều này cũng gây ra lỗi vi phạm cần được khắc phục.

Trong suốt lớp học này, chúng ta sẽ xem cách khắc phục cả lỗi vi phạm về lưu lượng truy cập vào và lưu lượng truy cập ra bằng cách sử dụng quy tắc về lưu lượng truy cập vào và lưu lượng truy cập ra tương ứng. Chúng tôi cũng sẽ sử dụng cấp truy cập để khắc phục lỗi vi phạm về quyền truy cập vào Dịch vụ chuyển dữ liệu của BigQuery. Mục tiêu của lớp học lập trình này là:

  • Tìm hiểu cách khắc phục các lỗi vi phạm về truy cập và thoát bằng cách sử dụng các quy tắc truy cập và thoát tương ứng trên các dịch vụ khác nhau, đáng chú ý là Cloud Storage, BigQuery và Dịch vụ chuyển dữ liệu của BigQuery.
  • Tìm hiểu lý do dẫn đến một lỗi vi phạm cụ thể.

2. Yêu cầu và cách thiết lập tài nguyên

Trước khi bắt đầu

Trong lớp học lập trình này, chúng tôi giả định rằng bạn đã biết:

Thiết lập

Chúng ta thiết kế chế độ thiết lập ban đầu như sau:

Sơ đồ thiết lập ban đầu của lớp học lập trình

Tạo chính sách có phạm vi và phạm vi dịch vụ thông thường

Trong lớp học lập trình này, chúng ta sẽ sử dụng một phạm vi dịch vụ thông thường để bảo vệ project-2.

Trong chu vi perimeter-2, hãy hạn chế BigQuery Data Transfer API.

Cấu hình VPC SC bảo vệ Dịch vụ chuyển dữ liệu.

Tạo bộ chứa Cloud Storage và tập dữ liệu BigQuery

Đối với mục đích của lớp học lập trình này, bạn có thể sử dụng bất kỳ tệp csv nào, bất kể nội dung. Hạn chế chính liên quan đến yêu cầu đặt cùng vị trí, yêu cầu này thực thi rằng:

  • Nếu tập dữ liệu BigQuery của bạn nằm ở nhiều khu vực, thì bộ chứa Cloud Storage chứa dữ liệu mà bạn đang chuyển phải nằm ở cùng một khu vực đa năng hoặc ở một vị trí nằm trong khu vực đa năng đó
  • Nếu tập dữ liệu của bạn nằm ở một khu vực, thì bộ chứa Cloud Storage của bạn phải nằm ở cùng khu vực đó.

Từ giờ trở đi, trong lớp học lập trình này, chúng ta sẽ đảm bảo rằng cả bộ chứa Cloud Storage và tập dữ liệu BigQuery đều ở cùng một khu vực hoặc nhiều khu vực.

Tạo một bộ chứa Cloud Storage mới trong dự án project-1

Để tạo một bộ chứa mới trên Google Cloud Storage, hãy làm theo các bước được ghi nhận để tạo một bộ chứa mới.

  • Đối với tên của bộ chứa, hãy nhập một tên đáp ứng các yêu cầu về tên bộ chứa. Trong lớp học lập trình này, chúng ta sẽ gọi bộ chứa là codelab-bqtransfer-bucket.
  • Đối với vị trí lưu trữ dữ liệu, vị trí bộ chứa, hãy chọn Loại vị tríVị trí nơi dữ liệu bộ chứa sẽ được lưu trữ vĩnh viễn. Trong lớp học lập trình này, chúng ta sẽ sử dụng us (nhiều khu vực ở Hoa Kỳ).

Cấu hình tạo Cloud Storage.

Tạo tệp CSV

Trên máy cục bộ hoặc sử dụng Cloud Shell, chúng ta có thể sử dụng lệnh echo để tạo tệp csv mẫu, codelab-test-file.csv, bằng các lệnh sau:

echo "name,age" > codelab-test-file.csv; \
echo "Alice,10" >> codelab-test-file.csv; \
echo "Bob,20" >> codelab-test-file.csv; \
echo "Carol,30" >> codelab-test-file.csv; \
echo "Dan,40" >> codelab-test-file.csv; \
echo "Eve,50" >> codelab-test-file.csv; \
echo "Frank,60" >> codelab-test-file.csv; \
echo "Grace,70" >> codelab-test-file.csv; \
echo "Heidi,80" >> codelab-test-file.csv;

Tải tệp CSV lên bộ chứa Cloud Storage

Sau khi tạo tệp csv, hãy chạy lệnh sau để tải đối tượng tệp lên bộ chứa đã tạo:

gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

Chạy lệnh cp để tải tệp csv lên Cloud Storage.

Bạn có thể xác minh rằng tệp đã được tải lên bộ chứa đã tạo bằng cách liệt kê các đối tượng trong bộ chứa hoặc chạy lệnh sau:

gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**

Tạo tập dữ liệu và bảng BigQuery trong project-2

  1. Tạo một tập dữ liệu BigQuery trong dự án project-2 theo các bước sau.
    1. Đối với Mã nhận dạng tập dữ liệu, hãy nhập tên tập dữ liệu riêng biệt. Trong lớp học lập trình này, chúng ta sử dụng: codelab_bqtransfer_dataset.
    2. Đối với Loại vị trí, hãy chọn một vị trí địa lý cho tập dữ liệu. Đối với lớp học lập trình này, chúng ta sử dụng cùng một vị trí với bộ chứa trên Cloud Storage: Hoa Kỳ (nhiều khu vực ở Hoa Kỳ). Tạo tập dữ liệu BigQuery.
  2. Tạo một bảng BigQuery trong tập dữ liệu codelab_bqtransfer_dataset đã tạo bằng cách làm theo các bước này.
    1. Trong mục Nguồn, hãy chọn Bảng trống trong danh sách Tạo bảng từ.
    2. Trong trường Bảng, hãy nhập tên của bảng mà bạn muốn tạo. Đối với lớp học lập trình này, chúng ta sử dụng tên: codelab-bqtransfer-table.
    3. Xác minh rằng trường Loại bảng được đặt thành Bảng gốc
    4. Trong phần Giản đồ, hãy nhập định nghĩa giản đồ. Bạn có thể nhập thông tin giản đồ bằng cách nhấp vào Chỉnh sửa dưới dạng văn bản rồi nhập giản đồ sau đây, tuân theo định dạng của tệp csv đã tạo.
    [{
    "name": "name",
    "type": "STRING",
    "mode": "NULLABLE",
    "description": "The name"
    },
    {
    "name": "age",
    "type": "INTEGER",
    "mode": "NULLABLE",
    "description": "The age"
    }]
    

Chi phí

Bạn cần bật tính năng thanh toán trong các dự án project-2project-1 để sử dụng tài nguyên/API trên Google Cloud. Bạn nên tắt các tài nguyên đã sử dụng để tránh bị tính phí sau khi kết thúc lớp học lập trình này.

Các tài nguyên phát sinh chi phí là BigQuery và Cloud Storage. Bạn có thể xem chi phí ước tính trong công cụ tính giá BigQuerycông cụ tính giá Bộ nhớ trên đám mây.

3. Định cấu hình tính năng Chuyển dữ liệu từ đối tượng Cloud Storage sang bảng BigQuery

Bây giờ, chúng ta sẽ thử tạo một Dịch vụ chuyển dữ liệu (trong project-2) để chuyển từ Cloud Storage (ở project-1) sang BigQuery (ở project-2), đồng thời có VPC Service Controls bảo vệ Dịch vụ chuyển dữ liệu của BigQuery trong project-2. Việc chỉ bảo vệ Dịch vụ chuyển dữ liệu của BigQuery (mà không bảo vệ cả BigQuery và Cloud Storage) sẽ hạn chế các nguyên tắc chỉ tạo và quản lý các hoạt động chuyển dữ liệu (chẳng hạn như bắt đầu chuyển dữ liệu theo cách thủ công).

Thiết lập tính năng chuyển dữ liệu từ Cloud Storage

Để tạo một lượt chuyển dữ liệu, hãy làm theo các bước sau:

  1. Chuyển đến trang BigQuery trong Google Cloud Console của project-2.
  2. Nhấp vào Chuyển dữ liệu.

Vi phạm VPC SC trên trang Dịch vụ chuyển dữ liệu.

Điều tra lỗi vi phạm khi truy cập vào trang Chuyển dữ liệu

Trong bảng điều khiển Google Cloud, chúng ta có thể thấy mã nhận dạng duy nhất của VPC Service Controls. Sử dụng cùng một giá trị nhận dạng để lọc nhật ký và xác định thông tin chi tiết về lỗi vi phạm (thay thế OBSERVED_VPCSC_DENIAL_UNIQUE_ID bằng mã nhận dạng từ chối đã quan sát được):

protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"

Lỗi vi phạm được ghi nhận là NO_MATCHING_ACCESS_LEVEL, đây là lỗi vi phạm xâm nhập với thông tin chi tiết tương tự như sau:

ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
}]
violationReason: "NO_MATCHING_ACCESS_LEVEL"
callerIp: "USER_PUBLIC_IP_ADDRESS"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.ListTransferConfigs"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}

Việc truy cập vào trang Chuyển dữ liệu sẽ cố gắng liệt kê mọi lượt chuyển dữ liệu đã định cấu hình; do đó, hành vi này vi phạm phương thức ListTransferConfigs.

Khắc phục lỗi vi phạm đối với dịch vụ bigquerydatatransfer.googleapis.com

Bạn có thể sử dụng cấp truy cập hoặc quy tắc truy cập để khắc phục lỗi vi phạm truy cập. Trong lớp học lập trình này, hãy sử dụng quy tắc truy cập được định cấu hình bằng danh tính người dùng bị từ chối. Quy tắc này cho phép truy cập vào dịch vụ bigquerydatatransfer.googleapis.com và tất cả phương thức.

Quy tắc nhập để cho phép các phương thức Chuyển dữ liệu.

Sau khi áp dụng quy tắc truy cập, bạn sẽ truy cập được vào trang Chuyển dữ liệu mà không gặp vấn đề gì.

Tiếp tục thiết lập tính năng chuyển dữ liệu từ Cloud Storage

Từ các bước trước, khi đang ở trang Chuyển dữ liệu (sau khi nhấp vào Chuyển dữ liệu), hãy tiếp tục với các bước sau:

  1. Nhấp vào + Tạo lượt chuyển.
  2. Trong phần Loại nguồn, hãy chọn Google Cloud Storage cho Nguồn.
  3. Trong phần Transfer config name (Tên cấu hình mục chuyển dữ liệu), đối với Display name (Tên hiển thị), hãy nhập tên cho mục chuyển dữ liệu, chẳng hạn như Codelab Transfer.
  4. Trong phần Tuỳ chọn lịch biểu:
    1. Chọn Tần suất lặp lại, chẳng hạn như 15 phút.
    2. Hãy nhớ chọn Bắt đầu ngay; nếu không, quá trình chuyển dữ liệu sẽ chỉ bắt đầu sau Tần suất lặp lại đã định cấu hình
  5. Trong phần Cài đặt đích đến, đối với Tập dữ liệu đích đến, hãy chọn tập dữ liệu mà bạn đã tạo để lưu trữ dữ liệu: codelab_bqtransfer_dataset
  6. Trong mục Thông tin chi tiết về nguồn dữ liệu
    1. Đối với Bảng đích đến, hãy nhập tên của bảng đích đến. Bảng đích phải tuân theo quy tắc đặt tên bảng. Trong lớp học lập trình này, chúng ta sẽ sử dụng bảng mà chúng ta đã tạo trước đó: codelab-bqtransfer-table
    2. Đối với URI Cloud Storage, hãy nhập URI Cloud Storage. Đối với lớp học lập trình này, chúng ta sử dụng bộ chứa và tệp đã tạo: codelab-bqtransfer-bucket/codelab-test-file.csv
    3. Đối với Write preference (Ghi tuỳ chọn ưu tiên), hãy giữ APPEND (hoặc chọn MIRROR).
    4. ĐỪNG chọn xoá tệp sau khi chuyển (Vì chúng tôi sẽ sử dụng lại cùng một tệp nhiều lần. Tuy nhiên, bạn có thể sử dụng nhiều tệp và xoá tệp nguồn sau khi chuyển)
    5. Đối với Định dạng tệp, hãy chọn CSV
    6. Trong phần Transfer Options (Tuỳ chọn chuyển), trong mục CSV, hãy nhập dấu phẩy(",") làm Field delimiter (Dấu phân cách trường).
  7. Trong trình đơn Tài khoản dịch vụ, hãy chọn một tài khoản dịch vụ trong số các tài khoản dịch vụ được liên kết với dự án Google Cloud của bạn
    1. Tài khoản dịch vụ đã chọn phải có các quyền bắt buộc cho cả Cloud Storage trên dự án lưu trữ bộ chứa bộ nhớ; project-1 trong lớp học lập trình này.
    2. Trong lớp học lập trình này, chúng ta sẽ sử dụng một tài khoản dịch vụ được tạo trong project-2 dưới dạng codelab-sa@project-2.iam.gserviceaccount.com.
  8. Nhấp vào Lưu.

Vì chúng ta đã chọn Bắt đầu ngay làm tuỳ chọn lịch biểu, nên ngay khi bạn chọn Lưu, quá trình chuyển đầu tiên sẽ bắt đầu.

Xác minh trạng thái dịch vụ chuyển dữ liệu

Cách xác minh trạng thái của quá trình chuyển dữ liệu đã định cấu hình:

Công việc của Dịch vụ chuyển dữ liệu.

Nhấp vào Codelab Transfer (trong phần Tên hiển thị) để xem danh sách tất cả các lần chạy đã thực hiện cho đến thời điểm hiện tại.

Thông tin chi tiết về các lần chạy Dịch vụ chuyển dữ liệu.

Quá trình chuyển dữ liệu sẽ chạy thành công, không có lỗi vi phạm VPC Service Controls đối với cả quá trình chuyển dữ liệu được kích hoạt theo cách thủ công và theo lịch. Xin lưu ý rằng chỉ việc chuyển được kích hoạt theo cách thủ công mới cần có quy tắc truy cập để cho phép truy cập vào đối tượng chính, tức là bắt đầu quá trình chuyển theo cách thủ công.

4. Hạn chế về địa chỉ IP đối với các lượt chuyển dữ liệu được kích hoạt theo cách thủ công

Các quy tắc truy cập hiện được định cấu hình cho phép danh tính đã định cấu hình kích hoạt quá trình chuyển dữ liệu theo cách thủ công từ bất kỳ địa chỉ IP nào.

Khi sử dụng cấp truy cập, VPC Service Controls có thể giới hạn quyền truy cập được cho phép theo thuộc tính yêu cầu API cụ thể, đáng chú ý là:

  • Mạng con IP: kiểm tra xem yêu cầu có xuất phát từ một địa chỉ IP cụ thể hay không.
  • Khu vực: kiểm tra xem yêu cầu có đến từ một khu vực cụ thể hay không, khu vực này được xác định bằng vị trí địa lý của địa chỉ IP.
  • Chủ sở hữu: kiểm tra xem yêu cầu có xuất phát từ một tài khoản cụ thể hay không.
  • Chính sách về thiết bị: kiểm tra xem yêu cầu có đến từ một thiết bị đáp ứng các yêu cầu cụ thể hay không.

Để thực thi việc xác minh các thuộc tính này cùng với quy tắc truy cập đã định cấu hình, chúng ta phải tạo một cấp truy cập cho phép các thuộc tính mong muốn, sau đó thêm cấp truy cập đã tạo làm nguồn trong quy tắc truy cập.

Quyền truy cập được bảo vệ bằng VPC SC theo địa chỉ IP của người dùng Sơ đồ này minh hoạ quyền truy cập do hai thực thể chính (user@example.comuser2@example.com) khởi tạo trong 3 trường hợp, minh hoạ cách VPC Service Controls đánh giá các nguồn (cấp truy cập vào) và thuộc tính nhận dạng dưới dạng điều kiện AND, trong đó cả hai đều phải khớp.

  1. Người dùng user@example.com được phép truy cập khi cố gắng truy cập từ một địa chỉ IP được cấp phép theo cấp truy cập, vì địa chỉ IP và tài khoản người dùng của họ khớp với cấu hình trong quy tắc truy cập.
  2. Người dùng user@example.com bị chặn truy cập khi địa chỉ IP của họ không khớp với địa chỉ IP được phép, mặc dù tài khoản của họ là tài khoản được định cấu hình trong quy tắc truy cập.
  3. Người dùng user2@example.com bị chặn quyền truy cập mặc dù đã cố gắng truy cập từ một địa chỉ IP được phép, vì tài khoản của họ không được quy tắc truy cập cho phép.

Tạo cấp truy cập

Cách tạo cấp truy cập hạn chế quyền truy cập theo địa chỉ IP:

  1. Mở trang Access Context Manager (Trình quản lý ngữ cảnh truy cập) trong Google Cloud Console.
    • Nếu được nhắc, hãy chọn thư mục codelab-folder.
  2. Ở đầu trang Access Context Manager (Trình quản lý ngữ cảnh truy cập), hãy nhấp vào CREATE ACCESS LEVEL (TẠO MỨC TRUY CẬP).
  3. Trong ngăn New Access Level (Cấp truy cập mới), hãy đặt Title (Tiêu đề) cho cấp truy cập mới. Trong lớp học lập trình này, chúng ta sẽ gọi lớp này là project_2_al.
  4. Trong phần Điều kiện, hãy nhấp vào biểu tượng + ở phía trước Mạng con IP.
  5. Trong hộp Mạng con IP, hãy chọn IP công khai

Thêm cấp truy cập trong quy tắc truy cập

Trong quy tắc truy cập, cấp truy cập được tham chiếu trong trường sources. Đây là trường bắt buộc như được ghi nhận trong tài liệu tham khảo về quy tắc truy cập. Để cho phép truy cập vào tài nguyên, VPC Service Controls đánh giá các thuộc tính sourcesidentityType dưới dạng điều kiện AND. Quy tắc truy cập sử dụng danh tính của thực thể chính kích hoạt quá trình chuyển dữ liệu theo cách thủ công, chứ không phải tài khoản dịch vụ được chỉ định trong cấu hình chuyển dữ liệu.

Quy tắc truy cập được định cấu hình bằng cấp truy cập.

Chạy lại quá trình chuyển bằng các cấu hình giới hạn quyền truy cập theo địa chỉ IP

Để đánh giá hiệu quả của các cấu hình đã áp dụng, hãy kích hoạt lại quá trình chuyển bằng các trường hợp sau:

  • sử dụng địa chỉ IP trong phạm vi được phép ở cấp truy cập mà quy tắc truy cập tham chiếu.
  • sử dụng địa chỉ IP không được cấu hình cho phép

Quyền truy cập từ địa chỉ IP được phép sẽ thành công, trong khi quyền truy cập từ địa chỉ IP không được phép sẽ không thành công và dẫn đến lỗi vi phạm VPC Service Controls.

Một cách dễ dàng để kiểm thử bằng địa chỉ IP khác là cho phép chỉ định địa chỉ IP trong khi sử dụng Google Cloud Console, sau đó kiểm thử trong khi sử dụng Cloud Shell.

Trong Cloud Shell, hãy chạy lệnh sau để kích hoạt quá trình chuyển theo cách thủ công bằng cách thay thế cả RUN_TIME và RESOURCE_NAME:

bq mk \
  --transfer_run \
  --run_time='RUN_TIME' \
  RESOURCE_NAME

Ví dụ: lệnh mẫu sau đây sẽ chạy ngay lập tức cho cấu hình 12345678-90ab-cdef-ghij-klmnopqrstuv chuyển trong dự án 1234567890.

NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ");
bq mk \
  --transfer_run \
  --run_time=$NOW \
  projects/1234567890/locations/us/transferConfigs/12345678-90ab-cdef-ghij-klmnopqrstuv

Kết quả quan sát cho thấy một lỗi vi phạm VPC Service Controls, như dự kiến, vì địa chỉ IP không được phép.

Vi phạm VPC SC từ địa chỉ IP không được phép.

Lỗi vi phạm được ghi nhận là trên phương thức DataTransferService.StartManualTransferRuns.

ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
targetResourcePermissions: [0: "vpcsc.permissions.unavailable"]
}]
violationReason: "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.StartManualTransferRuns"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
severity: "ERROR"

5. Bắt đầu chuyển dữ liệu trong khi bảo vệ Dịch vụ bộ nhớ trên đám mây

Vì chúng ta đang thực hiện việc chuyển dữ liệu từ Cloud Storage sang BigQuery, hãy thêm Cloud Storage vào danh sách các dịch vụ được bảo vệ bằng VPC Service Controls và xem liệu quá trình chuyển dữ liệu có thành công hay không.

Trong cấu hình perimeter-2, hãy thêm Cloud Storage API làm một trong các Dịch vụ bị hạn chế, cùng với BigQuery Data Transfer API.

Cấu hình VPC SC bảo vệ Cloud Storage.

Sau khi bảo mật API Cloud Storage, hãy đợi quá trình chuyển dữ liệu theo lịch tiếp theo hoặc kích hoạt quá trình chuyển theo cách thủ công bằng các bước sau:

  1. Chuyển đến trang BigQuery trong bảng điều khiển Google Cloud.
  2. Nhấp vào Chuyển dữ liệu.
  3. Chọn mục chuyển của bạn trong danh sách: trong lớp học lập trình này, chúng ta sẽ sử dụng mục chuyển Codelab Transfer (Chuyển lớp học lập trình)
  4. Nhấp vào Chạy quá trình chuyển ngay
  5. Nhấp vào OK.

Một lượt chuyển khác sẽ được bắt đầu. Bạn có thể cần phải làm mới trang để xem thông tin đó. Lần này, quá trình chuyển sẽ không thành công do vi phạm VPC Service Controls.

Vi phạm VPC SC do sao chép tập dữ liệu BigQuery.

Điều tra lỗi vi phạm VPC Service Controls trong Cloud Storage

Lọc nhật ký kiểm tra bằng vpcServiceControlsUniqueIdentifier như trong phần Tóm tắt của quá trình chuyển.

Lỗi vi phạm được ghi nhận là lỗi vi phạm về lưu lượng truy cập ra ngoài RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER với thông tin chi tiết sau:

  • Chủ thể là tài khoản dịch vụ được định cấu hình trong Dịch vụ chuyển dữ liệu (cho dù được kích hoạt theo cách thủ công hay chạy quá trình chuyển dữ liệu theo lịch, chủ thể bị từ chối sẽ giống nhau).
  • Dịch vụ bị ảnh hưởng là Cloud Storage
  • Nguồn của yêu cầu là dự án được định cấu hình Dịch vụ chuyển dữ liệu: project-2
  • Dự án mục tiêu là dự án chứa đối tượng Cloud Storage: project-1
principalEmail: "codelab-sa@project-2.iam.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT2_NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT1_NUMBER]"
targetResourcePermissions: [0: "storage.objects.get"]
}]
labels: {
method: "google.storage.objects.get"
project_id: "project-2"
service: "storage.googleapis.com"
}

Khắc phục lỗi vi phạm về lưu lượng truy cập đầu ra của Cloud Storage

Để khắc phục lỗi vi phạm về lưu lượng truy cập ra ngoài, chúng ta phải sử dụng quy tắc lưu lượng truy cập ra ngoài cho phép lưu lượng truy cập từ tài khoản dịch vụ bị từ chối đến dự án có các đối tượng Cloud Storage.

Quy tắc thoát để cho phép tài khoản dịch vụ của lớp học lập trình.

Sau khi sửa đổi phạm vi dịch vụ perimeter-2, hãy lặp lại quy trình để kích hoạt lại quá trình chuyển. Quá trình chuyển sẽ không hiển thị lỗi.

Thông tin chi tiết về quy trình Chuyển dữ liệu chạy sau khi định cấu hình quy tắc thoát.

6. Sao chép Tập dữ liệu BigQuery từ dự án-2 sang dự án-1

Sau khi xác nhận rằng chúng ta có thể chuyển dữ liệu từ bộ chứa Cloud Storage trong project-1 sang tập dữ liệu BigQuery trong project-2, hãy sao chép tập dữ liệu BigQuery từ project-2 sang project-1; trong khi API BigQuery được bảo vệ bằng VPC Service Controls.

Để tạo và sao chép tập dữ liệu, chúng ta sẽ sử dụng lệnh bq mk. Lệnh này sử dụng công cụ bq.

Tạo tập dữ liệu đích đến trong project-1

Trước khi sao chép tập dữ liệu, bạn phải tạo tập dữ liệu đích trước. Để tạo tập dữ liệu đích, chúng ta có thể chạy lệnh sau đây để tạo một tập dữ liệu có tên copied_dataset trong dự án project-1 với us làm vị trí.

bq mk \
  --dataset \
  --location=us \
  project-1:copied_dataset

Bảo vệ dịch vụ BigQuery trong project-2 bằng VPC Service Controls

Sửa đổi cấu hình của perimeter-2 chu vi và thêm BigQuery API làm dịch vụ được bảo vệ, cùng với các dịch vụ Chuyển dữ liệu BigQueryCloud Storage.

VPC SC được định cấu hình để bảo vệ API Cloud Storage.

Bắt đầu sao chép tập dữ liệu

Để sao chép tập dữ liệu, hãy chạy lệnh bq mk sau đây. Lệnh này sẽ sao chép tập dữ liệu codelab_bqtransfer_dataset trong dự án project-2 vào tập dữ liệu copied_dataset trong project-1 và ghi đè nội dung tập dữ liệu (nếu có).

bq mk \
  --transfer_config \
  --project_id=project-1 \
  --target_dataset=copied_dataset \
  --data_source=cross_region_copy \
  --display_name='Dataset from project-2 to project-1' \
  --params='{
     "source_dataset_id":"codelab_bqtransfer_dataset",
     "source_project_id":"project-2",
     "overwrite_destination_table":"true"
     }'

Lệnh này sẽ chạy thành công; trong khi đó, cấu hình chuyển sẽ được tạo thành công để bắt đầu thao tác sao chép tập dữ liệu. Bạn sẽ không thể sao chép chính tập dữ liệu đó do vi phạm VPC Service Controls.

Để tìm thông tin chi tiết về lỗi vi phạm tương ứng với VPC Service Controls, hãy kiểm tra nhật ký trong project-2 (dự án tập dữ liệu nguồn) bằng truy vấn nhật ký sau. Truy vấn nhật ký lọc nhật ký trên dịch vụ BigQuery và tên tài nguyên của tập dữ liệu đang được sao chép (codelab_bqtransfer_dataset).

resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"

Lỗi vi phạm VPC Service Controls được ghi nhận là lỗi vi phạm về lưu lượng truy cập từ project-2 đến project-1.

egressViolations: [
  0: {
   servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
   source: "projects/[PROJECT-2-NUMBER]"
   sourceType: "Resource"
   targetResource: "projects/[PROJECT-1-NUMBER]"
   targetResourcePermissions: [
     0: "bigquery.transfers.update"
     1: "bigquery.transfers.get"
     2: "bigquery.jobs.create"
     ]
   }
]
method: "bigquery.tables.getData"
service: "bigquery.googleapis.com"

Khắc phục tất cả lỗi vi phạm BigQuery và bắt đầu sao chép tập dữ liệu lại

Để khắc phục lỗi vi phạm về lưu lượng truy cập ra ngoài, chúng ta cần tạo một quy tắc lưu lượng truy cập ra ngoài cho phép nguyên tắc bị từ chối. Đối tượng chính bị từ chối là đối tượng đang chạy lệnh mk.

Quy tắc thoát để cho phép truy cập vào tất cả các phương thức BigQuery.

Sau khi áp dụng quy tắc thoát, trên chu vi perimeter-2, hãy chạy cùng một lệnh để sao chép tập dữ liệu. Lần này, bạn sẽ sao chép thành công tập dữ liệu mà không vi phạm VPC Service Controls.

7. Dọn dẹp

Mặc dù không có khoản phí riêng cho việc sử dụng VPC Service Controls khi không sử dụng dịch vụ, nhưng tốt nhất bạn nên dọn dẹp chế độ thiết lập được sử dụng trong lớp học lập trình này. Bạn cũng có thể xoá thực thể máy ảo và/hoặc dự án trên Google Cloud để tránh bị tính phí. Việc xoá dự án trên Google Cloud sẽ dừng tính phí cho tất cả tài nguyên được sử dụng trong dự án đó.

  • Để xoá bộ chứa trên Cloud Storage, hãy hoàn tất các bước sau:
    • Trong Google Cloud Console, hãy chuyển đến trang Bộ chứa Google Cloud Storage.
    • Chọn hộp đánh dấu của bộ chứa cần xoá, rồi nhấp vào Xoá.
    • Trong cửa sổ lớp phủ xuất hiện, hãy xác nhận rằng bạn muốn xoá bộ chứa và nội dung của bộ chứa đó. Xoá bộ chứa Cloud Storage.
  • Để xoá tập dữ liệu BigQuery, hãy hoàn tất các bước sau:
    • Trong Google Cloud Console, hãy chuyển đến trang BigQuery.
    • Trong ngăn Explorer (Trình khám phá), hãy mở rộng dự án rồi chọn một tập dữ liệu.
    • Mở rộng trình đơn ba dấu chấm rồi nhấp vào Xoá.
    • Trong hộp thoại Xoá tập dữ liệu, hãy nhập delete vào trường rồi nhấp vào Xoá. Xoá tập dữ liệu BigQuery.
  • Để xoá phạm vi dịch vụ, hãy hoàn tất các bước sau:
    • Trong bảng điều khiển Google Cloud, hãy chọn Bảo mật, rồi chọn VPC Service Controls ở cấp độ mà chính sách truy cập được xác định phạm vi, trong trường hợp này là ở cấp thư mục.
    • Trên trang VPC Service Controls (Biện pháp kiểm soát dịch vụ VPC), trong hàng bảng tương ứng với chu vi mà bạn muốn xoá, hãy chọn Delete Icon.
  • Để xoá Cấp truy cập, hãy hoàn tất các bước sau:
    • trong Google Cloud Console, hãy mở trang Access Context Manager (Trình quản lý ngữ cảnh truy cập) ở phạm vi Thư mục.
    • Trong lưới, hãy xác định hàng của cấp truy cập mà bạn muốn xoá, chọn trình đơn ba dấu chấm, rồi chọn Xoá.
  • Để tắt các dự án, hãy hoàn tất các bước sau:
    • Trong Google Cloud Console, hãy chuyển đến trang IAM & Admin Settings (Quản lý danh tính và quyền truy cập và Cài đặt quản trị) của dự án mà bạn muốn xoá.
    • Trên trang IAM & Admin Settings (Cài đặt quản trị và IAM), hãy chọn Shutdown (Tắt).
    • Nhập mã dự án rồi chọn Shutdown anyway (Tắt máy).

8. Xin chúc mừng!

Trong lớp học lập trình này, bạn đã tạo, thực thi và khắc phục sự cố liên quan đến ranh giới VPC Service Controls.

Tìm hiểu thêm

Bạn cũng có thể khám phá các trường hợp sau:

  • Thêm project-1 vào một phạm vi khác cũng bảo vệ BigQuery, Dịch vụ chuyển dữ liệu của BigQuery và Cloud Storage.
  • Chuyển dữ liệu sang BigQuery từ các nguồn được hỗ trợ khác.
  • Hạn chế quyền truy cập của người dùng theo các thuộc tính khác, chẳng hạn như chính sách về vị trí hoặc thiết bị.

Giấy phép

Tác phẩm này được cấp phép theo Giấy phép chung Ghi công theo Creative Commons 2.0.