1. Giới thiệu
Trong phòng thí nghiệm 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 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 để chuyển dữ liệu thành công. Cuối cùng, chúng ta cũng bảo vệ BigQuery rồi tìm cách sao chép tập dữ liệu giữa các dự án. Điều này cũng gây ra một lỗi vi phạm cần được khắc phục.
Trong suốt phòng thí nghiệm này, chúng ta sẽ xem cách khắc phục cả lỗi vi phạm đầu vào và đầu ra bằng cách sử dụng lần lượt các quy tắc đầu vào và đầu ra. Chúng tôi cũng sẽ sử dụng cấp truy cập để khắc phục lỗi vi phạm khi 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 quy tắc nhập và xuất dữ liệu bằng cách sử dụng lần lượt các quy tắc nhập và xuất dữ liệu trên nhiều dịch vụ, đặc biệt là Cloud Storage, BigQuery và Dịch vụ chuyển dữ liệu của BigQuery.
- Tìm hiểu lý do xảy ra một lỗi vi phạm cụ thể.
2. Thiết lập và yêu cầu về 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:
- Cách tạo thư mục
- Cách tạo dự án trong một thư mục hoặc di chuyển dự án hiện có vào một thư mục
- Cách tạo chính sách truy cập có phạm vi
- Cách tạo và định cấu hình một phạm vi dịch vụ trên bảng điều khiển Cloud
- Cách tìm nhật ký vi phạm trong nhật ký kiểm tra
Thiết lập
Thiết lập ban đầu của chúng tôi được thiết kế như sau:
- Một tổ chức trên Google Cloud.
- Một thư mục trong Tổ chức. Trong lớp học lập trình này, chúng ta sẽ gọi nó là
codelab-folder. - Hai dự án Google Cloud trong thư mục
codelab-folder. Trong lớp học lập trình này, chúng ta gọi các dự án làproject-1vàproject-2.- Nếu bạn chưa tạo thư mục và dự án, trong bảng điều khiển Cloud, hãy tạo một thư mục trong Tổ chức và tạo hai dự án mới.
- Các quyền cần thiết: Vai trò IAM để quản lý thư mục, Vai trò IAM để quản lý dự án, Vai trò IAM cần thiết để định cấu hình VPC Service Controls, Vai trò IAM để quản lý BigQuery và Vai trò IAM để quản lý Cloud Storage.
- Tài khoản thanh toán cho cả dự án
project-1vàproject-2.
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 chu vi dịch vụ thông thường để bảo vệ project-2.
- Tạo chính sách truy cập có phạm vi, được đặt phạm vi ở cấp thư mục
codelab-folder. Trong lớp học lập trình này, chúng ta giả định chính sách truy cập đã tạo có mã nhận dạng là987654321. - Tạo một chu vi thông thường, chúng ta gọi chu vi đó là
perimeter-2và thêm dự ánproject-2.
Trong phạm vi perimeter-2, hãy hạn chế BigQuery Data Transfer API.

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 chỉ cần có một tệp csv bất kỳ, bất kể nội dung của tệp. Hạn chế chính liên quan đến yêu cầu về việc cùng vị trí, theo đó:
- Nếu tập dữ liệu BigQuery của bạn nằm ở một khu vực có nhiều vùng, 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 có nhiều vùng hoặc ở một vị trí nằm trong khu vực có nhiều vù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 phải nằm ở cùng khu vực đó.
Do đó, 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 nằm trong 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 Cloud Storage mới, hãy làm theo các bước được ghi lại để tạo một bộ chứa mới.
- Đối với tên của vùng chứa, hãy nhập một tên đáp ứng các yêu cầu về tên vùng chứa. Trong lớp học lập trình này, chúng ta sẽ gọi nhóm này là
codelab-bqtransfer-bucket. - Đối với nơi lưu trữ dữ liệu, vị trí của bộ chứa, hãy chọn một Loại vị trí và Vị trí nơi dữ liệu của 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ỳ).

Tạo tệp CSV
Từ máy cục bộ hoặc bằng cách sử dụng Cloud Shell, chúng ta có thể dùng lệnh echo để tạo một tệp csv mẫu, codelab-test-file.csv, bằng cách dù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 nhóm đã tạo:
gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

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
- Tạo một tập dữ liệu BigQuery trong dự án
project-2theo các bước này.- Đối với Mã tập dữ liệu, hãy nhập một 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ẽ sử dụng:
codelab_bqtransfer_dataset. - Đối với Loại vị trí, hãy chọn một vị trí địa lý cho tập dữ liệu. Trong lớp học lập trình này, chúng ta sẽ sử dụng cùng một vị trí với bộ chứa Cloud Storage: Hoa Kỳ (nhiều khu vực ở Hoa Kỳ).

- Đối với Mã tập dữ liệu, hãy nhập một 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ẽ sử dụng:
- Tạo một bảng BigQuery trong tập dữ liệu
codelab_bqtransfer_datasetmà bạn đã tạo bằng cách làm theo các bước này.- Trong phần Nguồn, hãy chọn Bảng trống trong danh sách Tạo bảng từ.
- Trong trường Bảng, hãy nhập tên của bảng mà bạn muốn tạo. Trong lớp học lập trình này, chúng ta sẽ sử dụng tên:
codelab-bqtransfer-table. - Xác minh rằng trường Loại bảng được đặt thành Bảng gốc
- 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, phù hợp với đị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-2 và project-1 để sử dụng các tài nguyên/API trên đám mây. Bạn nên tắt các tài nguyên đã dùng để tránh phát sinh phí ngoài phạm vi 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 trình tính giá BigQuery và trình tính giá Cloud Storage.
3. Định cấu hình Dịch vụ 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 dữ liệu từ Cloud Storage (nằm trong project-1) sang BigQuery (nằm trong project-2), trong khi VPC Service Controls bảo vệ Dịch vụ chuyển dữ liệu của BigQuery trong project-2. Chỉ bảo vệ BigQuery Data Transfer Service (mà không bảo vệ BigQuery và Cloud Storage) sẽ hạn chế các thực thể 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 một hoạt động chuyển dữ liệu theo cách thủ công).
Thiết lập quy trình chuyển dữ liệu từ Cloud Storage
Để tạo một hoạt động chuyển dữ liệu, hãy làm theo các bước sau:
- Chuyển đến trang BigQuery trong bảng điều khiển Cloud của
project-2. - Nhấp vào Chuyển dữ liệu.

Điều tra lỗi vi phạm trong 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 giá trị nhận dạng riêng biệt của VPC Service Controls. Sử dụng cùng một mã 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 bị từ chối mà bạn thấy):
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"
Lỗi vi phạm được phát hiện là NO_MATCHING_ACCESS_LEVEL, tức 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 Truyền dữ liệu sẽ cố gắng liệt kê mọi hoạt động truyề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 chuyển dữ liệu vào để khắc phục lỗi vi phạm quy tắc chuyển dữ liệu vào. Trong lớp học lập trình này, hãy sử dụng một quy tắc chuyển tiếp được định cấu hình với danh tính người dùng bị từ chối, cho phép truy cập vào dịch vụ bigquerydatatransfer.googleapis.com và tất cả các phương thức.

Sau khi quy tắc chuyển dữ liệu được áp dụng, bạn sẽ không gặp vấn đề gì khi truy cập vào trang Chuyển dữ liệu.
Tiếp tục thiết lập việc chuyển dữ liệu từ Cloud Storage
Từ các bước trước, trong khi ở trang Chuyển dữ liệu (sau khi nhấp vào Chuyển dữ liệu), hãy tiếp tục thực hiện các bước sau:
- Nhấp vào + Tạo yêu cầu chuyển.
- Trong phần Source type (Loại nguồn), đối với Source (Nguồn), hãy chọn Google Cloud Storage.
- 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. - Trong phần Lựa chọn về lịch biểu:
- Chọn Tần suất lặp lại, chẳng hạn như 15 phút.
- 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 khi bạn thiết lập Tần suất lặp lại
- 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 - Trong mục Thông tin chi tiết về nguồn dữ liệu
- Đối với Bảng đích, hãy nhập tên của bảng đích. Bảng đích đến phải tuân theo các 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 - Đối với URI Cloud Storage, hãy nhập URI Cloud Storage. Trong lớp học lập trình này, chúng ta sẽ sử dụng tệp và nhóm tài nguyên đã tạo:
codelab-bqtransfer-bucket/codelab-test-file.csv - Đối với Write preference (Lựa chọn ưu tiên ghi), hãy giữ
APPEND(hoặc chọnMIRROR). - KHÔ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á các tệp nguồn sau khi chuyển)
- Đối với Định dạng tệp, hãy chọn CSV
- Trong phần Transfer Options (Lựa chọn chuyển), trong phần CSV, hãy nhập dấu phẩy (",") làm Field delimiter (Dấu phân cách trường).
- Đối với Bảng đích, hãy nhập tên của bảng đích. Bảng đích đến phải tuân theo các 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 đó:
- 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 trên đám mây của bạn trên Google Cloud
- 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 lưu trữ;
project-1trong lớp học lập trình này. - Trong lớp học lập trình này, chúng ta sẽ sử dụng tài khoản dịch vụ được tạo trong
project-2dưới dạngcodelab-sa@project-2.iam.gserviceaccount.com.
- 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 lưu trữ;
- Nhấp vào Lưu.
Vì chúng ta đã chọn Bắt đầu ngay làm lựa chọn lịch biểu, nên ngay khi bạn chọn Lưu, lần chuyển đầu tiên sẽ bắt đầu.
Xác minh trạng thái của dịch vụ chuyển dữ liệu
Cách xác minh trạng thái của hoạt động chuyển dữ liệu đã định cấu hình:
- Chuyển đến trang BigQuery trong bảng điều khiển Cloud của Google
- Nhấp vào Chuyển dữ liệu.
- Danh sách các cấu hình chuyển sẽ xuất hiện

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 nay.

Lần chạy chuyển dữ liệu phải thành công, không có lỗi vi phạm VPC Service Controls đối với cả hoạt động 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ỉ hoạt động chuyển được kích hoạt theo cách thủ công mới cần quy tắc chuyển dữ liệu đầu vào để cho phép truy cập vào chủ thể đang bắt đầu chuyển theo cách thủ công.
4. Hạn chế về địa chỉ IP đối với hoạt động chuyển dữ liệu được kích hoạt theo cách thủ công
Các quy tắc chuyển dữ liệu vào 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ừ mọi địa chỉ IP.
Khi sử dụng cấp truy cập, VPC Service Controls có khả năng hạn chế quyền truy cập được phép theo thuộc tính yêu cầu API cụ thể, đặc biệt 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, được xác định bằng vị trí địa lý của địa chỉ IP.
- Chủ thể: 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 thiết bị: kiểm tra xem yêu cầu có xuất phát từ một thiết bị đáp ứng các yêu cầu cụ thể hay không.
Để thực thi quy trình xác minh các thuộc tính này cùng với quy tắc chuyển tiế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, rồi thêm cấp truy cập đã tạo làm nguồn trong quy tắc chuyển tiếp.
Sơ đồ này minh hoạ quyền truy cập do hai chủ thể (
user@example.com và user2@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 đầu vào) và thuộc tính nhận dạng dưới dạng điều kiện AND (cả hai đều phải khớp).
- Người dùng user@example.com được cho phép truy cập khi cố gắng truy cập từ một địa chỉ IP được 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 chuyển tiếp.
- Người dùng user@example.com bị chặn quyề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 chuyển tiếp.
- 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 phép theo quy tắc chuyển tiế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:
- Mở trang Access Context Manager trong bảng điều khiển Cloud của Google.
- Nếu được nhắc, hãy chọn thư mục
codelab-folder.
- Nếu được nhắc, hãy chọn thư mục
- Ở đầu trang Access Context Manager, hãy nhấp vào TẠO CẤP TRUY CẬP.
- Trong ngăn Cấp truy cập mới, hãy đặt 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 nó là
project_2_al. - Trong mục Điều kiện, hãy nhấp vào + trước Mạng con IP.
- Trong hộp Mạng con IP, hãy chọn IP công khai
- Ngoài ra, bạn có thể chọn sử dụng IP riêng tư để sử dụng địa chỉ IP nội bộ trong các cấp truy cập. Tuy nhiên, trong lớp học lập trình này, chúng ta sẽ sử dụng một IP công khai.
- Nhập một hoặc nhiều dải IPv4 hoặc IPv6 được định dạng dưới dạng khối CIDR.
Thêm cấp truy cập vào quy tắc chuyển hướng
Trong quy tắc chuyển dữ liệu vào, cấp truy cập được tham chiếu trong trường sources. Đây là trường bắt buộc như được ghi trong tài liệu tham khảo về quy tắc chuyển dữ liệu vào. Để cho phép truy cập vào tài nguyên, VPC Service Controls sẽ đánh giá các thuộc tính sources và identityType theo điều kiện AND. Quy tắc chuyển dữ liệu đầu vào sử dụng danh tính của người dùng 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.

Chạy lại quá trình chuyển với các cấu hình hạn chế quyền truy cập theo địa chỉ IP
Để đánh giá mức độ 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ách sử dụng các trường hợp sau:
- sử dụng địa chỉ IP trong dải được phép trong cấp truy cập mà quy tắc chuyển dữ liệu vào tham chiếu.
- các cấu hình không cho phép sử dụng địa chỉ IP
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ẽ thất bại và dẫn đến lỗi vi phạm VPC Service Controls.
Một cách dễ dàng để kiểm thử bằng một địa chỉ IP khác là cho phép địa chỉ IP được chỉ định trong khi sử dụng bảng điều khiển Cloud, 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 chuyển 12345678-90ab-cdef-ghij-klmnopqrstuv 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
Đầu ra quan sát được cho thấy lỗi vi phạm VPC Service Controls, như dự kiến, vì địa chỉ IP không được phép.

Lỗi vi phạm được phát hiệ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ụ Cloud Storage
Vì chúng ta đang thực hiện một hoạt động 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 hoạt động 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 API Chuyển dữ liệu.

Sau khi bảo mật Cloud Storage API, hãy đợi lần chuyển dữ liệu theo lịch tiếp theo hoặc kích hoạt quy trình chuyển theo cách thủ công theo các bước sau:
- Chuyển đến trang BigQuery trong bảng điều khiển Google Cloud.
- Nhấp vào Chuyển dữ liệu.
- Chọn yêu cầu 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 yêu cầu chuyển Codelab Transfer
- Nhấp vào Chạy lệnh chuyển ngay
- Nhấp vào OK.
Một yêu cầu 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 này. Lần này, quá trình chuyển sẽ không thành công do vi phạm VPC Service Controls.

Điều tra lỗi vi phạm VPC Service Controls của Cloud Storage
Lọc nhật ký kiểm tra bằng cách sử dụng vpcServiceControlsUniqueIdentifier như trong phần Tóm tắt của quá trình chuyển.
Lỗi vi phạm được phát hiện là lỗi vi phạm RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER đầu ra với các 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 đang chạy quy 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 nơi bạn định cấu hình Dịch vụ chuyển dữ liệu:
project-2 - Dự án đích là dự án nơi đối tượng Cloud Storage được lưu trữ:
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ề việc truyền dữ liệu ra khỏi Cloud Storage
Để khắc phục lỗi vi phạm quy tắc truyền dữ liệu ra bên ngoài, chúng ta phải sử dụng một quy tắc truyền dữ liệu ra bên 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.

Sau khi sửa đổi ranh giới 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 báo lỗi.

6. Sao chép Tập dữ liệu BigQuery từ project-2 sang project-1
Sau khi xác nhận rằng chúng ta có thể chuyển dữ liệu từ vùng lưu trữ 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 BigQuery API đượ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 bằng công cụ bq.
Tạo tập dữ liệu đích 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. Lệnh này sẽ tạo một tập dữ liệu có tên là copied_dataset trong dự án project-1 với us là 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 ranh giới perimeter-2 và thêm BigQuery API làm dịch vụ được bảo vệ, cùng với các dịch vụ Dịch vụ chuyển dữ liệu của BigQuery và 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 của 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 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. Việc sao chép chính tập dữ liệu sẽ không thành công do vi phạm VPC Service Controls.
Để tìm thông tin chi tiết tương ứng về lỗi vi phạm 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ý sẽ 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 mà bạn thấy là lỗi vi phạm quy tắc lưu lượng truy cập đi 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 khi truyền dữ liệu ra ngoài, chúng ta cần tạo một quy tắc truyền dữ liệu ra ngoài cho phép đối tượng chính bị từ chối. Đối tượng chính bị từ chối là đối tượng đang chạy lệnh mk.

Sau khi quy tắc truyền dữ liệu ra được áp dụng, 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, thao tác sao chép tập dữ liệu sẽ thành công mà không vi phạm VPC Service Controls.
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á thực thể máy ảo và/hoặc dự án trên đám mây để không bị tính 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á bộ chứa Cloud Storage, 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 trang Bộ chứa Cloud Storage.
- Chọn hộp đánh dấu của nhóm 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á nhóm và nội dung trong đó.

- Để xoá tập dữ liệu BigQuery, 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 BigQuery.
- Trong ngăn Explorer (Trình khám phá), hãy mở rộng dự án của bạn rồi chọn một tập dữ liệu.
- Mở rộng trình đơn có biểu tượng 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
deletevào trường rồi nhấp vào Xoá.
- Để 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 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 đặt phạm vi, trong trường hợp này là ở cấp độ thư mục.
- Trên 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 chọn biểu tượng
Delete Icon.
- Để xoá Cấp truy cập, hãy hoàn tất các bước sau:
- trong bảng điều khiển 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ãy xác định hàng của cấp truy cập mà bạn muốn xoá, chọn trình đơn có biểu tượng 3 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 (IAM và chế độ cài đặt quản trị) của dự án mà bạn muốn xoá.
- Trên trang Cài đặt IAM và Quản trị, hãy chọn Tắt.
- Nhập mã dự án rồi chọn 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 đã tạo, thực thi và khắc phục sự cố cho một 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-1vào một ranh giới khác cũng bảo vệ BigQuery, Dịch vụ chuyển dữ liệu của BigQuery và Cloud Storage. - Thực hiện chuyển dữ liệu 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ư vị trí hoặc chính sách thiết bị.
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.