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

1. บทนำ

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

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

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

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

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

ในโค้ดแล็บนี้ เราจะถือว่าคุณทราบข้อมูลต่อไปนี้แล้ว

ตั้งค่า

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

การออกแบบเริ่มต้นที่ขอบเขตบริการไม่ได้ปกป้อง API

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

ในโค้ดแล็บนี้ เราจะใช้ขอบเขตบริการปกติที่ปกป้อง 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

ขณะที่ยังอยู่ใน 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 ที่เหมาะสม

การตั้งค่า 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

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

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

  • 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 การละเมิดใหม่แตกต่างจากการละเมิดครั้งแรกในแง่ของโปรเจ็กต์เป้าหมายและวิธีการ

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

แก้ไขการละเมิดการรับส่งข้อมูล

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

  • 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 จะใช้ไม่ได้

ขอบเขตการควบคุมบริการ VPC ที่ปกป้อง BigQuery API แผนภาพนี้แสดงให้เห็นว่าผู้ใช้ 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 ภายใน

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

  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 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 ด้วยไคลเอ็นต์ของผู้ใช้บนอินเทอร์เน็ต

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

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

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

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

9. ยินดีด้วย

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

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

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

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป