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

1. บทนำ

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

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

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

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

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

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

ตั้งค่า

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

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

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

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

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

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

การสร้าง Bucket ของ Cloud Storage และชุดข้อมูล BigQuery

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

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

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

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

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

  • สำหรับชื่อของ Bucket ให้ป้อนชื่อที่เป็นไปตามข้อกำหนดของชื่อ Bucket สำหรับ Codelab นี้ เราจะเรียก Bucket ว่า codelab-bqtransfer-bucket
  • สำหรับตำแหน่งที่จะจัดเก็บข้อมูล สถานที่ตั้งของ Bucket ให้เลือกประเภทสถานที่ตั้งและสถานที่ตั้งที่จะจัดเก็บข้อมูล 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 ไปยัง Bucket ใน Cloud Storage

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

gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

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

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

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

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

  1. สร้างชุดข้อมูล BigQuery ในโปรเจ็กต์ project-2 โดยทำตามขั้นตอนเหล่านี้
    1. สำหรับรหัสชุดข้อมูล ให้ป้อนชื่อชุดข้อมูลที่ไม่ซ้ำกัน สำหรับ Codelab นี้ เราจะใช้ codelab_bqtransfer_dataset
    2. สําหรับประเภทสถานที่ตั้ง ให้เลือกสถานที่ตั้งทางภูมิศาสตร์สําหรับชุดข้อมูล สำหรับ Codelab นี้ เราจะใช้ตำแหน่งเดียวกับ Bucket ของ Cloud Storage ซึ่งก็คือ สหรัฐอเมริกา (หลายภูมิภาคในสหรัฐอเมริกา) การสร้างชุดข้อมูล BigQuery
  2. สร้างตาราง BigQuery ภายในชุดข้อมูลที่สร้างขึ้น codelab_bqtransfer_dataset โดยทำตามขั้นตอนเหล่านี้
    1. ในส่วนแหล่งที่มา ให้เลือกตารางเปล่าในรายการสร้างตารางจาก
    2. ในช่องตาราง ให้ป้อนชื่อตารางที่ต้องการสร้าง สำหรับ Codelab นี้ เราใช้ชื่อ codelab-bqtransfer-table
    3. ตรวจสอบว่าได้ตั้งค่าฟิลด์ประเภทตารางเป็นตารางเนทีฟ
    4. ในส่วนสคีมา ให้ป้อนคำจำกัดความสคีมา คุณป้อนข้อมูลสคีมาได้โดยคลิกแก้ไขเป็นข้อความ แล้วป้อนสคีมาต่อไปนี้ ซึ่งเป็นไปตามรูปแบบของไฟล์ CSV ที่สร้างขึ้น
    [{
    "name": "name",
    "type": "STRING",
    "mode": "NULLABLE",
    "description": "The name"
    },
    {
    "name": "age",
    "type": "INTEGER",
    "mode": "NULLABLE",
    "description": "The age"
    }]
    

ค่าใช้จ่าย

คุณต้องเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์ project-2 และ project-1 เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ เราขอแนะนำให้ปิดทรัพยากรที่ใช้แล้วเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจาก 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

คุณใช้ระดับการเข้าถึงหรือกฎขาเข้าเพื่อแก้ไขการละเมิดขาเข้าได้ ใน Codelab นี้ เราจะใช้กฎขาเข้าที่กำหนดค่าด้วยข้อมูลประจำตัวของผู้ใช้ที่ถูกปฏิเสธ ซึ่งอนุญาตให้เข้าถึงบริการ 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
    1. บัญชีบริการที่เลือกต้องมีสิทธิ์ที่จำเป็นสำหรับทั้ง Cloud Storage ในโปรเจ็กต์ที่โฮสต์ที่เก็บข้อมูล Bucket 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 นี้ เราจะใช้การโอน Codelab Transfer
  4. คลิกเรียกใช้การโอนเลย
  5. คลิกตกลง

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

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

ตรวจสอบการละเมิดการควบคุมบริการ VPC ของ Cloud Storage

กรองบันทึกการตรวจสอบโดยใช้ vpcServiceControlsUniqueIdentifier ตามที่เห็นในสรุปการโอน

การละเมิดที่พบคือRESOURCES_NOT_IN_SAME_SERVICE_PERIMETERการละเมิดขาออกที่มีรายละเอียดดังนี้

  • Principal คือบัญชีบริการที่กำหนดค่าไว้ในบริการโอนข้อมูล (ไม่ว่าจะทริกเกอร์ด้วยตนเองหรือเรียกใช้การโอนข้อมูลที่กำหนดเวลาไว้ Principal ที่ถูกปฏิเสธจะเหมือนกัน)
  • บริการที่ได้รับผลกระทบคือ 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-2 เพื่อคัดลอกชุดข้อมูล คราวนี้ระบบควรคัดลอกชุดข้อมูลได้สำเร็จโดยไม่มีการละเมิดการควบคุมบริการ VPC

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

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

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

8. ยินดีด้วย

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

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

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

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

ใบอนุญาต

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