การควบคุมบริการ VPC - การป้องกันบริการโอนข้อมูล BigQuery

1. บทนำ

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

ตลอดทั้งห้องทดลองนี้ เราจะดูวิธีแก้ไขการละเมิดทั้งขาเข้าและขาออกโดยใช้กฎขาเข้าและขาออกตามลำดับ นอกจากนี้ เราจะใช้ระดับการเข้าถึงเพื่อแก้ไขการละเมิดการส่งผ่านข้อมูล BigQuery ด้วย เป้าหมายของ Codelab นี้ ได้แก่

  • ทําความเข้าใจวิธีแก้ไขการละเมิดขาเข้าและขาออกโดยใช้กฎขาเข้าและขาออกในบริการต่างๆ ตามลำดับ ซึ่งได้แก่ Cloud Storage, BigQuery และบริการโอนข้อมูล BigQuery
  • ทำความเข้าใจสาเหตุที่เกิดการละเมิด

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

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

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

ตั้งค่า

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

แผนภาพการตั้งค่าเริ่มต้นของ Codelab

สร้างนโยบายที่มีขอบเขตและขอบเขตบริการปกติ

ในโค้ดแล็บนี้ เราจะใช้ขอบเขตบริการปกติที่ปกป้อง project-2

ในขอบเขต perimeter-2 ให้จํากัด BigQuery Data Transfer API

การกําหนดค่า VPC SC ที่ปกป้องบริการการโอนข้อมูล

การสร้างที่เก็บข้อมูล Cloud Storage และชุดข้อมูล BigQuery

สําหรับวัตถุประสงค์ของโค้ดแล็บนี้ ไฟล์ CSV ใดก็ได้ไม่ว่าเนื้อหาจะเป็นอย่างไร ข้อจํากัดหลักเกี่ยวข้องกับข้อกําหนดในการวางอุปกรณ์ไว้ด้วยกัน ซึ่งบังคับให้ต้องมีคุณสมบัติดังนี้

  • หากชุดข้อมูล BigQuery อยู่ในหลายภูมิภาค ที่เก็บข้อมูล Cloud Storage ที่มีข้อมูลที่คุณต้องการโอนต้องอยู่ในหลายภูมิภาคเดียวกันหรืออยู่ในตำแหน่งที่อยู่ในหลายภูมิภาค
  • หากชุดข้อมูลอยู่ในภูมิภาค ที่เก็บข้อมูล Cloud Storage ของคุณต้องอยู่ในภูมิภาคเดียวกัน

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

สร้างที่เก็บข้อมูล Cloud Storage ใหม่ในโปรเจ็กต์ project-1

หากต้องการสร้างที่เก็บข้อมูล Cloud Storage ใหม่ ให้ทำตามขั้นตอนที่ระบุไว้ในเอกสารสำหรับการสร้างที่เก็บข้อมูลใหม่

  • ป้อนชื่อที่เป็นไปตามข้อกำหนดของชื่อที่เก็บข้อมูลสำหรับชื่อของที่เก็บข้อมูล สําหรับโค้ดแล็บนี้ เราจะเรียกที่เก็บข้อมูลว่า codelab-bqtransfer-bucket
  • สำหรับตำแหน่งที่จะจัดเก็บข้อมูล ให้เลือกประเภทตำแหน่งและตำแหน่งที่จะจัดเก็บข้อมูลของที่เก็บข้อมูลอย่างถาวร สําหรับ Codelab นี้ เราจะใช้ us (หลายภูมิภาคในสหรัฐอเมริกา)

การกําหนดค่าการสร้าง Cloud Storage

สร้างไฟล์ 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

เรียกใช้คําสั่ง cp เพื่ออัปโหลดไฟล์ csv ไปยัง Cloud Storage

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

gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**

สร้างชุดข้อมูลและตาราง BigQuery ใน project-2

  1. สร้างชุดข้อมูล BigQuery ในโปรเจ็กต์ project-2 โดยทำตามขั้นตอนเหล่านี้
    1. ป้อนชื่อชุดข้อมูลที่ไม่ซ้ำกันในส่วนรหัสชุดข้อมูล สําหรับ Codelab นี้ เราจะใช้ codelab_bqtransfer_dataset
    2. สําหรับประเภทสถานที่ ให้เลือกสถานที่ทางภูมิศาสตร์สําหรับชุดข้อมูล สําหรับ Codelab นี้ เราจะใช้ตำแหน่งเดียวกับที่เก็บข้อมูล Cloud Storage: สหรัฐอเมริกา (หลายภูมิภาคในสหรัฐอเมริกา) การสร้างชุดข้อมูล BigQuery
  2. สร้างตาราง BigQuery ภายใต้ชุดข้อมูล codelab_bqtransfer_dataset ที่สร้างขึ้นโดยทําตามขั้นตอนเหล่านี้
    1. ในส่วนแหล่งที่มา ให้เลือกตารางว่างในรายการสร้างตารางจาก
    2. ในช่องตาราง ให้ป้อนชื่อตารางที่ต้องการสร้าง สําหรับ Codelab นี้ เราจะใช้ชื่อ codelab-bqtransfer-table
    3. ตรวจสอบว่าได้ตั้งค่าช่องประเภทตารางเป็นตารางเนทีฟ
    4. ในส่วนสคีมา ให้ป้อนคำจำกัดความของ 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

หากต้องการสร้างการโอนข้อมูล ให้ทําตามขั้นตอนต่อไปนี้

  1. ไปที่หน้า BigQuery ในคอนโซล Google Cloud ของ project-2
  2. คลิกการโอนข้อมูล

การละเมิด VPC SC ในหน้าบริการโอนข้อมูล

ตรวจสอบการละเมิดขณะเข้าถึงหน้าการโอนข้อมูล

ในคอนโซล 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 ต่อ

จากขั้นตอนก่อนหน้า ขณะอยู่ในหน้าการโอนข้อมูล (หลังจากคลิก "การโอนข้อมูล") ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิก + สร้างการโอน
  2. ในส่วนประเภทแหล่งที่มา ให้เลือก Google Cloud Storage สำหรับแหล่งที่มา
  3. ในส่วนชื่อการกำหนดค่าการโอน ให้ป้อนชื่อการโอนในชื่อที่แสดง เช่น Codelab Transfer
  4. ในส่วนตัวเลือกกำหนดเวลา ให้ทำดังนี้
    1. เลือกความถี่ในการทําซ้ำ เช่น 15 นาที
    2. อย่าลืมเลือกเริ่มเลย ไม่เช่นนั้นการโอนข้อมูลจะเริ่มขึ้นหลังจากความถี่ที่ซ้ำที่กำหนดค่าไว้เท่านั้น
  5. ในส่วนการตั้งค่าปลายทาง ให้เลือกชุดข้อมูลที่คุณสร้างขึ้นเพื่อจัดเก็บข้อมูลสำหรับชุดข้อมูลปลายทาง codelab_bqtransfer_dataset
  6. ในส่วนรายละเอียดแหล่งข้อมูล
    1. ในส่วนตารางปลายทาง ให้ป้อนชื่อตารางปลายทาง ตารางปลายทางต้องเป็นไปตามกฎการตั้งชื่อตาราง สําหรับ Codelab นี้ เราจะใช้ตารางที่สร้างไว้ก่อนหน้านี้ codelab-bqtransfer-table
    2. สำหรับ URI ของ Cloud Storage ให้ป้อน URI ของ Cloud Storage สําหรับ Codelab นี้ เราจะใช้ที่เก็บข้อมูลและไฟล์ที่สร้างขึ้น codelab-bqtransfer-bucket/codelab-test-file.csv
    3. สำหรับค่ากำหนดการเขียน ให้เก็บ APPEND ไว้ (หรือเลือก MIRROR)
    4. อย่าเลือกลบไฟล์หลังจากโอน (เนื่องจากเราจะใช้ไฟล์เดิมซ้ำหลายครั้ง แต่คุณใช้ไฟล์หลายไฟล์และลบไฟล์ต้นทางหลังจากโอนได้)
    5. เลือก CSV สำหรับรูปแบบไฟล์
    6. ภายในตัวเลือกการโอน ภายใน CSV ให้ป้อนคอมมา(",") เป็นตัวคั่นฟิลด์
  7. ในเมนูบัญชีบริการ ให้เลือกบัญชีบริการจากบัญชีบริการที่เชื่อมโยงกับโปรเจ็กต์ Google Cloud
    1. บัญชีบริการที่เลือกต้องมีสิทธิ์ที่จําเป็นสําหรับทั้ง Cloud Storage ในโปรเจ็กต์ที่โฮสต์ที่เก็บข้อมูล project-1 ในโค้ดแล็บนี้
    2. สําหรับ Codelab นี้ เราจะใช้บัญชีบริการที่สร้างใน project-2 เป็น codelab-sa@project-2.iam.gserviceaccount.com
  8. คลิกบันทึก

เนื่องจากเราเลือกเริ่มเลยเป็นตัวเลือกกำหนดเวลา การโอนครั้งแรกจะเริ่มขึ้นทันทีที่เลือกบันทึก

ยืนยันสถานะบริการโอนข้อมูล

วิธียืนยันสถานะการโอนข้อมูลที่กําหนดค่าไว้

งานบริการโอนข้อมูล

คลิก Codelab Transfer (ในส่วนชื่อที่แสดง) แล้วระบบจะแสดงรายการการเรียกใช้ทั้งหมดที่ดำเนินการจนถึงตอนนี้

รายละเอียดการเรียกใช้บริการโอนข้อมูล

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

4. ข้อจํากัดที่อยู่ IP สําหรับการโอนข้อมูลที่ทริกเกอร์ด้วยตนเอง

กฎขาเข้าที่กําหนดค่าไว้ในปัจจุบันอนุญาตให้ข้อมูลประจําตัวที่กําหนดค่าไว้ทริกเกอร์การโอนข้อมูลด้วยตนเองจากที่อยู่ IP ใดก็ได้

การใช้ระดับการเข้าถึงช่วยให้การควบคุมบริการ VPC สามารถจํากัดการเข้าถึงที่อนุญาตตามแอตทริบิวต์คําขอ API ที่เฉพาะเจาะจงได้ ดังนี้

  • ซับเน็ต IP: ตรวจสอบว่าคำขอมาจากที่อยู่ IP ที่เฉพาะเจาะจงหรือไม่
  • ภูมิภาค: ตรวจสอบว่าคําขอมาจากภูมิภาคที่เฉพาะเจาะจงหรือไม่ ซึ่งพิจารณาจากตําแหน่งทางภูมิศาสตร์ของที่อยู่ IP
  • ผู้ใช้หลัก: ตรวจสอบว่าคําขอมาจากบัญชีที่เฉพาะเจาะจงหรือไม่
  • นโยบายด้านอุปกรณ์: ตรวจสอบว่าคำขอมาจากอุปกรณ์ที่เป็นไปตามข้อกำหนดเฉพาะหรือไม่

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

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

  1. ระบบอนุญาตให้ผู้ใช้ user@example.com เข้าถึงเมื่อพยายามเข้าถึงจากที่อยู่ IP ที่ระดับการเข้าถึงอนุญาต เนื่องจากที่อยู่ IP และบัญชีผู้ใช้ตรงกับการกำหนดค่าในกฎขาเข้า
  2. ระบบจะบล็อกไม่ให้ผู้ใช้ user@example.com เข้าถึงเมื่อที่อยู่ IP ของผู้ใช้ไม่ตรงกับที่อยู่ IP ที่อนุญาต แม้ว่าบัญชีของผู้ใช้จะได้รับการกําหนดค่าไว้ในกฎขาเข้าก็ตาม
  3. ผู้ใช้ user2@example.com ถูกบล็อกไม่ให้เข้าถึง แม้ว่าจะพยายามเข้าถึงจากที่อยู่ IP ที่อนุญาตก็ตาม เนื่องจากกฎขาเข้าไม่อนุญาตบัญชีของผู้ใช้รายดังกล่าว

สร้างระดับการเข้าถึง

วิธีสร้างระดับการเข้าถึงที่จำกัดการเข้าถึงตามที่อยู่ IP

  1. เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทในคอนโซล Google Cloud
    • หากได้รับข้อความแจ้ง ให้เลือกโฟลเดอร์ codelab-folder
  2. คลิกสร้างระดับการเข้าถึงที่ด้านบนของหน้าเครื่องมือจัดการบริบทการเข้าถึง
  3. ในแผงระดับการเข้าถึงใหม่ ให้ตั้งชื่อระดับการเข้าถึงใหม่ เราจะเรียก Codelab นี้ว่า project_2_al
  4. ในส่วนเงื่อนไข ให้คลิก + ด้านหน้าเครือข่ายย่อย IP
  5. ในช่องเครือข่ายย่อยของ IP ให้เลือก IP สาธารณะ

เพิ่มระดับการเข้าถึงในกฎขาเข้า

ภายในกฎขาเข้า ระบบจะอ้างอิงระดับการเข้าถึงในช่อง 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 ดังกล่าว

การละเมิด VPC SC จากที่อยู่ 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

การกำหนดค่า VPC SC ที่ปกป้อง Cloud Storage

หลังจากรักษาความปลอดภัยให้กับ Cloud Storage API แล้ว ให้รอการโอนข้อมูลที่กําหนดเวลาไว้ครั้งถัดไป หรือเรียกให้โอนด้วยตนเองโดยทําตามขั้นตอนต่อไปนี้

  1. ไปที่หน้า BigQuery ในคอนโซล Google Cloud
  2. คลิกการโอนข้อมูล
  3. เลือกการโอนจากรายการ: สําหรับโค้ดแล็บนี้ เราจะใช้การโอน Codelab Transfer
  4. คลิกเรียกใช้การโอนเลย
  5. คลิกตกลง

ระบบจะเริ่มการโอนอีกรายการ คุณอาจต้องรีเฟรชหน้านี้เพื่อดู การโอนครั้งนี้จะไม่สำเร็จเนื่องจากมีการละเมิดการควบคุมบริการ VPC

การละเมิด SC ของ VPC สำหรับการคัดลอกชุดข้อมูล BigQuery

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

กฎขาออกเพื่ออนุญาตบัญชีบริการของ Codelab

หลังจากแก้ไขขอบเขตบริการ 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

VPC SC ที่กําหนดค่าให้ปกป้อง Cloud Storage API

เริ่มการคัดลอกชุดข้อมูล

หากต้องการคัดลอกชุดข้อมูล ให้เรียกใช้คำสั่ง 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

กฎขาออกเพื่ออนุญาตให้เข้าถึงเมธอด BigQuery ทั้งหมด

เมื่อตั้งค่ากฎขาออกแล้ว ให้เรียกใช้คําสั่งเดียวกันเพื่อคัดลอกชุดข้อมูลใน Perimeter perimeter-2 คราวนี้การคัดลอกชุดข้อมูลควรสำเร็จโดยไม่ละเมิดการควบคุมบริการ VPC

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

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

  • หากต้องการลบที่เก็บข้อมูล Cloud Storage ให้ทำตามขั้นตอนต่อไปนี้
    • ในคอนโซล Google Cloud ให้ไปที่หน้าที่เก็บข้อมูล Cloud Storage
    • เลือกช่องทำเครื่องหมายของที่เก็บข้อมูลที่จะลบ แล้วคลิกลบ
    • ในหน้าต่างวางซ้อนที่ปรากฏขึ้น ให้ยืนยันว่าต้องการลบที่เก็บข้อมูลและเนื้อหาในนั้น การลบที่เก็บข้อมูล Cloud Storage
  • หากต้องการลบชุดข้อมูล BigQuery ให้ทำตามขั้นตอนต่อไปนี้
    • ในคอนโซล Google Cloud ให้ไปที่หน้า BigQuery
    • ในแผง Explorer ให้ขยายโปรเจ็กต์และเลือกชุดข้อมูล
    • ขยายเมนู 3 จุด แล้วคลิกลบ
    • ในกล่องโต้ตอบลบชุดข้อมูล ให้พิมพ์ delete ในช่อง แล้วคลิกลบ การลบชุดข้อมูล BigQuery
  • หากต้องการลบขอบเขตบริการ ให้ทำตามขั้นตอนต่อไปนี้
    • ในคอนโซล Google Cloud ให้เลือกความปลอดภัย แล้วเลือกการควบคุมบริการ VPC ที่ระดับที่กำหนดขอบเขตนโยบายการเข้าถึง ซึ่งในกรณีนี้คือระดับโฟลเดอร์
    • ในหน้าการควบคุมบริการ VPC ให้เลือก Delete Icon ในแถวตารางที่ตรงกับขอบเขตที่ต้องการลบ
  • หากต้องการลบระดับการเข้าถึง ให้ทำตามขั้นตอนต่อไปนี้
  • หากต้องการปิดโปรเจ็กต์ ให้ทำตามขั้นตอนต่อไปนี้

8. ยินดีด้วย

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

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

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

  • เพิ่ม project-1 ในขอบเขตอื่นซึ่งจะปกป้อง BigQuery, บริการโอนข้อมูล BigQuery และ Cloud Storage ด้วย
  • โอนข้อมูล BigQuery จากแหล่งที่มาที่รองรับอื่นๆ
  • จำกัดการเข้าถึงของผู้ใช้ตามแอตทริบิวต์อื่นๆ เช่น สถานที่ตั้งหรือนโยบายด้านอุปกรณ์

ใบอนุญาต

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