1. บทนำ
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีปกป้อง BigQuery API โดยใช้การควบคุมบริการ VPC Codelab เริ่มต้นโดยไม่มีบริการ API ที่มีการป้องกันโดยขอบเขตบริการ ซึ่งทำให้เรียกใช้การค้นหาในชุดข้อมูลสาธารณะได้ และบันทึกผลลัพธ์ลงในตารางโปรเจ็กต์ การค้นหาจะทำงานในโปรเจ็กต์หนึ่ง และระบบจะสร้างตาราง (ที่มีการบันทึกผลลัพธ์) ไว้ในอีกโปรเจ็กต์หนึ่ง ซึ่งเลียนแบบการตั้งค่าที่สามารถจัดเก็บข้อมูลไว้ในโปรเจ็กต์หนึ่ง แต่ต้องเข้าถึงโดยใช้โปรเจ็กต์อื่น
ถัดไป เราจะแนะนำขอบเขตบริการเพื่อปกป้องโปรเจ็กต์ข้อมูล คุณจะได้เรียนรู้วิธีแก้ไขการละเมิดที่พบโดยใช้กฎขาเข้าและกฎข้อมูลขาออก จากนั้นจึงเพิ่มระดับการเข้าถึงเพื่อจำกัดการเข้าถึงโดยใช้ที่อยู่ IP ภายใน เป้าหมายของ Codelab นี้คือ
- ทำความเข้าใจวิธีการแก้ไขการละเมิดขาเข้าและขาออกโดยใช้กฎขาเข้าและขาออกตามลำดับ
- ทำความเข้าใจสาเหตุของการละเมิดที่เฉพาะเจาะจง
- วิเคราะห์ขอบเขตของการแก้ไขการละเมิดที่ใช้
- แก้ไขการแก้ไข (กฎขาเข้า / ขาออก) เพื่อเปลี่ยนขอบเขตโดยใช้ประโยชน์จากตัวเลือกเพื่ออนุญาตการรับส่งข้อมูลจากที่อยู่ IP ภายในในเครือข่าย VPC โดยใช้ระดับการเข้าถึง
2. การตั้งค่าและข้อกำหนดของทรัพยากร
ก่อนเริ่มต้น
ใน Codelab นี้ เราถือว่าคุณทราบสิ่งต่อไปนี้แล้ว
- ข้อมูลเบื้องต้นในการเรียกใช้การค้นหา BigQuery: คุณสามารถดู Codelab นี้เพื่อดูวิธีค้นหาชุดข้อมูล Wikipedia ใน BigQuery
- วิธีสร้างและจัดการโฟลเดอร์
- วิธีสร้างโปรเจ็กต์ในโฟลเดอร์หรือย้ายโปรเจ็กต์ที่มีอยู่ในโฟลเดอร์
- วิธีสร้างนโยบายการเข้าถึงที่กำหนดขอบเขต
- วิธีสร้างและกำหนดค่าขอบเขตบริการ
- วิธีค้นหาการละเมิดนโยบายด้านความปลอดภัยในบันทึก
ตั้งค่า
การตั้งค่าเริ่มต้นของเรามีการออกแบบดังนี้
- องค์กร Google Cloud
- โฟลเดอร์ภายใต้องค์กร สำหรับ Codelab นี้ เราจะเรียกว่า
codelab-folder
- โปรเจ็กต์ Google Cloud 2 โปรเจ็กต์อยู่ในโฟลเดอร์เดียวกัน
codelab-folder
สำหรับ Codelab นี้ เราเรียกฟังก์ชันดังกล่าวว่าproject-1
และproject-2
- หากยังไม่ได้สร้างโฟลเดอร์และโปรเจ็กต์ ให้สร้างโฟลเดอร์ภายใต้องค์กรนั้นในคอนโซล Google Cloud แล้วสร้างโปรเจ็กต์ใหม่ 2 โปรเจ็กต์ในโฟลเดอร์ที่สร้างขึ้นนั้น
- สิทธิ์ที่จำเป็น:
- บทบาท IAM สำหรับการจัดการโฟลเดอร์: มอบหมายที่ระดับโฟลเดอร์
- บทบาท IAM สำหรับการจัดการโปรเจ็กต์: มอบหมายที่ระดับโปรเจ็กต์
- ต้องมีบทบาท IAM เพื่อกำหนดค่าการควบคุมบริการ VPC: มอบหมายที่ระดับองค์กร
- บทบาท IAM สำหรับจัดการ BigQuery: มอบหมายที่ระดับโปรเจ็กต์
- บทบาท IAM สำหรับจัดการอินสแตนซ์ Compute Engine: มอบหมายที่ระดับโปรเจ็กต์
- บัญชีสำหรับการเรียกเก็บเงินสำหรับทั้ง 2 โปรเจ็กต์คือ
project-2
และproject-1
สร้างขอบเขตบริการปกติ
ใน Codelab นี้ เราจะใช้ขอบเขตบริการปกติเพื่อปกป้อง 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
แล้ว
ขณะที่ยังอยู่ใน 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 ที่เหมาะสม
แผนภาพนี้แสดงกระบวนการเมื่อผู้ใช้หลักค้นหาชุดข้อมูล 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
ลักษณะการทำงานที่คาดไว้จากกฎข้อมูลขาออกที่กำหนดค่าไว้:
- จาก | ข้อมูลระบุตัวตน: เฉพาะข้อมูลประจำตัวที่ระบุ
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
การละเมิดใหม่แตกต่างจากการละเมิดแรกในแง่ของโปรเจ็กต์เป้าหมายและวิธีการ
การละเมิดใหม่เป็นการละเมิดขาเข้าที่มี
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
แผนภาพนี้แสดงผู้ใช้หลัก 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 ภายใน
เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทภายใต้โฟลเดอร์นโยบายการเข้าถึงที่กำหนดขอบเขตเดียวกันเพื่อสร้างระดับการเข้าถึง
- ในหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบท ให้เลือกสร้างระดับการเข้าถึง
- ในแผงระดับการเข้าถึงใหม่ ให้ทำดังนี้
- ระบุชื่อ: คุณใช้
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 ต่อไปนี้
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 เพื่อหลีกเลี่ยงการเรียกเก็บเงินได้ด้วย การลบโปรเจ็กต์ที่อยู่ในระบบคลาวด์จะเป็นการหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้ในโปรเจ็กต์นั้น
- หากต้องการลบอินสแตนซ์ VM ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าอินสแตนซ์ VM
- เลือกช่องทำเครื่องหมายทางด้านซ้ายของชื่ออินสแตนซ์ VM จากนั้นเลือกลบ แล้วคลิกลบอีกครั้งเพื่อยืนยัน
- หากต้องการลบขอบเขตบริการ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้เลือกความปลอดภัย จากนั้นเลือกการควบคุมบริการ VPC ในระดับที่มีการกำหนดขอบเขตนโยบายการเข้าถึง ซึ่งในกรณีนี้คือระดับโฟลเดอร์
- ในหน้าการควบคุมบริการ VPC ให้คลิกลบในแถวของตารางที่ตรงกับขอบเขตที่ต้องการลบ
- หากต้องการลบระดับการเข้าถึง ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทที่ขอบเขตโฟลเดอร์
- ในตาราง ให้ระบุแถวของระดับการเข้าถึงที่ต้องการลบ เลือกเมนู 3 จุด แล้วเลือกลบ
- หากต้องการปิดโปรเจ็กต์ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้ไปที่ IAM & การตั้งค่าผู้ดูแลระบบของโปรเจ็กต์ที่ต้องการลบ
- เกี่ยวกับ IAM และ หน้าการตั้งค่าผู้ดูแลระบบ ให้เลือกปิดการทำงาน
- ป้อนรหัสโปรเจ็กต์ แล้วเลือกปิดระบบต่อไป
9. ยินดีด้วย
ใน Codelab นี้ คุณได้สร้างขอบเขตการควบคุมบริการ VPC บังคับใช้ และแก้ปัญหาแล้ว
ดูข้อมูลเพิ่มเติม
นอกจากนี้ คุณยังสำรวจสถานการณ์ต่อไปนี้ได้ด้วย
- เรียกใช้การค้นหาเดียวกันในชุดข้อมูลสาธารณะ หลังจากที่โปรเจ็กต์ได้รับการปกป้องโดยการควบคุมบริการ VPC
- เพิ่ม
project-2
ในขอบเขตเดียวกับproject-1
- เพิ่ม
project-2
ในขอบเขตของตัวเองและให้project-1
อยู่ในขอบเขตปัจจุบัน - เรียกใช้การค้นหาเพื่ออัปเดตข้อมูลในตาราง ไม่ใช่เพื่อดึงข้อมูลเพียงอย่างเดียว
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0