1. บทนำ
ในบทแนะนำนี้ เราจะดูวิธีปกป้องบริการโอนข้อมูล BigQuery โดยใช้การควบคุมบริการ VPC ขณะโอนข้อมูลจาก Cloud Storage ไปยังชุดข้อมูล BigQuery จากนั้นเราจะปกป้อง Cloud Storage และทําขั้นตอนดังกล่าวซ้ำเพื่อโอนข้อมูลจาก Cloud Storage ไปยัง BigQuery การปกป้อง Cloud Storage ทําให้เกิดการละเมิดการควบคุมบริการ VPC ซึ่งต้องได้รับการแก้ไขเพื่อให้การโอนสําเร็จ สุดท้าย เรายังปกป้อง BigQuery และพยายามคัดลอกชุดข้อมูลระหว่างโปรเจ็กต์ ซึ่งก็ทำให้เกิดการละเมิดที่ต้องแก้ไขด้วย
ตลอดทั้งห้องทดลองนี้ เราจะดูวิธีแก้ไขการละเมิดทั้งขาเข้าและขาออกโดยใช้กฎขาเข้าและขาออกตามลำดับ นอกจากนี้ เราจะใช้ระดับการเข้าถึงเพื่อแก้ไขการละเมิดการส่งผ่านข้อมูล BigQuery ด้วย เป้าหมายของ Codelab นี้ ได้แก่
- ทําความเข้าใจวิธีแก้ไขการละเมิดขาเข้าและขาออกโดยใช้กฎขาเข้าและขาออกในบริการต่างๆ ตามลำดับ ซึ่งได้แก่ Cloud Storage, BigQuery และบริการโอนข้อมูล BigQuery
- ทำความเข้าใจสาเหตุที่เกิดการละเมิด
2. การตั้งค่าและข้อกําหนดของทรัพยากร
ก่อนเริ่มต้น
ในโค้ดแล็บนี้ เราจะถือว่าคุณทราบข้อมูลต่อไปนี้แล้ว
- วิธีสร้างโฟลเดอร์
- วิธีสร้างโปรเจ็กต์ในโฟลเดอร์หรือย้ายโปรเจ็กต์ที่มีอยู่ไปยังโฟลเดอร์
- วิธีสร้างนโยบายการเข้าถึงแบบจำกัดขอบเขต
- วิธีสร้างและกําหนดค่าขอบเขตบริการจากคอนโซล Google Cloud
- วิธีค้นหาบันทึกการละเมิดจากบันทึกการตรวจสอบ
ตั้งค่า
การตั้งค่าเริ่มต้นของเราออกแบบมาดังนี้
- องค์กร Google Cloud
- โฟลเดอร์ในองค์กร เราจะเรียก Codelab นี้ว่า
codelab-folder
- โปรเจ็กต์ Google Cloud 2 รายการในโฟลเดอร์
codelab-folder
สำหรับโค้ดแล็บนี้ เราจะเรียกโปรเจ็กต์ว่าproject-1
และproject-2
- หากยังไม่ได้สร้างโฟลเดอร์และโปรเจ็กต์ ให้สร้างโฟลเดอร์ในส่วนองค์กรในคอนโซล Google Cloud และสร้างโปรเจ็กต์ใหม่ 2 รายการ
- สิทธิ์ที่จําเป็น: บทบาท IAM สําหรับการจัดการโฟลเดอร์ บทบาท IAM สําหรับการจัดการโปรเจ็กต์ บทบาท IAM ที่จําเป็นสําหรับการกําหนดค่าการควบคุมบริการ VPC บทบาท IAM สําหรับการจัดการ BigQuery และบทบาท IAM สําหรับการจัดการพื้นที่เก็บข้อมูลระบบคลาวด์
- บัญชีสำหรับการเรียกเก็บเงินของทั้ง 2 โปรเจ็กต์
project-1
และproject-2
สร้างนโยบายที่มีขอบเขตและขอบเขตบริการปกติ
ในโค้ดแล็บนี้ เราจะใช้ขอบเขตบริการปกติที่ปกป้อง project-2
- สร้างนโยบายการเข้าถึงที่มีขอบเขตซึ่งมีขอบเขตที่ระดับโฟลเดอร์
codelab-folder
สําหรับโค้ดแล็บนี้ เราจะสมมติว่านโยบายการเข้าถึงที่สร้างมีรหัส987654321
- สร้างขอบเขตปกติ โดยใช้ชื่อว่า
perimeter-2
และเพิ่มโปรเจ็กต์project-2
ในขอบเขต perimeter-2
ให้จํากัด BigQuery Data Transfer API
การสร้างที่เก็บข้อมูล Cloud Storage และชุดข้อมูล BigQuery
สําหรับวัตถุประสงค์ของโค้ดแล็บนี้ ไฟล์ CSV ใดก็ได้ไม่ว่าเนื้อหาจะเป็นอย่างไร ข้อจํากัดหลักเกี่ยวข้องกับข้อกําหนดในการวางอุปกรณ์ไว้ด้วยกัน ซึ่งบังคับให้ต้องมีคุณสมบัติดังนี้
- หากชุดข้อมูล BigQuery อยู่ในหลายภูมิภาค ที่เก็บข้อมูล Cloud Storage ที่มีข้อมูลที่คุณต้องการโอนต้องอยู่ในหลายภูมิภาคเดียวกันหรืออยู่ในตำแหน่งที่อยู่ในหลายภูมิภาค
- หากชุดข้อมูลอยู่ในภูมิภาค ที่เก็บข้อมูล Cloud Storage ของคุณต้องอยู่ในภูมิภาคเดียวกัน
นับจากนี้ไปสำหรับโค้ดแล็บนี้ เราจะตรวจสอบว่าทั้งที่เก็บข้อมูล Cloud Storage และชุดข้อมูล BigQuery อยู่ในภูมิภาคเดียวกันหรือหลายภูมิภาค
สร้างที่เก็บข้อมูล Cloud Storage ใหม่ในโปรเจ็กต์ project-1
หากต้องการสร้างที่เก็บข้อมูล Cloud Storage ใหม่ ให้ทำตามขั้นตอนที่ระบุไว้ในเอกสารสำหรับการสร้างที่เก็บข้อมูลใหม่
- ป้อนชื่อที่เป็นไปตามข้อกำหนดของชื่อที่เก็บข้อมูลสำหรับชื่อของที่เก็บข้อมูล สําหรับโค้ดแล็บนี้ เราจะเรียกที่เก็บข้อมูลว่า
codelab-bqtransfer-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 ไปยังที่เก็บข้อมูล Cloud Storage
เมื่อสร้างไฟล์ CSV แล้ว ให้เรียกใช้คําสั่งต่อไปนี้เพื่ออัปโหลดออบเจ็กต์ไฟล์ไปยังที่เก็บข้อมูลที่สร้างขึ้น
gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket
คุณสามารถยืนยันว่าระบบได้อัปโหลดไฟล์ไปยังที่เก็บข้อมูลที่สร้างขึ้นแล้วโดยแสดงรายการออบเจ็กต์ในที่เก็บข้อมูลหรือเรียกใช้คำสั่งต่อไปนี้
gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**
สร้างชุดข้อมูลและตาราง BigQuery ใน project-2
- สร้างชุดข้อมูล BigQuery ในโปรเจ็กต์
project-2
โดยทำตามขั้นตอนเหล่านี้- ป้อนชื่อชุดข้อมูลที่ไม่ซ้ำกันในส่วนรหัสชุดข้อมูล สําหรับ Codelab นี้ เราจะใช้
codelab_bqtransfer_dataset
- สําหรับประเภทสถานที่ ให้เลือกสถานที่ทางภูมิศาสตร์สําหรับชุดข้อมูล สําหรับ Codelab นี้ เราจะใช้ตำแหน่งเดียวกับที่เก็บข้อมูล Cloud Storage: สหรัฐอเมริกา (หลายภูมิภาคในสหรัฐอเมริกา)
- ป้อนชื่อชุดข้อมูลที่ไม่ซ้ำกันในส่วนรหัสชุดข้อมูล สําหรับ Codelab นี้ เราจะใช้
- สร้างตาราง BigQuery ภายใต้ชุดข้อมูล
codelab_bqtransfer_dataset
ที่สร้างขึ้นโดยทําตามขั้นตอนเหล่านี้- ในส่วนแหล่งที่มา ให้เลือกตารางว่างในรายการสร้างตารางจาก
- ในช่องตาราง ให้ป้อนชื่อตารางที่ต้องการสร้าง สําหรับ Codelab นี้ เราจะใช้ชื่อ
codelab-bqtransfer-table
- ตรวจสอบว่าได้ตั้งค่าช่องประเภทตารางเป็นตารางเนทีฟ
- ในส่วนสคีมา ให้ป้อนคำจำกัดความของ schema คุณสามารถป้อนข้อมูลสคีมาได้โดยคลิกแก้ไขเป็นข้อความ แล้วป้อนสคีมาต่อไปนี้ ซึ่งสอดคล้องกับรูปแบบของไฟล์ CSV ที่สร้างขึ้น
[{ "name": "name", "type": "STRING", "mode": "NULLABLE", "description": "The name" }, { "name": "age", "type": "INTEGER", "mode": "NULLABLE", "description": "The age" }]
ค่าใช้จ่าย
คุณต้องเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์ project-2
และ project-1
เพื่อใช้ทรัพยากร/API ของ Cloud เราขอแนะนำให้ปิดทรัพยากรที่ใช้เพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจาก 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
คุณใช้ระดับการเข้าถึงหรือกฎการเข้าสู่ระบบเพื่อแก้ไขการละเมิดการเข้าสู่ระบบได้ ในโค้ดแล็บนี้ เราจะใช้กฎขาเข้าที่กำหนดค่าด้วยข้อมูลประจำตัวของผู้ใช้ที่ถูกปฏิเสธ ซึ่งจะอนุญาตให้เข้าถึงบริการ 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
- บัญชีบริการที่เลือกต้องมีสิทธิ์ที่จําเป็นสําหรับทั้ง Cloud Storage ในโปรเจ็กต์ที่โฮสต์ที่เก็บข้อมูล
project-1
ในโค้ดแล็บนี้ - สําหรับ Codelab นี้ เราจะใช้บัญชีบริการที่สร้างใน
project-2
เป็นcodelab-sa@project-2.iam.gserviceaccount.com
- บัญชีบริการที่เลือกต้องมีสิทธิ์ที่จําเป็นสําหรับทั้ง Cloud Storage ในโปรเจ็กต์ที่โฮสต์ที่เก็บข้อมูล
- คลิกบันทึก
เนื่องจากเราเลือกเริ่มเลยเป็นตัวเลือกกำหนดเวลา การโอนครั้งแรกจะเริ่มขึ้นทันทีที่เลือกบันทึก
ยืนยันสถานะบริการโอนข้อมูล
วิธียืนยันสถานะการโอนข้อมูลที่กําหนดค่าไว้
- ไปที่หน้า 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 ภายในในระดับการเข้าถึงก็ได้ แต่สำหรับโค้ดแล็บนี้ เราจะใช้ 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 Transfer
- คลิกเรียกใช้การโอนเลย
- คลิกตกลง
ระบบจะเริ่มการโอนอีกรายการ คุณอาจต้องรีเฟรชหน้านี้เพื่อดู การโอนครั้งนี้จะไม่สำเร็จเนื่องจากมีการละเมิดการควบคุมบริการ VPC
ตรวจสอบการละเมิดการควบคุมบริการ VPC ของ Cloud Storage
กรองบันทึกการตรวจสอบโดยใช้ vpcServiceControlsUniqueIdentifier
ตามที่แสดงในสรุปการโอน
การละเมิดที่พบคือการละเมิดการส่งออก RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER
โดยมีรายละเอียดดังนี้
- ผู้ใช้หลักคือบัญชีบริการที่กำหนดค่าไว้ในบริการโอนข้อมูล (ไม่ว่าจะทริกเกอร์ด้วยตนเองหรือเรียกใช้การโอนข้อมูลที่กําหนดเวลาไว้ ผู้ใช้หลักที่ถูกปฏิเสธจะเหมือนกัน)
- บริการที่ได้รับผลกระทบคือ 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 perimeter-2
คราวนี้การคัดลอกชุดข้อมูลควรสำเร็จโดยไม่ละเมิดการควบคุมบริการ VPC
7. ล้างข้อมูล
แม้ว่าจะไม่มีค่าใช้จ่ายเพิ่มเติมสำหรับการใช้การควบคุมบริการ VPC เมื่อไม่ได้ใช้บริการ แต่แนวทางปฏิบัติแนะนำคือให้ล้างการตั้งค่าที่ใช้ในห้องทดลองนี้ นอกจากนี้ คุณยังลบอินสแตนซ์ VM และ/หรือโปรเจ็กต์ Cloud เพื่อหลีกเลี่ยงการเรียกเก็บเงินได้ด้วย การลบโปรเจ็กต์ที่อยู่ในระบบคลาวด์จะหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้ภายในโปรเจ็กต์นั้น
- หากต้องการลบที่เก็บข้อมูล 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. ยินดีด้วย
ในโค้ดแล็บนี้ คุณได้สร้างขอบเขตการควบคุมบริการ VPC บังคับใช้ และแก้ปัญหาแล้ว
ดูข้อมูลเพิ่มเติม
นอกจากนี้ คุณยังดูสถานการณ์ต่อไปนี้ได้ด้วย
- เพิ่ม
project-1
ในขอบเขตอื่นซึ่งจะปกป้อง BigQuery, บริการโอนข้อมูล BigQuery และ Cloud Storage ด้วย - โอนข้อมูล BigQuery จากแหล่งที่มาที่รองรับอื่นๆ
- จำกัดการเข้าถึงของผู้ใช้ตามแอตทริบิวต์อื่นๆ เช่น สถานที่ตั้งหรือนโยบายด้านอุปกรณ์
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 ทั่วไป