1. บทนำ
ใน Lab นี้ เราจะมาเรียนรู้วิธีปกป้องบริการโอนข้อมูล BigQuery โดยใช้การควบคุมบริการ VPC ขณะโอนข้อมูลจาก Cloud Storage ไปยังชุดข้อมูล BigQuery จากนั้นเราจะปกป้อง Cloud Storage และทำซ้ำกระบวนการเพื่อโอนข้อมูลจาก Cloud Storage ไปยัง BigQuery การปกป้อง Cloud Storage ทำให้เกิดการละเมิดการควบคุมบริการ VPC ซึ่งต้องได้รับการแก้ไขเพื่อให้การโอนสำเร็จ ในท้ายที่สุด เรายังปกป้อง BigQuery และพยายามคัดลอกชุดข้อมูลระหว่างโปรเจ็กต์ ซึ่งยังทำให้เกิดการละเมิดที่ต้องแก้ไขด้วย
ตลอดแล็บนี้ เราจะดูวิธีแก้ไขการละเมิดทั้งขาเข้าและขาออกโดยใช้กฎขาเข้าและขาออกตามลำดับ นอกจากนี้ เราจะใช้ระดับการเข้าถึงเพื่อแก้ไขการละเมิดขาเข้าของบริการโอนข้อมูล BigQuery ด้วย เป้าหมายของ Codelab นี้มีดังนี้
- ทำความเข้าใจวิธีแก้ไขการละเมิดขาเข้าและขาออกโดยใช้กฎขาเข้าและขาออกตามลำดับในบริการต่างๆ โดยเฉพาะอย่างยิ่ง Cloud Storage, BigQuery และบริการโอนข้อมูล BigQuery
- ทำความเข้าใจสาเหตุของการละเมิดที่เฉพาะเจาะจง
2. การตั้งค่าทรัพยากรและข้อกำหนด
ก่อนเริ่มต้น
ใน Codelab นี้ เราจะถือว่าคุณทราบข้อมูลต่อไปนี้แล้ว
- วิธีสร้างโฟลเดอร์
- วิธีสร้างโปรเจ็กต์ในโฟลเดอร์หรือย้ายโปรเจ็กต์ที่มีอยู่ไปยังโฟลเดอร์
- วิธีสร้างนโยบายการเข้าถึงที่กำหนดขอบเขต
- วิธีสร้างและกำหนดค่าขอบเขตบริการจากคอนโซล Google Cloud
- วิธีค้นหาบันทึกการละเมิดจากบันทึกการตรวจสอบ
ตั้งค่า
การตั้งค่าเริ่มต้นของเราออกแบบมาดังนี้
- องค์กร Google Cloud
- โฟลเดอร์ภายใต้องค์กร สำหรับ Codelab นี้ เราจะเรียกว่า
codelab-folder - โปรเจ็กต์ Google Cloud 2 รายการในโฟลเดอร์
codelab-folderสำหรับ Codelab นี้ เราจะเรียกโปรเจ็กต์ว่าproject-1และproject-2- หากยังไม่ได้สร้างโฟลเดอร์และโปรเจ็กต์ ให้สร้างโฟลเดอร์ในส่วนองค์กรและสร้างโปรเจ็กต์ใหม่ 2 รายการในคอนโซล Google Cloud
- สิทธิ์ที่จำเป็น ได้แก่ บทบาท IAM สำหรับการจัดการโฟลเดอร์ บทบาท IAM สำหรับการจัดการโปรเจ็กต์ บทบาท IAM ที่จำเป็นในการกำหนดค่าการควบคุมบริการ VPC บทบาท IAM สำหรับการจัดการ BigQuery และบทบาท IAM สำหรับการจัดการ Cloud Storage
- บัญชีสำหรับการเรียกเก็บเงินของทั้งโปรเจ็กต์
project-1และproject-2
สร้างนโยบายที่มีขอบเขตและขอบเขตบริการปกติ
ใน Codelab นี้ เราจะใช้ขอบเขตบริการปกติที่ปกป้อง project-2
- สร้างนโยบายการเข้าถึงที่กำหนดขอบเขตซึ่งกำหนดขอบเขตที่ระดับโฟลเดอร์
codelab-folderสำหรับ Codelab นี้ เราจะถือว่านโยบายการเข้าถึงที่สร้างขึ้นมีรหัส987654321 - สร้างขอบเขตปกติ เราเรียกขอบเขตนี้ว่า
perimeter-2และเพิ่มโปรเจ็กต์project-2
ในขอบเขต perimeter-2 ให้จำกัด BigQuery Data Transfer API

การสร้าง Bucket ของ Cloud Storage และชุดข้อมูล BigQuery
สำหรับ Codelab นี้ คุณใช้ไฟล์ CSV ใดก็ได้ ไม่ว่าจะมีเนื้อหาใดก็ตาม ข้อจำกัดหลักเกี่ยวข้องกับข้อกำหนดการทำงานร่วมกัน ซึ่งบังคับใช้ว่า
- หากชุดข้อมูล BigQuery อยู่ในหลายภูมิภาค Bucket ของ Cloud Storage ที่มีข้อมูลที่คุณกำลังโอนต้องอยู่ในหลายภูมิภาคเดียวกันหรือในตำแหน่งที่อยู่ในหลายภูมิภาค
- หากชุดข้อมูลอยู่ในภูมิภาค Bucket ของ Cloud Storage ต้องอยู่ในภูมิภาคเดียวกัน
หลังจากนี้ไป เราจะตรวจสอบว่าทั้ง Bucket ของ Cloud Storage และชุดข้อมูล BigQuery อยู่ในภูมิภาคเดียวกันหรือแบบหลายภูมิภาคสำหรับ Codelab นี้
สร้าง Bucket ของ Cloud Storage ใหม่ในโปรเจ็กต์ project-1
หากต้องการสร้าง Cloud Storage Bucket ใหม่ ให้ทำตามขั้นตอนที่ระบุไว้สำหรับสร้าง Bucket ใหม่
- สำหรับชื่อของ Bucket ให้ป้อนชื่อที่เป็นไปตามข้อกำหนดของชื่อ Bucket สำหรับ Codelab นี้ เราจะเรียก Bucket ว่า
codelab-bqtransfer-bucket - สำหรับตำแหน่งที่จะจัดเก็บข้อมูล สถานที่ตั้งของ Bucket ให้เลือกประเภทสถานที่ตั้งและสถานที่ตั้งที่จะจัดเก็บข้อมูล Bucket อย่างถาวร สำหรับ Codelab นี้ เราจะใช้ us (หลายภูมิภาคในสหรัฐอเมริกา)

สร้างไฟล์ CSV
จากเครื่องในพื้นที่หรือใช้ Cloud Shell เราสามารถใช้คำสั่ง echo เพื่อสร้างไฟล์ CSV ตัวอย่าง codelab-test-file.csv โดยใช้คำสั่งต่อไปนี้
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;
อัปโหลดไฟล์ CSV ไปยัง Bucket ใน Cloud Storage
เมื่อสร้างไฟล์ CSV แล้ว ให้เรียกใช้คำสั่งต่อไปนี้เพื่ออัปโหลดออบเจ็กต์ไฟล์ไปยังที่เก็บข้อมูลที่สร้างขึ้น
gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

คุณสามารถยืนยันว่ามีการอัปโหลดไฟล์ไปยัง Bucket ที่สร้างขึ้นโดยแสดงรายการออบเจ็กต์ใน Bucket หรือเรียกใช้คำสั่งต่อไปนี้
gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**
สร้างชุดข้อมูลและตาราง BigQuery ใน project-2
- สร้างชุดข้อมูล BigQuery ในโปรเจ็กต์
project-2โดยทำตามขั้นตอนเหล่านี้- สำหรับรหัสชุดข้อมูล ให้ป้อนชื่อชุดข้อมูลที่ไม่ซ้ำกัน สำหรับ Codelab นี้ เราจะใช้
codelab_bqtransfer_dataset - สําหรับประเภทสถานที่ตั้ง ให้เลือกสถานที่ตั้งทางภูมิศาสตร์สําหรับชุดข้อมูล สำหรับ Codelab นี้ เราจะใช้ตำแหน่งเดียวกับ Bucket ของ Cloud Storage ซึ่งก็คือ สหรัฐอเมริกา (หลายภูมิภาคในสหรัฐอเมริกา)

- สำหรับรหัสชุดข้อมูล ให้ป้อนชื่อชุดข้อมูลที่ไม่ซ้ำกัน สำหรับ Codelab นี้ เราจะใช้
- สร้างตาราง BigQuery ภายในชุดข้อมูลที่สร้างขึ้น
codelab_bqtransfer_datasetโดยทำตามขั้นตอนเหล่านี้- ในส่วนแหล่งที่มา ให้เลือกตารางเปล่าในรายการสร้างตารางจาก
- ในช่องตาราง ให้ป้อนชื่อตารางที่ต้องการสร้าง สำหรับ Codelab นี้ เราใช้ชื่อ
codelab-bqtransfer-table - ตรวจสอบว่าได้ตั้งค่าฟิลด์ประเภทตารางเป็นตารางเนทีฟ
- ในส่วนสคีมา ให้ป้อนคำจำกัดความสคีมา คุณป้อนข้อมูลสคีมาได้โดยคลิกแก้ไขเป็นข้อความ แล้วป้อนสคีมาต่อไปนี้ ซึ่งเป็นไปตามรูปแบบของไฟล์ CSV ที่สร้างขึ้น
[{ "name": "name", "type": "STRING", "mode": "NULLABLE", "description": "The name" }, { "name": "age", "type": "INTEGER", "mode": "NULLABLE", "description": "The age" }]
ค่าใช้จ่าย
คุณต้องเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์ project-2 และ project-1 เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ เราขอแนะนำให้ปิดทรัพยากรที่ใช้แล้วเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจาก Codelab นี้
ทรัพยากรที่ทำให้เกิดค่าใช้จ่ายคือ BigQuery และ Cloud Storage ดูค่าใช้จ่ายโดยประมาณได้ในเครื่องคำนวณราคาของ BigQuery และเครื่องคำนวณของ Cloud Storage
3. กำหนดค่าการโอนข้อมูลจากออบเจ็กต์ Cloud Storage ไปยังตาราง BigQuery
ตอนนี้เราจะลองสร้างบริการโอนข้อมูล (ใน project-2) เพื่อโอนจาก Cloud Storage (อยู่ใน project-1) ไปยัง BigQuery (อยู่ใน project-2) ขณะที่มีการควบคุมบริการ VPC ที่ปกป้องบริการโอนข้อมูล BigQuery ใน project-2 การปกป้องเฉพาะบริการโอนข้อมูล BigQuery (โดยไม่ปกป้อง BigQuery และ Cloud Storage ด้วย) จะจำกัดให้ผู้ใช้หลักสร้างและจัดการการโอนข้อมูลได้เท่านั้น (เช่น การเริ่มการโอนข้อมูลด้วยตนเอง)
ตั้งค่าการโอนข้อมูลจาก Cloud Storage
หากต้องการสร้างการโอนข้อมูล ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่หน้า BigQuery ในคอนโซล Google Cloud ของ
project-2 - คลิกการโอนข้อมูล

ตรวจสอบการละเมิดขณะเข้าถึงหน้าการโอนข้อมูล
ในคอนโซล Google Cloud เราจะเห็นตัวระบุที่ไม่ซ้ำกันของการควบคุมบริการ VPC ใช้ตัวระบุเดียวกันเพื่อกรองบันทึกและระบุรายละเอียดการละเมิด (แทนที่ OBSERVED_VPCSC_DENIAL_UNIQUE_ID ด้วยรหัสการปฏิเสธที่สังเกตได้)
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"
การละเมิดที่พบคือ NO_MATCHING_ACCESS_LEVEL ซึ่งเป็นการละเมิดขาเข้าที่มีรายละเอียดคล้ายกับต่อไปนี้
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"
}
การเข้าถึงหน้าการโอนข้อมูลจะพยายามแสดงการโอนข้อมูลที่กำหนดค่าไว้ ดังนั้นจึงเป็นการละเมิดเมธอด ListTransferConfigs
แก้ไขการละเมิดสำหรับบริการ bigquerydatatransfer.googleapis.com
คุณใช้ระดับการเข้าถึงหรือกฎขาเข้าเพื่อแก้ไขการละเมิดขาเข้าได้ ใน Codelab นี้ เราจะใช้กฎขาเข้าที่กำหนดค่าด้วยข้อมูลประจำตัวของผู้ใช้ที่ถูกปฏิเสธ ซึ่งอนุญาตให้เข้าถึงบริการ bigquerydatatransfer.googleapis.com และเมธอดทั้งหมด

เมื่อตั้งค่ากฎขาเข้าแล้ว การเข้าถึงหน้าการโอนข้อมูลควรจะทำงานได้โดยไม่มีปัญหา
ดำเนินการตั้งค่าการโอนข้อมูลจาก Cloud Storage ต่อ
จากขั้นตอนก่อนหน้า ขณะอยู่ในหน้าการโอนข้อมูล (หลังจากคลิกการโอนข้อมูล) ให้ทำตามขั้นตอนต่อไปนี้
- คลิก + สร้างการโอน
- ในส่วนประเภทแหล่งข้อมูล ให้เลือก Google Cloud Storage สำหรับแหล่งข้อมูล
- ในส่วนชื่อการกำหนดค่าการโอน ให้ป้อนชื่อการโอน เช่น
Codelab Transferในส่วนชื่อที่แสดง - ในส่วนตัวเลือกการตั้งเวลา ให้ทำดังนี้
- เลือกความถี่ในการทำซ้ำ เช่น 15 นาที
- อย่าลืมเลือกเริ่มเลย มิเช่นนั้น การโอนข้อมูลจะเริ่มหลังจากความถี่ในการทำซ้ำที่กำหนดค่าไว้เท่านั้น
- ในส่วนการตั้งค่าปลายทาง ให้เลือกชุดข้อมูลที่คุณสร้างขึ้นเพื่อจัดเก็บข้อมูลสำหรับชุดข้อมูลปลายทาง
codelab_bqtransfer_dataset - ในส่วนรายละเอียดแหล่งข้อมูล
- ในส่วนตารางปลายทาง ให้ป้อนชื่อตารางปลายทาง ตารางปลายทางต้องเป็นไปตามกฎการตั้งชื่อตาราง สำหรับ Codelab นี้ เราจะใช้ตารางที่สร้างไว้ก่อนหน้านี้
codelab-bqtransfer-table - สำหรับ URI ของ Cloud Storage ให้ป้อน URI ของ Cloud Storage สำหรับ Codelab นี้ เราจะใช้ที่เก็บข้อมูลและไฟล์ที่สร้างขึ้น
codelab-bqtransfer-bucket/codelab-test-file.csv - สำหรับค่ากำหนดการเขียน ให้ใช้
APPENDต่อไป (หรือเลือกMIRROR) - อย่าเลือกให้ลบไฟล์หลังการโอน (เนื่องจากเราจะใช้ไฟล์เดียวกันซ้ำหลายครั้ง อย่างไรก็ตาม คุณสามารถใช้หลายไฟล์และลบไฟล์ต้นฉบับหลังการโอนได้)
- เลือก CSV สำหรับรูปแบบไฟล์
- ในตัวเลือกการโอน ภายในส่วน CSV ให้ป้อนคอมมา(",") เป็นตัวคั่นฟิลด์
- ในส่วนตารางปลายทาง ให้ป้อนชื่อตารางปลายทาง ตารางปลายทางต้องเป็นไปตามกฎการตั้งชื่อตาราง สำหรับ Codelab นี้ เราจะใช้ตารางที่สร้างไว้ก่อนหน้านี้
- ในเมนูบัญชีบริการ ให้เลือกบัญชีบริการจากบัญชีบริการที่เชื่อมโยงกับโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google
- บัญชีบริการที่เลือกต้องมีสิทธิ์ที่จำเป็นสำหรับทั้ง Cloud Storage ในโปรเจ็กต์ที่โฮสต์ที่เก็บข้อมูล Bucket
project-1ในโค้ดแล็บนี้ - สำหรับ Codelab นี้ เราจะใช้บัญชีบริการที่สร้างใน
project-2เป็นcodelab-sa@project-2.iam.gserviceaccount.com
- บัญชีบริการที่เลือกต้องมีสิทธิ์ที่จำเป็นสำหรับทั้ง Cloud Storage ในโปรเจ็กต์ที่โฮสต์ที่เก็บข้อมูล Bucket
- คลิกบันทึก
เนื่องจากเราเลือกเริ่มเลยเป็นตัวเลือกกำหนดเวลา เมื่อเลือกบันทึกแล้ว การโอนครั้งแรกจะเริ่มขึ้นทันที
ยืนยันสถานะบริการโอนข้อมูล
วิธีตรวจสอบสถานะการโอนข้อมูลที่กำหนดค่าไว้
- ไปที่หน้า BigQuery ในคอนโซล Google Cloud
- คลิกการโอนข้อมูล
- รายการการโอนที่กำหนดค่าไว้จะแสดงขึ้น

คลิก Codelab Transfer (ในส่วนชื่อที่แสดง) แล้วระบบจะแสดงรายการการเรียกใช้ทั้งหมดที่ดำเนินการไปแล้ว

การเรียกใช้การโอนข้อมูลควรสำเร็จโดยไม่มีการละเมิดการควบคุมบริการ VPC ทั้งสำหรับการโอนข้อมูลที่ทริกเกอร์ด้วยตนเองและการโอนข้อมูลที่กำหนดเวลาไว้ โปรดทราบว่าเฉพาะการโอนที่ทริกเกอร์ด้วยตนเองเท่านั้นที่ต้องใช้กฎขาเข้าเพื่ออนุญาตให้เข้าถึงพรินซิเพิลที่เริ่มการโอนด้วยตนเอง
4. ข้อจำกัดที่อยู่ IP สำหรับการโอนข้อมูลที่ทริกเกอร์ด้วยตนเอง
กฎขาเข้าที่กำหนดค่าในปัจจุบันอนุญาตให้ข้อมูลประจำตัวที่กำหนดค่าทริกเกอร์การโอนข้อมูลด้วยตนเองจากที่อยู่ IP ใดก็ได้
เมื่อใช้ระดับการเข้าถึง การควบคุมบริการ VPC จะช่วยให้คุณจำกัดการเข้าถึงที่อนุญาตตามแอตทริบิวต์คำขอ API ที่เฉพาะเจาะจงได้ โดยเฉพาะอย่างยิ่ง
- เครือข่ายย่อย IP: ตรวจสอบว่าคำขอมาจากที่อยู่ IP ที่เฉพาะเจาะจงหรือไม่
- ภูมิภาค: ตรวจสอบว่าคำขอมาจากภูมิภาคที่เฉพาะเจาะจงหรือไม่ ซึ่งพิจารณาจากตำแหน่งทางภูมิศาสตร์ของที่อยู่ IP
- ผู้รับสิทธิ์: ตรวจสอบว่าคำขอมาจากบัญชีที่เฉพาะเจาะจงหรือไม่
- นโยบายอุปกรณ์: ตรวจสอบว่าคำขอมาจากอุปกรณ์ที่มีคุณสมบัติตรงตามข้อกำหนดที่เฉพาะเจาะจงหรือไม่
หากต้องการบังคับใช้การยืนยันแอตทริบิวต์เหล่านี้พร้อมกับกฎขาเข้าที่กำหนดค่าไว้แล้ว เราต้องสร้างระดับการเข้าถึงที่อนุญาตแอตทริบิวต์ที่ต้องการ จากนั้นเพิ่มระดับการเข้าถึงที่สร้างขึ้นเป็นแหล่งที่มาในกฎขาเข้า
แผนภาพนี้แสดงการเข้าถึงที่เริ่มต้นโดยผู้รับสิทธิ์ 2 ราย (
user@example.com และ user2@example.com) ใน 3 สถานการณ์ ซึ่งแสดงให้เห็นว่า การควบคุมบริการ VPC ประเมินแหล่งที่มา (ระดับการเข้าถึงขาเข้า) และแอตทริบิวต์ของข้อมูลประจำตัวเป็นเงื่อนไข AND ที่ทั้ง 2 อย่างต้องตรงกันอย่างไร
- ผู้ใช้ user@example.com จะได้รับอนุญาตให้เข้าถึงเมื่อพยายามเข้าถึงจากที่อยู่ IP ที่ระดับการเข้าถึงอนุญาต เนื่องจากที่อยู่ IP และบัญชีผู้ใช้ตรงกับการกำหนดค่าในกฎขาเข้า
- ผู้ใช้ user@example.com จะถูกบล็อกไม่ให้เข้าถึงเมื่อที่อยู่ IP ไม่ตรงกับที่อยู่ IP ที่อนุญาต แม้ว่าบัญชีของผู้ใช้จะเป็นบัญชีที่กำหนดค่าไว้ในกฎขาเข้าก็ตาม
- ผู้ใช้ user2@example.com ถูกบล็อกไม่ให้เข้าถึงแม้จะพยายามเข้าถึงจากที่อยู่ IP ที่อนุญาต เนื่องจากกฎขาเข้าไม่อนุญาตให้บัญชีของผู้ใช้เข้าถึง
สร้างระดับการเข้าถึง
วิธีสร้างระดับการเข้าถึงที่จำกัดการเข้าถึงตามที่อยู่ IP
- เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทในคอนโซล Google Cloud
- หากได้รับข้อความแจ้ง ให้เลือกโฟลเดอร์
codelab-folder
- หากได้รับข้อความแจ้ง ให้เลือกโฟลเดอร์
- ที่ด้านบนของหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบท ให้คลิกสร้างระดับการเข้าถึง
- ในบานหน้าต่างระดับการเข้าถึงใหม่ ให้ตั้งชื่อระดับการเข้าถึงใหม่ สำหรับ Codelab นี้ เราจะเรียกว่า
project_2_al - ในส่วนเงื่อนไข ให้คลิก + หน้าเครือข่ายย่อย IP
- ในช่องเครือข่ายย่อย IP ให้เลือก IP สาธารณะ
- หรือคุณจะเลือกใช้ IP ส่วนตัวเพื่อใช้ที่อยู่ IP ภายในในระดับการเข้าถึงก็ได้ อย่างไรก็ตาม สำหรับ Codelab นี้ เราจะใช้ IP สาธารณะ
- ป้อนช่วง IPv4 หรือ IPv6 อย่างน้อย 1 ช่วงในรูปแบบบล็อก CIDR
เพิ่มระดับการเข้าถึงในกฎขาเข้า
ภายในกฎขาเข้า ระบบจะอ้างอิงระดับการเข้าถึงในช่อง sources ซึ่งเป็นช่องที่จำเป็นตามที่ระบุไว้ในการอ้างอิงกฎขาเข้า การควบคุมบริการ VPC จะประเมินแอตทริบิวต์ sources และ identityType เป็นเงื่อนไข AND เพื่ออนุญาตการรับส่งข้อมูลขาเข้าไปยังทรัพยากร กฎขาเข้าใช้ข้อมูลประจำตัวของหลักการที่ทริกเกอร์การโอนข้อมูลด้วยตนเอง ไม่ใช่บัญชีบริการที่ระบุในการกำหนดค่าการโอนข้อมูล

เรียกใช้การโอนอีกครั้งโดยใช้การกำหนดค่าที่จำกัดการเข้าถึงตามที่อยู่ IP
หากต้องการประเมินประสิทธิภาพของการกำหนดค่าที่ใช้ ให้ทริกเกอร์การโอนอีกครั้งโดยใช้สถานการณ์ต่อไปนี้
- โดยใช้ที่อยู่ IP ในช่วงที่อนุญาตในระดับการเข้าถึงที่กฎขาเข้าอ้างอิง
- ใช้ที่อยู่ IP ที่การกำหนดค่าไม่อนุญาต
การเข้าถึงจากที่อยู่ IP ที่อนุญาตควรสำเร็จ ในขณะที่การเข้าถึงจากที่อยู่ IP ที่ไม่อนุญาตควรล้มเหลวและส่งผลให้เกิดการละเมิดการควบคุมบริการ VPC
วิธีง่ายๆ ในการทดสอบโดยใช้ที่อยู่ IP อื่นคือการอนุญาตที่อยู่ IP ที่กำหนดขณะใช้คอนโซล Google Cloud แล้วทดสอบขณะใช้ Cloud Shell
ใน Cloud Shell ให้เรียกใช้คำสั่งต่อไปนี้เพื่อทริกเกอร์การโอนด้วยตนเอง โดยแทนที่ทั้ง RUN_TIME และ RESOURCE_NAME
bq mk \
--transfer_run \
--run_time='RUN_TIME' \
RESOURCE_NAME
ตัวอย่างเช่น คำสั่งตัวอย่างต่อไปนี้จะทำงานทันทีสำหรับการกำหนดค่าการโอน 12345678-90ab-cdef-ghij-klmnopqrstuv ในโปรเจ็กต์ 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
เอาต์พุตที่สังเกตได้แสดงให้เห็นการละเมิดการควบคุมบริการ VPC ตามที่คาดไว้ เนื่องจากระบบไม่อนุญาตที่อยู่ IP

การละเมิดที่พบอยู่ในเมธอด 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. เริ่มการโอนข้อมูลขณะปกป้องบริการ Cloud Storage
เนื่องจากเราจะทำการโอนจาก Cloud Storage ไปยัง BigQuery เราจึงมาเพิ่ม Cloud Storage ในบริการที่ได้รับการปกป้องโดยการควบคุมบริการ VPC และดูว่าการโอนจะยังคงสำเร็จหรือไม่
ในperimeter-2การกำหนดค่า ให้เพิ่ม Cloud Storage API เป็นหนึ่งในบริการที่จำกัด พร้อมกับ BigQuery Data Transfer API

หลังจากรักษาความปลอดภัยของ Cloud Storage API แล้ว ให้รอการโอนข้อมูลที่กำหนดเวลาไว้ครั้งถัดไป หรือทริกเกอร์การโอนด้วยตนเองโดยทำตามขั้นตอนต่อไปนี้
- ไปที่หน้า BigQuery ในคอนโซล Google Cloud
- คลิกการโอนข้อมูล
- เลือกการโอนจากรายการ สำหรับ Codelab นี้ เราจะใช้การโอน Codelab Transfer
- คลิกเรียกใช้การโอนเลย
- คลิกตกลง
ระบบจะเริ่มการโอนอีกครั้ง คุณอาจต้องรีเฟรชหน้าเว็บเพื่อดู ครั้งนี้การโอนจะล้มเหลวเนื่องจากมีการละเมิดการควบคุมบริการ VPC

ตรวจสอบการละเมิดการควบคุมบริการ VPC ของ Cloud Storage
กรองบันทึกการตรวจสอบโดยใช้ vpcServiceControlsUniqueIdentifier ตามที่เห็นในสรุปการโอน
การละเมิดที่พบคือRESOURCES_NOT_IN_SAME_SERVICE_PERIMETERการละเมิดขาออกที่มีรายละเอียดดังนี้
- Principal คือบัญชีบริการที่กำหนดค่าไว้ในบริการโอนข้อมูล (ไม่ว่าจะทริกเกอร์ด้วยตนเองหรือเรียกใช้การโอนข้อมูลที่กำหนดเวลาไว้ Principal ที่ถูกปฏิเสธจะเหมือนกัน)
- บริการที่ได้รับผลกระทบคือ Cloud Storage
- แหล่งที่มาของคำขอคือโปรเจ็กต์ที่กำหนดค่าบริการโอนข้อมูลไว้
project-2 - โปรเจ็กต์เป้าหมายคือโปรเจ็กต์ที่มีออบเจ็กต์ 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"
}
แก้ไขการละเมิดการส่งข้อมูลออกจาก Cloud Storage
หากต้องการแก้ไขการละเมิดขาออก เราต้องใช้กฎขาออกที่อนุญาตให้มีการรับส่งข้อมูลจากบัญชีบริการที่ถูกปฏิเสธไปยังโปรเจ็กต์ที่มีออบเจ็กต์ Cloud Storage

หลังจากแก้ไขขอบเขตบริการ perimeter-2 แล้ว ให้ทำกระบวนการซ้ำเพื่อทริกเกอร์การโอนอีกครั้ง การโอนจะไม่แสดงข้อผิดพลาด

6. คัดลอกชุดข้อมูล BigQuery จาก project-2 ไปยัง project-1
หลังจากยืนยันว่าเราสามารถโอนข้อมูลจากที่เก็บข้อมูล Cloud Storage ใน project-1 ไปยังชุดข้อมูล BigQuery ใน project-2 ได้แล้ว ให้คัดลอกชุดข้อมูล BigQuery จาก project-2 ไปยัง project-1 ในขณะที่ BigQuery API ได้รับการปกป้องโดยการควบคุมบริการ VPC
หากต้องการสร้างและคัดลอกชุดข้อมูล เราจะใช้คำสั่ง bq mk ซึ่งใช้เครื่องมือ bq
สร้างชุดข้อมูลปลายทางใน project-1
ก่อนคัดลอกชุดข้อมูล คุณต้องสร้างชุดข้อมูลปลายทางก่อน หากต้องการสร้างชุดข้อมูลปลายทาง เราสามารถเรียกใช้คำสั่งต่อไปนี้ ซึ่งจะสร้างชุดข้อมูลชื่อ copied_dataset ในโปรเจ็กต์ project-1 โดยมี us เป็นตำแหน่ง
bq mk \
--dataset \
--location=us \
project-1:copied_dataset
ปกป้องบริการ BigQuery ใน project-2 ด้วยการควบคุมบริการ VPC
แก้ไขการกำหนดค่าของขอบเขต perimeter-2 และเพิ่ม BigQuery API เป็นบริการที่ได้รับการคุ้มครอง พร้อมกับบริการ BigQuery Data Transfer และ Cloud Storage

เริ่มการคัดลอกชุดข้อมูล
หากต้องการคัดลอกชุดข้อมูล ให้เรียกใช้bq mkคำสั่งต่อไปนี้ ซึ่งจะคัดลอกชุดข้อมูล codelab_bqtransfer_dataset ในโปรเจ็กต์ project-2 ไปยังชุดข้อมูล copied_dataset ใน project-1 และเขียนทับเนื้อหาชุดข้อมูล หากมี
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"
}'
คำสั่งจะทำงานสำเร็จ ในขณะเดียวกัน ระบบจะสร้างการกำหนดค่าการโอนสำเร็จเพื่อเริ่มดำเนินการคัดลอกชุดข้อมูล การคัดลอกชุดข้อมูลเองจะล้มเหลวเนื่องจากมีการละเมิดการควบคุมบริการ VPC
หากต้องการดูรายละเอียดการละเมิดการควบคุมบริการ VPC ที่เกี่ยวข้อง ให้ตรวจสอบบันทึกใน project-2 (โปรเจ็กต์ชุดข้อมูลต้นทาง) ด้วยการค้นหาบันทึกต่อไปนี้ การกรองการค้นหาบันทึกจะกรองบันทึกในบริการ BigQuery และชื่อทรัพยากรของชุดข้อมูลที่กำลังคัดลอก (codelab_bqtransfer_dataset)
resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"
การละเมิดการควบคุมบริการ VPC ที่พบคือการละเมิดขาออกจาก project-2 ไปยัง 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"
แก้ไขการละเมิด BigQuery ทั้งหมดและเริ่มคัดลอกชุดข้อมูลอีกครั้ง
หากต้องการแก้ไขการละเมิดขาออก เราต้องสร้างกฎขาออกที่อนุญาตผู้รับสิทธิ์ที่ถูกปฏิเสธ ผู้ใช้หลักที่ถูกปฏิเสธคือผู้ที่เรียกใช้mk คำสั่ง

เมื่อมีกฎขาออกแล้ว ให้เรียกใช้คำสั่งเดียวกันในขอบเขต perimeter-2 เพื่อคัดลอกชุดข้อมูล คราวนี้ระบบควรคัดลอกชุดข้อมูลได้สำเร็จโดยไม่มีการละเมิดการควบคุมบริการ VPC
7. ล้างข้อมูล
แม้ว่าจะไม่มีการเรียกเก็บเงินแยกต่างหากสำหรับการใช้การควบคุมบริการ VPC เมื่อไม่ได้ใช้บริการ แต่แนวทางปฏิบัติแนะนำคือการล้างข้อมูลการตั้งค่าที่ใช้ในห้องทดลองนี้ นอกจากนี้ คุณยังลบอินสแตนซ์ VM และ/หรือโปรเจ็กต์ Cloud เพื่อหลีกเลี่ยงค่าใช้จ่ายได้ด้วย การลบโปรเจ็กต์ที่อยู่ในระบบคลาวด์จะเป็นการหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้ภายในโปรเจ็กต์นั้น
- หากต้องการลบ Bucket ของ Cloud Storage ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าพื้นที่เก็บข้อมูล Cloud Storage
- เลือกช่องทำเครื่องหมายของที่เก็บข้อมูลที่จะลบ แล้วคลิกลบ
- ในหน้าต่างซ้อนทับที่ปรากฏขึ้น ให้ยืนยันว่าคุณต้องการลบบัคเก็ตและเนื้อหาในบัคเก็ต

- หากต้องการลบชุดข้อมูล BigQuery ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้ไปที่หน้า BigQuery
- ในบานหน้าต่าง Explorer ให้ขยายโปรเจ็กต์และเลือกชุดข้อมูล
- ขยายเมนู 3 จุด แล้วคลิกลบ
- ในกล่องโต้ตอบลบชุดข้อมูล ให้พิมพ์
deleteลงในช่อง แล้วคลิกลบ
- หากต้องการลบขอบเขตบริการ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้เลือกความปลอดภัย แล้วเลือกการควบคุมบริการ VPC ที่ระดับที่มีการกำหนดขอบเขตนโยบายการเข้าถึง ในกรณีนี้คือที่ระดับโฟลเดอร์
- ในหน้าการควบคุมบริการ VPC ในแถวของตารางที่ตรงกับขอบเขตที่ต้องการลบ ให้เลือก
Delete Icon
- หากต้องการลบระดับการเข้าถึง ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทที่ขอบเขตโฟลเดอร์
- ในตารางกริด ให้ระบุแถวสำหรับระดับการเข้าถึงที่ต้องการลบ เลือกเมนู 3 จุด แล้วเลือกลบ
- หากต้องการปิดโปรเจ็กต์ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าการตั้งค่า IAM และผู้ดูแลระบบของโปรเจ็กต์ที่ต้องการลบ
- ในหน้าการตั้งค่า IAM และผู้ดูแลระบบ ให้เลือกปิด
- ป้อนรหัสโปรเจ็กต์ แล้วเลือกปิดเครื่องต่อไป
8. ยินดีด้วย
ใน Codelab นี้ คุณได้สร้างขอบเขตการควบคุมบริการ VPC บังคับใช้ และแก้ปัญหาแล้ว
ดูข้อมูลเพิ่มเติม
คุณยังสำรวจสถานการณ์ต่อไปนี้ได้ด้วย
- เพิ่ม
project-1ในขอบเขตที่แตกต่างกันซึ่งยังปกป้อง BigQuery, บริการโอนข้อมูล BigQuery และ Cloud Storage ด้วย - โอนข้อมูล BigQuery จากแหล่งที่มาอื่นๆ ที่รองรับ
- จำกัดการเข้าถึงของผู้ใช้ตามแอตทริบิวต์อื่นๆ เช่น นโยบายสถานที่ตั้งหรืออุปกรณ์
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป