1. บทนำ
ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีปกป้อง BigQuery API โดยใช้การควบคุมบริการ VPC Codelab เริ่มต้นด้วยบริการ API ที่ไม่มีการป้องกันโดยขอบเขตบริการ ซึ่งอนุญาตให้เรียกใช้การค้นหาในชุดข้อมูลสาธารณะและบันทึกผลลัพธ์ในตารางโปรเจ็กต์ คําค้นหาจะทํางานในโปรเจ็กต์หนึ่ง และระบบจะสร้างตาราง (ที่บันทึกผลลัพธ์) ในอีกโปรเจ็กต์หนึ่ง ซึ่งเป็นการจำลองการตั้งค่าที่สามารถจัดเก็บข้อมูลในโปรเจ็กต์หนึ่ง แต่ต้องเข้าถึงโดยใช้โปรเจ็กต์อื่น
จากนั้นเราจะเปิดตัวขอบเขตบริการเพื่อปกป้องโปรเจ็กต์ข้อมูล คุณจะได้เรียนรู้วิธีแก้ไขการละเมิดที่พบโดยใช้กฎขาเข้าและกฎขาออก และเพิ่มระดับการเข้าถึงในภายหลังเพื่อจำกัดการเข้าถึงโดยใช้ที่อยู่ IP ภายใน เป้าหมายของ Codelab นี้มีดังนี้
- ทำความเข้าใจวิธีแก้ไขการละเมิดขาเข้าและขาออกโดยใช้กฎขาเข้าและกฎขาออกตามลำดับ
- ทำความเข้าใจสาเหตุของการละเมิดที่เฉพาะเจาะจง
- วิเคราะห์ขอบเขตของการแก้ไขการละเมิดที่ใช้
- แก้ไขการแก้ไข (กฎขาเข้า / ขาออก) เพื่อเปลี่ยนขอบเขตโดยใช้ประโยชน์จากตัวเลือกในการอนุญาตการรับส่งข้อมูลจากที่อยู่ IP ภายในในเครือข่าย VPC โดยใช้ระดับการเข้าถึง
2. การตั้งค่าทรัพยากรและข้อกำหนด
ก่อนเริ่มต้น
ในโค้ดแล็บนี้ เราจะถือว่าคุณทราบข้อมูลต่อไปนี้แล้ว
- ข้อมูลพื้นฐานในการเรียกใช้การค้นหา BigQuery: คุณสามารถดูCodelab นี้เพื่อเรียนรู้วิธีค้นหาชุดข้อมูล Wikipedia ใน BigQuery
- วิธีสร้างและจัดการโฟลเดอร์
- วิธีสร้างโปรเจ็กต์ในโฟลเดอร์หรือย้ายโปรเจ็กต์ที่มีอยู่ไปยังโฟลเดอร์
- วิธีสร้างนโยบายการเข้าถึงที่กำหนดขอบเขต
- วิธีสร้างและกำหนดค่าขอบเขตบริการ
- วิธีค้นหาการละเมิดนโยบายความปลอดภัยในบันทึก
ตั้งค่า
การตั้งค่าเริ่มต้นของเราออกแบบมาดังนี้
- องค์กร Google Cloud
- โฟลเดอร์ภายใต้องค์กร สำหรับ Codelab นี้ เราจะเรียกชื่อว่า
codelab-folder - โปรเจ็กต์ Google Cloud 2 รายการที่อยู่ในโฟลเดอร์เดียวกัน
codelab-folderสำหรับโค้ดแล็บนี้ เราจะเรียกฟีเจอร์เหล่านี้ว่าproject-1และproject-2- หากยังไม่ได้สร้างโฟลเดอร์และโปรเจ็กต์ ให้สร้างโฟลเดอร์ในคอนโซล Google Cloud ภายใต้องค์กร และสร้างโปรเจ็กต์ใหม่ 2 รายการภายใต้โฟลเดอร์ที่สร้างขึ้น
- สิทธิ์ที่จำเป็น:
- บทบาท IAM สำหรับการจัดการโฟลเดอร์: กำหนดที่ระดับโฟลเดอร์
- บทบาท IAM สำหรับการจัดการโปรเจ็กต์: กำหนดที่ระดับโปรเจ็กต์
- บทบาท IAM ที่จำเป็นในการกำหนดค่าการควบคุมบริการ VPC: กำหนดที่ระดับองค์กร
- บทบาท IAM สำหรับการจัดการ BigQuery: มอบหมายที่ระดับโปรเจ็กต์
- บทบาท IAM สำหรับการจัดการอินสแตนซ์ Compute Engine: กำหนดที่ระดับโปรเจ็กต์
- บัญชีสำหรับการเรียกเก็บเงินของทั้ง 2 โปรเจ็กต์ ได้แก่
project-2และproject-1
สร้างขอบเขตบริการปกติ
ในโค้ดแล็บนี้ เราจะใช้ขอบเขตบริการปกติที่ปกป้อง project-1
- สร้างขอบเขตปกติ
perimeter-1แล้วเพิ่มproject-1
สร้าง VM ของ Compute Engine
ใน Codelab นี้ เราจะใช้อินสแตนซ์ Compute Engine 1 รายการใน project-2 ซึ่งอยู่ใน us-central1 และใช้เครือข่าย VPC เริ่มต้นชื่อ default
- คุณสามารถดูเอกสารประกอบเป็นแนวทางในการสร้างอินสแตนซ์ Compute Engine จากอิมเมจสาธารณะ
ค่าใช้จ่าย
คุณต้องเปิดใช้การเรียกเก็บเงินใน Google Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ เราขอแนะนำให้ปิดทรัพยากรที่ใช้แล้วเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจาก Codelab นี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า $300 USD
ทรัพยากรที่ทำให้เกิดค่าใช้จ่ายคืออินสแตนซ์ BigQuery และ Compute Engine คุณสามารถประเมินค่าใช้จ่ายได้โดยใช้เครื่องคำนวณราคาของ BigQuery และเครื่องคำนวณราคาของ Compute Engine
3. สิทธิ์เข้าถึง BigQuery โดยไม่มีข้อจำกัดของการควบคุมบริการ VPC
ค้นหาชุดข้อมูลสาธารณะและบันทึกผลลัพธ์ใน project-1
- เข้าถึง
project-2และproject-1เพื่อยืนยันว่าคุณเข้าถึง BigQuery API ได้หรือไม่โดยไปที่หน้า BigQuery Studio คุณควรทำได้เนื่องจากแม้ว่าproject-1จะอยู่ในขอบเขตบริการ แต่ขอบเขตดังกล่าวก็ยังไม่ได้ปกป้องบริการใดๆ - จาก
project-2ให้เรียกใช้การค้นหาต่อไปนี้เพื่อค้นหาชุดข้อมูลสาธารณะ
SELECT name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY name
ORDER BY total DESC
LIMIT 10;
หลังจากเรียกใช้การค้นหาในชุดข้อมูลสาธารณะ (ขณะที่ยังอยู่ใน project-2) ให้ทำดังนี้
- คลิกบันทึกผลลัพธ์ แล้วเลือกตาราง BigQuery (ดูภาพหน้าจอด้านล่าง)

- เลือก
project-1เป็นโปรเจ็กต์ปลายทาง - ตั้งชื่อชุดข้อมูลเป็น
codelab_dataset(เลือกสร้างชุดข้อมูลใหม่ เว้นแต่จะใช้ชุดข้อมูลที่มีอยู่)
- ตั้งชื่อตารางเป็น
codelab-table - คลิกบันทึก
ระบบจัดเก็บข้อมูลชุดข้อมูลสาธารณะใน project-1 เรียบร้อยแล้ว ซึ่งเป็นผลมาจากการเรียกใช้การค้นหาจาก project-2
บันทึกชุดข้อมูลการค้นหาใน project-1 จาก project-2
ขณะที่ยังอยู่ใน project-2 BigQuery Studio ให้เรียกใช้การค้นหาต่อไปนี้เพื่อเลือกข้อมูลจาก
- โปรเจ็กต์:
project-1 - ชุดข้อมูล:
codelab_dataset - ตาราง:
codelab-table
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
การค้นหาควรทํางานได้สําเร็จ เนื่องจากทั้ง project-2 และ project-1 ไม่ถูกจํากัดไม่ให้ใช้ BigQuery ระบบอนุญาตให้เข้าถึง BigQuery จากและไปยังทุกที่ตราบใดที่ผู้ใช้มีสิทธิ์ IAM ที่เหมาะสม
แผนภาพนี้แสดงกระบวนการเมื่อผู้ใช้หลักค้นหาชุดข้อมูล BigQuery การค้นหา BigQuery แต่ละครั้งจะเริ่มต้นงาน BigQuery ซึ่งจะดำเนินการจริง ในกรณีนี้คือการดึงข้อมูล การเข้าถึงหลักจะแสดงจากอินสแตนซ์ Compute Engine และจากอินเทอร์เน็ต ขณะที่การค้นหาจะมาจากชุดข้อมูลสาธารณะและจากโปรเจ็กต์ Google Cloud แยกต่างหาก กระบวนการค้นหาข้อมูล (
GetData) สำเร็จโดยไม่ถูกบล็อกโดยการควบคุมบริการ VPC
4. ปกป้อง BigQuery API ในโปรเจ็กต์ชุดข้อมูลต้นทาง
แก้ไขการกำหนดค่าของขอบเขต perimeter-1 และจำกัดบริการ BigQuery API พร้อมกับทรัพยากรที่ได้รับการป้องกันซึ่งเป็น project-1

ยืนยันการบังคับใช้ขอบเขตบริการ
จาก project-2 ให้เรียกใช้การค้นหาต่อไปนี้ใน BigQuery Studio ดังที่ทำในขั้นตอนก่อนหน้า
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
จะเกิดการละเมิดRESOURCES_NOT_IN_SAME_SERVICE_PERIMETERการควบคุมบริการ VPC

บันทึกการตรวจสอบการละเมิดจะอยู่ใน project-1 เนื่องจากเป็นตำแหน่งที่เกิดการละเมิดข้ามขอบเขต คุณกรองบันทึกได้ด้วย vpcServiceControlsUniqueId ที่สังเกตได้ (แทนที่ VPC_SC_DENIAL_UNIQUE_ID ด้วยรหัสที่ไม่ซ้ำกันที่สังเกตได้)
severity=ERROR
resource.type="audited_resource"
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="[*VPC_SC_DENIAL_UNIQUE_ID*]"
การละเมิดคือegressViolationsที่มีลักษณะดังนี้
principalEmail: [บัญชีผู้ใช้ที่เรียกใช้การค้นหา]callerIp: [ที่อยู่ IP ของ User Agent ที่เรียกใช้การค้นหา]
"egressViolations": [
{
"targetResource": "projects/project-2",
"sourceType": "Resource",
"source": "projects/project-1",
"servicePerimeter": "accessPolicies/REDACTED/servicePerimeters/perimeter-1",
"targetResourcePermissions": [ "bigquery.jobs.create"]
} ],
5. แก้ไขการละเมิดเพื่อสร้างงาน BigQuery
แผนภาพนี้แสดงให้เห็นว่าเมื่อใดที่พรินซิเพิลเรียกใช้การค้นหาจาก
project-2 สำหรับชุดข้อมูลใน project-1 การดำเนินการเพื่อสร้างงาน BigQuery จากโปรเจ็กต์ชุดข้อมูล (project-1) ในโปรเจ็กต์ที่เรียกใช้การค้นหา (project-2) จะล้มเหลวเนื่องจากการละเมิดขาออกของการควบคุมบริการ VPC เนื่องจากขอบเขตบริการ perimeter-1 ปกป้อง BigQuery API เมื่อมีขอบเขตแล้ว จะไม่มีการเริ่มคำขอ BigQuery API จาก project-1 ไปยังภายนอกขอบเขต หรือเริ่มจากภายนอกขอบเขตไปยังโปรเจ็กต์ที่มีการป้องกัน เว้นแต่จะได้รับอนุญาตจากการกำหนดค่าขอบเขตบริการ
คุณแก้ไขการละเมิดขาออกได้โดยการสร้างกฎขาออกซึ่งอิงตามข้อมูลต่อไปนี้
- แหล่งที่มา (FROM): กล่าวคือ อีเมลของผู้ใช้และบริบท (เช่น ที่อยู่ IP ของผู้โทร สถานะอุปกรณ์ สถานที่ตั้ง ฯลฯ)
- ปลายทาง (TO): ได้แก่ ทรัพยากรเป้าหมาย บริการ และเมธอดหรือสิทธิ์
หากต้องการแก้ไขการละเมิดขาออกที่พบ ให้สร้างกฎขาออกที่อนุญาตการรับส่งไปยัง targetResource (project-2) โดยบัญชีผู้ใช้ที่เรียกใช้การค้นหา (user@example.com) ในบริการ BigQuery และวิธีการ/ สิทธิ์ bigquery.jobs.create

ลักษณะการทำงานที่คาดไว้จากกฎขาออกที่กำหนดค่าไว้
- FROM | ข้อมูลระบุตัวตน: อนุญาตให้เฉพาะข้อมูลระบุตัวตนที่ระบุ
user@example.comข้ามขอบเขตของ Perimeter เท่านั้น - TO | projects: ข้อมูลประจำตัวที่ระบุจะข้ามขอบเขตของ Perimeter ได้ก็ต่อเมื่อปลายทางเป็นโปรเจ็กต์
project-2ที่ระบุ - TO | บริการ: ข้อมูลประจำตัวที่ระบุจะเริ่มการรับส่งข้อมูลภายนอกขอบเขตไปยังโปรเจ็กต์ที่ระบุได้ก็ต่อเมื่อการเรียก API เป็นของบริการและเมธอดที่ระบุ มิฉะนั้น เช่น หากผู้ใช้พยายามใช้บริการอื่นที่ได้รับการปกป้องโดยขอบเขตบริการ ระบบจะบล็อกการดำเนินการเนื่องจากไม่อนุญาตให้ใช้บริการอื่นๆ
ทดสอบการแก้ไข: กฎขาออก
เมื่อตั้งค่ากฎขาออกแล้ว ให้เรียกใช้การค้นหาเดียวกัน
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
การละเมิดอีกครั้งจะเกิดขึ้น ซึ่งคราวนี้เป็นการละเมิดขาเข้าของ NO_MATCHING_ACCESS_LEVEL การละเมิดใหม่แตกต่างจากการละเมิดครั้งแรกในแง่ของโปรเจ็กต์เป้าหมายและวิธีการ

การละเมิดใหม่เป็นการละเมิดขาเข้าที่มี
principalEmail: [บัญชีผู้ใช้ที่เรียกใช้การค้นหา]callerIp: [ที่อยู่ IP ของ User Agent ที่เรียกใช้การค้นหา]
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/REDACTED/servicePerimeters/perimeter-1"
targetResource: "projects/project-1"
targetResourcePermissions: [0: "bigquery.tables.getData"]}
]
การละเมิดสำหรับเมธอด bigquery.tables.getData เกิดจากการเรียก API ที่เริ่มต้นโดยงาน BigQuery ซึ่งพยายามรับข้อมูลจากตาราง BigQuery
6. การแก้ไขการละเมิดเพื่อรับข้อมูลตาราง BigQuery
กฎขาเข้าจะแก้ไขการละเมิดขาเข้า พร้อมทั้งให้การควบคุมแบบละเอียดเกี่ยวกับผู้ที่ได้รับอนุญาตให้ข้ามขอบเขตของบริการ รวมถึงบริบทของการเข้าถึงที่อนุญาต เช่น โปรเจ็กต์ต้นทาง/ เป้าหมาย และเมธอด API ที่เข้าถึงได้
การละเมิดขาเข้าได้รับการแก้ไขโดยกฎขาเข้าซึ่งกำหนดค่าด้วย
- แหล่งที่มา (FROM): กล่าวคือ อีเมลของผู้ใช้และบริบท (เช่น ที่อยู่ IP ของผู้โทร สถานะอุปกรณ์ สถานที่ตั้ง ฯลฯ)
- ปลายทาง (TO): ได้แก่ ทรัพยากรเป้าหมาย บริการ และเมธอดหรือสิทธิ์
กฎขาเข้าจะอนุญาตการรับส่งข้อมูลไปยัง project-1 โดยผู้ใช้ที่ระบุในบริการและวิธีการที่ระบุ

ลักษณะการทำงานที่คาดไว้จากกฎขาเข้าที่กำหนดค่าไว้
- FROM | ข้อมูลระบุตัวตน: อนุญาตให้เฉพาะข้อมูลระบุตัวตนที่ระบุ
user@example.comข้ามขอบเขตของ Perimeter เท่านั้น - TO | projects: ระบุตัวตนที่ระบุจะข้ามขอบเขตของ Perimeter ได้ก็ต่อเมื่อปลายทางเป็นโปรเจ็กต์
project-1ที่ระบุ - ถึง | บริการ: ข้อมูลประจำตัวที่ระบุจะเริ่มการรับส่งภายในขอบเขตได้ก็ต่อเมื่อการเรียก API เป็นของ BigQuery API และเมธอดที่ระบุ
bigquery.tables.getData
การดำเนินการของคำค้นหาที่เหมือนกันควรทำงานได้อย่างเหมาะสมนับจากนี้เป็นต้นไปโดยไม่มีการละเมิดการควบคุมบริการ VPC
เราได้จำกัด BigQuery API ใน project-1 เรียบร้อยแล้ว เพื่อให้ใช้ได้เฉพาะ user@example.com เท่านั้น และ user2@example.com จะใช้ไม่ได้
แผนภาพนี้แสดงให้เห็นว่าผู้ใช้ 2 รายที่แตกต่างกันพยายามค้นหาชุดข้อมูลเดียวกันอย่างไร การเข้าถึงโดย
user2@example.com (เส้นสีน้ำเงินประ) ถูกปฏิเสธโดยการควบคุมบริการ VPC เนื่องจากไม่ได้รับอนุญาตให้เรียกใช้การดำเนินการ BigQuery จากหรือไปยัง project-1 โดยการกำหนดค่าขอบเขตบริการ การเข้าถึงโดย user@example.com (เส้นทึบสีเขียว) สำเร็จ เนื่องจากได้รับการอนุญาตจากการกำหนดค่าการควบคุมบริการ VPC ให้ดำเนินการจากและไปยัง project-1
7. จำกัดการรับส่งข้อมูลที่ขอบเขตบริการอนุญาตตามที่อยู่ IP ภายใน
การกำหนดค่าปัจจุบันช่วยให้ผู้ใช้ที่ได้รับมอบหมายสามารถเรียกใช้การค้นหาใน BigQuery ใน project-1 จากทุกที่บนอินเทอร์เน็ตได้ หากได้รับสิทธิ์ IAM ในการค้นหาข้อมูล และตราบใดที่ผู้ใช้ยังคงใช้บัญชีของตน ในมุมมองด้านความปลอดภัย หมายความว่าหากบัญชีถูกบุกรุก บุคคลใดก็ตามที่ได้รับสิทธิ์เข้าถึงบัญชีจะสามารถเข้าถึงข้อมูล BigQuery ได้โดยไม่มีข้อจำกัดเพิ่มเติม
คุณสามารถใช้ข้อจำกัดเพิ่มเติมได้โดยใช้ระดับการเข้าถึงในกฎขาเข้าและขาออกเพื่อระบุบริบทของผู้ใช้ เช่น คุณสามารถอนุญาตการเข้าถึงตาม IP ต้นทางร่วมกับกฎขาเข้าที่กำหนดค่าไว้ก่อนหน้านี้ซึ่งให้สิทธิ์เข้าถึงตามข้อมูลประจำตัวของผู้โทร การเข้าถึงตาม IP ต้นทางสามารถทำได้ทั้งสำหรับช่วง CIDR ของ IP สาธารณะ โดยมีเงื่อนไขว่าไคลเอ็นต์ของผู้ใช้ต้องมี IP สาธารณะที่กำหนดให้ หรือโดยใช้ที่อยู่ IP ภายในหากไคลเอ็นต์ของผู้ใช้ทำงานจากโปรเจ็กต์ Google Cloud
สร้างระดับการเข้าถึงด้วยเงื่อนไขการเข้าถึงที่อยู่ IP ภายใน
ในโฟลเดอร์นโยบายการเข้าถึงที่กำหนดขอบเขตเดียวกัน ให้เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทเพื่อสร้างระดับการเข้าถึง
- ในหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบท ให้เลือกสร้างระดับการเข้าถึง
- ในแผงระดับการเข้าถึงใหม่ ให้ทำดังนี้
- ระบุชื่อ: คุณใช้
codelab-alได้ - ในส่วนเงื่อนไข ให้คลิกเครือข่ายย่อย IP
- เลือกแท็บ IP ส่วนตัว แล้วคลิกเลือกเครือข่าย VPC
- จากแผงเพิ่มเครือข่าย VPC คุณจะเรียกดูและค้นหาเครือข่าย
defaultหรือป้อนชื่อเครือข่ายแบบเต็มด้วยตนเองในรูปแบบ//compute.googleapis.com/projects/project-2/global/networks/defaultก็ได้ - คลิกเพิ่มเครือข่าย VPC
- คลิกเลือกเครือข่ายย่อย IP
- เลือกภูมิภาคที่อินสแตนซ์ VM อยู่ สำหรับ Codelab นี้คือ
us-central1 - คลิกบันทึก
- ระบุชื่อ: คุณใช้
เราได้สร้างระดับการเข้าถึงแล้ว แต่ยังไม่ได้บังคับใช้กับนโยบายขอบเขตหรือนโยบายขาเข้า/ขาออก

เพิ่มระดับการเข้าถึงให้กับกฎขาเข้า
หากต้องการบังคับใช้ว่าผู้ใช้ที่ได้รับอนุญาตตามกฎขาเข้าจะต้องได้รับการยืนยันเทียบกับระดับการเข้าถึงด้วย คุณจะต้องกำหนดค่าระดับการเข้าถึงในกฎขาเข้า กฎขาเข้าที่ให้สิทธิ์เข้าถึงเพื่อค้นหาข้อมูลอยู่ใน perimeter-1 แก้ไขกฎขาเข้าเพื่อกำหนดแหล่งที่มาเป็นระดับการเข้าถึง codelab-al

การทดสอบการกำหนดค่าใหม่
หลังจากเพิ่มระดับการเข้าถึงในกฎขาเข้าแล้ว การค้นหา BigQuery เดียวกันจะล้มเหลว เว้นแต่จะดำเนินการจากไคลเอ็นต์ในเครือข่าย VPC default สำหรับโปรเจ็กต์ project-2 หากต้องการยืนยันลักษณะการทำงานนี้ ให้เรียกใช้การค้นหาจากคอนโซล Google Cloud ขณะที่อุปกรณ์ปลายทางเชื่อมต่ออินเทอร์เน็ตอยู่ การค้นหาจะสิ้นสุดลงโดยไม่สำเร็จ พร้อมกับการระบุการละเมิดขาเข้า
คุณเรียกใช้คำค้นหาเดียวกันจากเครือข่าย VPC default ที่อยู่ใน project-2 ได้ ในทำนองเดียวกัน การเรียกใช้การค้นหา BigQuery เดียวกันจากอินสแตนซ์ Compute Engine ที่อยู่ใน project-2 โดยใช้เครือข่าย VPC default ก็จะล้มเหลวเช่นกัน เนื่องจากกฎขาเข้ายังคงได้รับการกำหนดค่าให้อนุญาตเฉพาะผู้ใช้หลัก user@example.com อย่างไรก็ตาม VM ใช้บัญชีบริการเริ่มต้นของ Compute Engine
หากต้องการเรียกใช้คำสั่งเดียวกันจากอินสแตนซ์ Compute Engine ใน project-2 ให้สำเร็จ โปรดตรวจสอบว่า
- VM มีขอบเขตการเข้าถึงเพื่อใช้ BigQuery API ซึ่งทำได้โดยเลือกอนุญาตให้เข้าถึง Cloud APIs ทั้งหมดโดยสมบูรณ์เป็นขอบเขตการเข้าถึง VM
- บัญชีบริการที่แนบกับ VM ต้องมีสิทธิ์ IAM เพื่อดำเนินการต่อไปนี้
- สร้างงาน BigQuery ใน
project-2 - รับข้อมูล BigQuery จากตาราง BigQuery ที่อยู่ใน
project-1
- สร้างงาน BigQuery ใน
- กฎขาเข้าและขาออกต้องอนุญาตบัญชีบริการเริ่มต้นของ Compute Engine
ตอนนี้เราต้องเพิ่มบัญชีบริการเริ่มต้นของ Compute Engine ในกฎขาเข้า (เพื่ออนุญาตให้รับข้อมูลจากตาราง BigQuery) และในกฎขาออก (เพื่ออนุญาตให้สร้างงาน BigQuery)

จากอินสแตนซ์ Compute Engine ใน project-2 บนเครือข่าย VPC ของ default ให้เรียกใช้คำสั่ง bq query ต่อไปนี้
bq query --nouse_legacy_sql \
'SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;'
การกำหนดค่าปัจจุบันจะทำให้คำสั่ง BigQuery ทำงานได้สำเร็จในกรณีต่อไปนี้เท่านั้น
- ทำงานใน VM โดยใช้เครือข่าย VPC เริ่มต้นใน
project-2และ - อยู่ในภูมิภาค
us-central1ที่ระบุ (เครือข่ายย่อย IP) และ - เรียกใช้โดยใช้บัญชีบริการ Compute Engine เริ่มต้นที่กำหนดค่าไว้ในขอบเขตบริการ
คำสั่งการค้นหา BigQuery จะล้มเหลวหากเรียกใช้จากที่อื่น ซึ่งรวมถึง
- หากเรียกใช้ใน VM ที่ใช้เครือข่าย VPC เริ่มต้นใน
project-2แต่ตั้งอยู่ในภูมิภาคอื่นที่ไม่ใช่ซับเน็ตที่เพิ่มในระดับการเข้าถึง หรือ - หากผู้ใช้เรียกใช้
user@example.comด้วยไคลเอ็นต์ของผู้ใช้บนอินเทอร์เน็ต
แผนภาพนี้แสดงการเข้าถึงที่เริ่มต้นโดยพรินซิเพิลเดียวกัน
user@example.com จาก 2 ตำแหน่งที่แตกต่างกัน ได้แก่ อินเทอร์เน็ตและอินสแตนซ์ Compute Engine การควบคุมบริการ VPC จะบล็อกการเข้าถึง BigQuery โดยตรงจากอินเทอร์เน็ต (เส้นประสีน้ำเงิน) ในขณะที่อนุญาตการเข้าถึงจาก VM (เส้นทึบสีเขียว) ขณะที่แอบอ้างเป็นบัญชีบริการเริ่มต้นของ Compute Engine การเข้าถึงที่อนุญาตเป็นเพราะมีการกำหนดค่าขอบเขตบริการเพื่ออนุญาตการเข้าถึงทรัพยากรที่มีการป้องกันจากที่อยู่ IP ภายใน
8. ล้างข้อมูล
แม้ว่าจะไม่มีการเรียกเก็บเงินแยกต่างหากสำหรับการใช้การควบคุมบริการ VPC เมื่อไม่ได้ใช้บริการ แต่แนวทางปฏิบัติแนะนำคือการล้างข้อมูลการตั้งค่าที่ใช้ในห้องทดลองนี้ นอกจากนี้ คุณยังลบอินสแตนซ์ VM และชุดข้อมูล BigQuery หรือโปรเจ็กต์ Google Cloud เพื่อหลีกเลี่ยงการเรียกเก็บเงินได้ด้วย การลบโปรเจ็กต์ Cloud จะเป็นการหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้ภายในโปรเจ็กต์นั้น
- หากต้องการลบอินสแตนซ์ VM ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าอินสแตนซ์ VM
- เลือกช่องทำเครื่องหมายทางด้านซ้ายของชื่ออินสแตนซ์ VM จากนั้นเลือกลบ แล้วคลิกลบอีกครั้งเพื่อยืนยัน

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