การควบคุมบริการ VPC - Codelab การป้องกัน BigQuery I

1. บทนำ

ใน Codelab นี้ คุณจะได้เรียนรู้วิธีปกป้อง BigQuery API โดยใช้การควบคุมบริการ VPC Codelab เริ่มต้นโดยไม่มีบริการ API ที่มีการป้องกันโดยขอบเขตบริการ ซึ่งทำให้เรียกใช้การค้นหาในชุดข้อมูลสาธารณะได้ และบันทึกผลลัพธ์ลงในตารางโปรเจ็กต์ การค้นหาจะทำงานในโปรเจ็กต์หนึ่ง และระบบจะสร้างตาราง (ที่มีการบันทึกผลลัพธ์) ไว้ในอีกโปรเจ็กต์หนึ่ง ซึ่งเลียนแบบการตั้งค่าที่สามารถจัดเก็บข้อมูลไว้ในโปรเจ็กต์หนึ่ง แต่ต้องเข้าถึงโดยใช้โปรเจ็กต์อื่น

ถัดไป เราจะแนะนำขอบเขตบริการเพื่อปกป้องโปรเจ็กต์ข้อมูล คุณจะได้เรียนรู้วิธีแก้ไขการละเมิดที่พบโดยใช้กฎขาเข้าและกฎข้อมูลขาออก จากนั้นจึงเพิ่มระดับการเข้าถึงเพื่อจำกัดการเข้าถึงโดยใช้ที่อยู่ IP ภายใน เป้าหมายของ Codelab นี้คือ

  • ทำความเข้าใจวิธีการแก้ไขการละเมิดขาเข้าและขาออกโดยใช้กฎขาเข้าและขาออกตามลำดับ
  • ทำความเข้าใจสาเหตุของการละเมิดที่เฉพาะเจาะจง
  • วิเคราะห์ขอบเขตของการแก้ไขการละเมิดที่ใช้
  • แก้ไขการแก้ไข (กฎขาเข้า / ขาออก) เพื่อเปลี่ยนขอบเขตโดยใช้ประโยชน์จากตัวเลือกเพื่ออนุญาตการรับส่งข้อมูลจากที่อยู่ IP ภายในในเครือข่าย VPC โดยใช้ระดับการเข้าถึง

2. การตั้งค่าและข้อกำหนดของทรัพยากร

ก่อนเริ่มต้น

ใน Codelab นี้ เราถือว่าคุณทราบสิ่งต่อไปนี้แล้ว

ตั้งค่า

การตั้งค่าเริ่มต้นของเรามีการออกแบบดังนี้

การออกแบบเบื้องต้นพร้อมขอบเขตบริการซึ่งป้องกันไม่ให้มี API

สร้างขอบเขตบริการปกติ

ใน Codelab นี้ เราจะใช้ขอบเขตบริการปกติเพื่อปกป้อง project-1

สร้าง VM ของ Compute Engine

ใน Codelab นี้ เราจะใช้อินสแตนซ์ Compute Engine 1 รายการใน project-2 ซึ่งอยู่ใน us-central1 และใช้เครือข่าย VPC เริ่มต้นชื่อ default

ค่าใช้จ่าย

คุณต้องเปิดใช้การเรียกเก็บเงินใน Google Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ เราขอแนะนำให้คุณปิดทรัพยากรที่ใช้แล้วเพื่อหลีกเลี่ยงการเรียกเก็บเงินซ้ำนอกเหนือจาก Codelab ผู้ใช้ Google Cloud ใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า $300 USD

ทรัพยากรที่ทำให้เกิดค่าใช้จ่ายคือ BigQuery และอินสแตนซ์ Compute Engine คุณสามารถประมาณค่าใช้จ่ายได้โดยใช้เครื่องคำนวณราคาของ BigQuery และเครื่องคำนวณราคาของ Compute Engine

3. การเข้าถึง BigQuery โดยไม่มีข้อจำกัดการควบคุมบริการ VPC

ค้นหาชุดข้อมูลสาธารณะและบันทึกผลลัพธ์ใน project-1

  1. เข้าถึง project-2 และ project-1 เพื่อตรวจสอบว่าคุณเข้าถึง BigQuery API ได้หรือไม่โดยไปที่หน้า BigQuery Studio คุณควรสามารถทำเช่นนั้นได้ เพราะแม้ว่า project-1 จะอยู่ในขอบเขตบริการ แต่ขอบเขตยังไม่ได้ปกป้องบริการใดๆ เลย
  2. จาก 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) ให้ทำดังนี้

  1. คลิกบันทึกผลลัพธ์ แล้วเลือกตาราง BigQuery (ดูภาพหน้าจอด้านล่าง) บันทึกผลลัพธ์ของ BigQuery
  2. เลือก project-1 เป็นโปรเจ็กต์ปลายทาง
  3. ตั้งชื่อชุดข้อมูลเป็น codelab_dataset (เลือกสร้างชุดข้อมูลใหม่ เว้นแต่ว่าจะใช้ชุดข้อมูลที่มีอยู่) เลือกโปรเจ็กต์ปลายทางขณะบันทึกผลลัพธ์ของ BigQuery
  4. ตั้งชื่อตารางเป็น codelab-table
  5. คลิกบันทึก

ระบบจัดเก็บข้อมูลชุดข้อมูลสาธารณะใน project-1 เรียบร้อยแล้วอันเป็นผลมาจากการดำเนินการค้นหาจาก project-2

บันทึกชุดข้อมูลการค้นหาใน project-1 จาก project-2 แล้ว

ขณะที่ยังอยู่ใน BigQuery Studio ของ project-2 ให้เรียกใช้การค้นหาต่อไปนี้เพื่อเลือกข้อมูลจาก

  • โปรเจ็กต์: 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 ที่เหมาะสม

การตั้งค่า Codelab โดยไม่มีขอบเขตบริการการควบคุมบริการ VPC แผนภาพนี้แสดงกระบวนการเมื่อผู้ใช้หลักค้นหาชุดข้อมูล 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

การละเมิดการควบคุมบริการ 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

การรับส่งข้อมูลขาออกสำหรับการสร้างงาน 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

แก้ไขการกำหนดค่าการละเมิดขาออก

ลักษณะการทำงานที่คาดไว้จากกฎข้อมูลขาออกที่กำหนดค่าไว้:

  • จาก | ข้อมูลระบุตัวตน: เฉพาะข้อมูลประจำตัวที่ระบุ user@example.com เท่านั้นที่ต้องได้รับอนุญาตให้ข้ามผ่านขอบเขต
  • ถึง | โปรเจ็กต์: ข้อมูลประจำตัวที่ระบุจะข้ามขอบเขตได้ต่อเมื่อปลายทางเป็นโปรเจ็กต์ที่ระบุ project-2
  • ถึง | บริการ: ข้อมูลประจำตัวที่ระบุจะเริ่มการรับส่งข้อมูลนอกขอบเขตไปยังโปรเจ็กต์ที่ระบุได้ต่อเมื่อการเรียก API มีไว้สำหรับบริการและเมธอดที่ระบุเท่านั้น มิฉะนั้น เช่น หากผู้ใช้ลองใช้บริการอื่นที่ได้รับการป้องกันโดยขอบเขตบริการ ระบบจะบล็อกการดำเนินการเนื่องจากไม่อนุญาตให้ใช้บริการอื่นๆ

ทดสอบการแก้ไข: กฎข้อมูลขาออก

เมื่อใช้กฎข้อมูลขาออกแล้ว ให้เรียกใช้การค้นหาเดียวกัน

SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;

จะมีการละเมิดอีกครั้ง โดยคราวนี้จะมีการละเมิดข้อมูลขาเข้า NO_MATCHING_ACCESS_LEVEL การละเมิดใหม่แตกต่างจากการละเมิดแรกในแง่ของโปรเจ็กต์เป้าหมายและวิธีการ

การละเมิดการควบคุมบริการ VPC ขาเข้า

การละเมิดใหม่เป็นการละเมิดขาเข้าที่มี

  • 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 โดยผู้ใช้ที่ระบุในบริการและเมธอดที่ระบุ

การแก้ไขการละเมิดข้อมูลขาเข้า

ลักษณะการทำงานที่คาดไว้จากกฎขาเข้าที่กำหนดค่าไว้:

  • จาก | ข้อมูลระบุตัวตน: เฉพาะข้อมูลประจำตัวที่ระบุ user@example.com เท่านั้นที่ต้องได้รับอนุญาตให้ข้ามผ่านขอบเขต
  • ถึง | โปรเจ็กต์: ข้อมูลประจำตัวที่ระบุจะข้ามขอบเขตได้ต่อเมื่อปลายทางเป็นโปรเจ็กต์ที่ระบุ project-1
  • ถึง | บริการ: ข้อมูลระบุตัวตนที่ระบุจะเริ่มการรับส่งข้อมูลภายในขอบเขตได้ก็ต่อเมื่อการเรียก API มีไว้สำหรับ BigQuery API และเมธอดที่ระบุ bigquery.tables.getData เท่านั้น

การดำเนินการค้นหาที่เหมือนกันควรทำงานได้อย่างถูกต้องโดยไม่มีการละเมิดการควบคุมบริการ VPC

เราจำกัด BigQuery API ใน project-1 สำเร็จแล้วเพื่อให้ user@example.com ใช้งานได้เท่านั้น ไม่ใช่ user2@example.com

ขอบเขตการควบคุมบริการ VPC ที่ปกป้อง BigQuery API แผนภาพนี้แสดงผู้ใช้หลัก 2 รายที่ต่างกันพยายามค้นหาชุดข้อมูลเดียวกัน การควบคุมบริการ VPC ปฏิเสธการเข้าถึงโดย user2@example.com (เส้นประสีน้ำเงิน) เนื่องจากการกำหนดค่าขอบเขตบริการไม่ได้รับอนุญาตให้เรียกใช้การดำเนินการ 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 ภายใน

เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทภายใต้โฟลเดอร์นโยบายการเข้าถึงที่กำหนดขอบเขตเดียวกันเพื่อสร้างระดับการเข้าถึง

  1. ในหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบท ให้เลือกสร้างระดับการเข้าถึง
  2. ในแผงระดับการเข้าถึงใหม่ ให้ทำดังนี้
    1. ระบุชื่อ: คุณใช้ codelab-al ได้
    2. ในส่วนเงื่อนไข ให้คลิกเครือข่ายย่อย IP
    3. เลือกแท็บ IP ส่วนตัว แล้วคลิกเลือกเครือข่าย VPC
    4. จากแผงเพิ่มเครือข่าย VPC คุณสามารถเรียกดูและค้นหาเครือข่าย default หรือป้อนชื่อเครือข่ายแบบเต็มในรูปแบบ //compute.googleapis.com/projects/project-2/global/networks/default ด้วยตนเองได้
    5. คลิกเพิ่มเครือข่าย VPC
    6. คลิกเลือกซับเน็ต IP
    7. เลือกภูมิภาคของอินสแตนซ์ VM สำหรับ Codelab นี้ ค่าจะเป็น us-central1
    8. คลิกบันทึก

เราได้สร้างระดับการเข้าถึงแล้ว ซึ่งยังไม่ได้บังคับใช้กับนโยบายขอบเขตหรือนโยบายขาเข้า/ขาออก

ระดับการเข้าถึงที่กำหนดค่าด้วยเครือข่ายย่อย IP

เพิ่มระดับการเข้าถึงไปยังกฎขาเข้า

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

ระดับการเข้าถึงกับเครือข่าย VPC

การทดสอบการกำหนดค่าใหม่

การค้นหา 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
  • บัญชีบริการ Compute Engine เริ่มต้นต้องได้รับอนุญาตจากกฎขาเข้าและขาออก

ตอนนี้เราต้องเพิ่มบัญชีบริการเริ่มต้นของ Compute Engine ในกฎขาเข้า (เพื่ออนุญาตให้ดึงข้อมูลจากตาราง BigQuery) และในกฎข้อมูลขาออก (เพื่ออนุญาตการสร้างงาน BigQuery)

การกำหนดค่าขอบเขตบริการการควบคุมบริการ VPC ที่มีระดับการเข้าถึง

จากอินสแตนซ์ Compute Engine ใน project-2 บนเครือข่าย VPC default ให้เรียกใช้คำสั่งการค้นหา bq ต่อไปนี้

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 กับลูกค้าที่เป็นผู้ใช้บนอินเทอร์เน็ต

ขอบเขตบริการอนุญาตการเข้าถึงบัญชีบริการเริ่มต้นของ GCE แผนภาพนี้แสดงการเข้าถึงที่เริ่มต้นโดยผู้ใช้หลักคนเดียวกัน ซึ่งก็คือ user@example.com จาก 2 ตำแหน่งที่ต่างกัน คือ อินสแตนซ์อินเทอร์เน็ตและอินสแตนซ์ Compute Engine การควบคุมบริการ VPC จะบล็อกการเข้าถึง BigQuery โดยตรงจากอินเทอร์เน็ต (เส้นประสีน้ำเงิน) ส่วนการเข้าถึงจาก VM (เส้นทึบสีเขียว) ขณะแอบอ้างบัญชีบริการเริ่มต้นของ Compute Engine การเข้าถึงที่อนุญาตเกิดขึ้นเนื่องจากมีการกำหนดค่าขอบเขตบริการให้อนุญาตการเข้าถึงทรัพยากรที่มีการป้องกันจากที่อยู่ IP ภายใน

8. ล้างข้อมูล

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

  • หากต้องการลบอินสแตนซ์ VM ให้ทำตามขั้นตอนต่อไปนี้
    • ในคอนโซล Google Cloud ให้ไปที่หน้าอินสแตนซ์ VM
    • เลือกช่องทำเครื่องหมายทางด้านซ้ายของชื่ออินสแตนซ์ VM จากนั้นเลือกลบ แล้วคลิกลบอีกครั้งเพื่อยืนยัน การลบอินสแตนซ์ของอินสแตนซ์ Compute Engine
  • หากต้องการลบขอบเขตบริการ ให้ทำตามขั้นตอนต่อไปนี้
    • ในคอนโซล Google Cloud ให้เลือกความปลอดภัย จากนั้นเลือกการควบคุมบริการ VPC ในระดับที่มีการกำหนดขอบเขตนโยบายการเข้าถึง ซึ่งในกรณีนี้คือระดับโฟลเดอร์
    • ในหน้าการควบคุมบริการ VPC ให้คลิกลบในแถวของตารางที่ตรงกับขอบเขตที่ต้องการลบ
  • หากต้องการลบระดับการเข้าถึง ให้ทำตามขั้นตอนต่อไปนี้
  • หากต้องการปิดโปรเจ็กต์ ให้ทำตามขั้นตอนต่อไปนี้
    • ในคอนโซล Google Cloud ให้ไปที่ IAM & การตั้งค่าผู้ดูแลระบบของโปรเจ็กต์ที่ต้องการลบ
    • เกี่ยวกับ IAM และ หน้าการตั้งค่าผู้ดูแลระบบ ให้เลือกปิดการทำงาน
    • ป้อนรหัสโปรเจ็กต์ แล้วเลือกปิดระบบต่อไป

9. ยินดีด้วย

ใน Codelab นี้ คุณได้สร้างขอบเขตการควบคุมบริการ VPC บังคับใช้ และแก้ปัญหาแล้ว

ดูข้อมูลเพิ่มเติม

นอกจากนี้ คุณยังสำรวจสถานการณ์ต่อไปนี้ได้ด้วย

  • เรียกใช้การค้นหาเดียวกันในชุดข้อมูลสาธารณะ หลังจากที่โปรเจ็กต์ได้รับการปกป้องโดยการควบคุมบริการ VPC
  • เพิ่ม project-2 ในขอบเขตเดียวกับ project-1
  • เพิ่ม project-2 ในขอบเขตของตัวเองและให้ project-1 อยู่ในขอบเขตปัจจุบัน
  • เรียกใช้การค้นหาเพื่ออัปเดตข้อมูลในตาราง ไม่ใช่เพื่อดึงข้อมูลเพียงอย่างเดียว

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0