1. บทนำ
การควบคุมบริการ VPC (VPC-SC) คือการควบคุมความปลอดภัยระดับองค์กรใน Google Cloud ที่ช่วยให้ลูกค้าองค์กรลดความเสี่ยงในการลักลอบนำข้อมูลออกได้ การควบคุมบริการ VPC ให้การเข้าถึงบริการแบบหลายผู้เช่าในรูปแบบ Zero Trust โดยช่วยให้ไคลเอ็นต์จำกัดการเข้าถึง IP ที่ได้รับอนุญาต บริบทของไคลเอ็นต์ และพารามิเตอร์ของอุปกรณ์ขณะเชื่อมต่อกับบริการแบบหลายผู้เช่าจากอินเทอร์เน็ตและบริการอื่นๆ เพื่อลดการสูญเสียทั้งที่ตั้งใจและไม่ตั้งใจ ดังที่เราได้เห็นในบทแนะนำพื้นฐานเกี่ยวกับการควบคุมบริการ VPC ตอนที่ 1 คุณสามารถใช้การควบคุมบริการ VPC เพื่อสร้างขอบเขตที่ปกป้องทรัพยากรและข้อมูลของบริการที่คุณระบุอย่างชัดเจน
เป้าหมายของบทแนะนำนี้มีดังนี้
- ทำความเข้าใจพื้นฐานของการควบคุมบริการ VPC
- อัปเดตขอบเขตบริการและทดสอบโดยใช้โหมดทดสอบ
- ปกป้อง 2 บริการด้วยการควบคุมบริการ VPC
- แก้ปัญหาการละเมิดการออกจากการควบคุมบริการ VPC ขณะแสดงออบเจ็กต์จาก Cloud Storage
2. การตั้งค่าและข้อกำหนด
สำหรับบทแนะนำนี้ เราต้องมีข้อกำหนดเบื้องต้นต่อไปนี้
- องค์กร GCP
- โฟลเดอร์ภายใต้องค์กร
- โปรเจ็กต์ GCP 2 รายการภายในองค์กรเดียวกันซึ่งวางไว้ใต้โฟลเดอร์
- สิทธิ์ที่จำเป็นที่ระดับองค์กร
- บัญชีสำหรับการเรียกเก็บเงินสำหรับทั้ง 2 โปรเจ็กต์
- บทแนะนำพื้นฐานเกี่ยวกับการควบคุมบริการ VPC I การตั้งค่าการควบคุมบริการ VPC และ Access Context Manager

แหล่งข้อมูล - การตั้งค่า
- ตั้งค่าทรัพยากรตามที่อธิบายไว้ในส่วน "การตั้งค่าทรัพยากร" ของบทแนะนำพื้นฐานเกี่ยวกับการควบคุมบริการ VPC I
- ตรวจสอบว่าคุณมีสิทธิ์ที่จำเป็นในการดูแลระบบ Cloud Storage
- ในบทแนะนำนี้ เราจะเริ่มใช้ CLI แทน Cloud Console ตั้งค่า gcloud CLI ในสภาพแวดล้อมในการพัฒนาซอฟต์แวร์อย่างใดอย่างหนึ่งโดยทำดังนี้
- Cloud Shell: หากต้องการใช้เทอร์มินัลออนไลน์ที่มีการตั้งค่า gcloud CLI ไว้แล้ว ให้เปิดใช้งาน Cloud Shell
เปิดใช้งาน Cloud Shell โดยคลิกไอคอนที่มุมขวาบนของคอนโซลระบบคลาวด์ เซสชันอาจใช้เวลา 2-3 วินาทีในการเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับ Cloud Shell

ค่าใช้จ่าย
คุณต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า $300 USD
มีเพียงอินสแตนซ์ VM และออบเจ็กต์ Cloud Storage เท่านั้นที่จะสร้างค่าใช้จ่าย คุณดูค่าใช้จ่ายโดยประมาณของอินสแตนซ์ VM ได้ในเครื่องคำนวณราคา ดูค่าใช้จ่ายโดยประมาณของ Cloud Storage ได้ในรายการราคาที่นี่
3. สร้างที่เก็บข้อมูลและออบเจ็กต์
ดังที่ได้กล่าวไปก่อนหน้านี้ เราจะนำทรัพยากรที่สร้างไว้ในบทแนะนำก่อนหน้ามาใช้ซ้ำ ดังนั้นเราจะดำเนินการต่อและสร้างที่เก็บข้อมูล Cloud Storage ในบทแนะนำนี้ เราจะเริ่มใช้ gcloud CLI แทนคอนโซล
- เลือก ProjectX ใน Google Console ในโปรเจ็กต์นี้ เราจะสร้างที่เก็บข้อมูลและออบเจ็กต์
- ตรวจสอบว่าคุณได้ตั้งค่า Cloud Shell ให้ใช้ ProjectX โดยการเรียกใช้คำสั่งต่อไปนี้
gcloud config set project PROJECT_ID
- ในสภาพแวดล้อมการพัฒนา ให้เรียกใช้คำสั่งต่อไปนี้
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
- สร้างออบเจ็กต์พื้นที่เก็บข้อมูลเพื่อให้เราอ่านจากอินสแตนซ์ VM ที่อยู่ใน ProjectZ ได้ เราจะสร้างไฟล์ .txt
nano hello.txt
เพิ่มสิ่งที่คุณต้องการในไฟล์ข้อความ
- อัปโหลดออบเจ็กต์ลงใน Bucket
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
- ยืนยันว่าออบเจ็กต์ได้รับการอัปโหลดลงในที่เก็บข้อมูลแล้วโดยแสดงรายการ
gcloud storage ls gs://BUCKET_NAME
คุณต้องเห็นไฟล์ hello.txt แสดงอยู่ในคอนโซล
4. ปกป้อง Cloud Storage API
ใน Codelab ก่อนหน้า เราได้สร้างขอบเขตและปกป้อง Compute Engine API ในโค้ดแล็บนี้ เราจะแก้ไขขอบเขตโหมดการทดสอบและเพิ่ม Cloud Storage ซึ่งจะช่วยให้เราพิจารณาผลกระทบของการป้องกันขอบเขตได้โดยแสดงการละเมิดตัวควบคุมบริการ VPC ในบันทึกการตรวจสอบ แต่จะยังคงเข้าถึงทรัพยากรได้จนกว่าเราจะบังคับใช้ขอบเขต
- ใน Google Console ให้เลือกองค์กร แล้ว เข้าถึงการควบคุมบริการ VPC ตรวจสอบว่าคุณอยู่ในขอบเขตขององค์กร
- เปิด Cloud Shell และอัปเดตขอบเขตการทดสอบ "SuperProtection" ที่สร้างไว้ใน Lab ก่อนหน้า
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
- ยืนยันว่ามีการอัปเดต Cloud Storage API โดยอธิบายขอบเขต
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY
ในเอาต์พุต คุณจะเห็นว่า Cloud Storage API อยู่ในรายการบริการที่ถูกจำกัด
พร้อมกับ Compute Engine API แต่มีป้ายกำกับ -vpcAccessibleServices: {}"

5. ตรวจสอบว่าได้ปกป้อง Cloud Storage API แล้ว
ในโหมดทดสอบ ให้ตรวจสอบว่าขอบเขต "SuperProtection" แสดงการปฏิเสธโดยการแสดงรายการออบเจ็กต์จากอินสแตนซ์ VM ที่สร้างใน ProjectZ ไปยัง ProjectX ซึ่งโฮสต์ Storage Bucket
- ใน Cloud Console ให้ไปที่ตัวเลือกโปรเจ็กต์แล้วเลือก ProjectZ จากนั้นไปที่ Compute Engine > อินสแตนซ์ VM
- คลิกปุ่ม SSH เพื่อเชื่อมต่อกับอินสแตนซ์ VM และเข้าถึงบรรทัดคำสั่ง

- แสดงรายการไฟล์ hello.txt ที่เราอัปโหลดไปก่อนหน้านี้
gcloud storage ls gs://BUCKET_NAME
เนื่องจาก Cloud Storage API ได้รับการปกป้องในโหมดทดสอบ คุณจึงควรแสดงรายการทรัพยากรได้ แต่คุณต้องมีข้อความแสดงข้อผิดพลาดในบันทึกการตรวจสอบ ProjectZ
- ไปที่ Logs Explorer API ใน ProjectZ แล้วมองหาข้อความแสดงข้อผิดพลาดล่าสุดของการควบคุมบริการ VPC คุณใช้ตัวกรองนี้เพื่อรับบันทึกที่เราต้องการได้
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS" "(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"
ฟิลเตอร์นี้จะแสดงการละเมิดครั้งล่าสุดในโหมดทดลองเรียกใช้ซึ่งเป็นของ Cloud Storage นี่คือตัวอย่างลักษณะของบันทึก และเราสามารถตรวจสอบได้ว่าการละเมิดเป็นการละเมิดขาออกเมื่อพยายามแสดงเนื้อหาในที่เก็บข้อมูลที่อยู่ใน ProjectX
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
- เนื่องจากเราได้ตรวจสอบแล้วว่าการเรียก API ไปยัง Cloud Storage ทำให้เกิดการละเมิดการควบคุมบริการ VPC เราจึงจะบังคับใช้ขอบเขตด้วยการกำหนดค่าใหม่ เปิด Cloud Shell แล้วบังคับใช้ขอบเขตการทดสอบ
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
- เชื่อมต่อกับอินสแตนซ์ VM โดยใช้ SSH และแสดงรายการที่เก็บข้อมูลอีกครั้งเพื่อยืนยันว่ามีการบังคับใช้ขอบเขตการทดสอบอย่างถูกต้อง
gcloud storage ls gs://BUCKET_NAME
เราจะได้รับการละเมิดการควบคุมบริการ VPC ใน CLI ของ VM แทนรายการออบเจ็กต์ Storage
ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"
เราป้องกันการขโมยข้อมูลได้สำเร็จโดยใช้การควบคุมบริการ VPC เพื่อป้องกันการอ่านข้อมูลจากทรัพยากรนอกขอบเขตหรือการคัดลอกข้อมูลไปยังทรัพยากรดังกล่าว
6. การแก้ปัญหาการปฏิเสธรายการ
เราจะแก้ปัญหาการปฏิเสธที่เราได้รับจาก CLI ของอินสแตนซ์ VM มาตรวจสอบบันทึกการตรวจสอบและหารหัสที่ไม่ซ้ำกันของการควบคุมบริการ VPC กัน
- ไปที่เครื่องมือเลือกโปรเจ็กต์แล้วเลือก ProjectZ
- ค้นหารหัสที่ไม่ซ้ำกันของการควบคุมบริการ VPC ในบันทึกการตรวจสอบโดยใช้การค้นหาต่อไปนี้ใน Logs Explorer
resource.type="audited_resource" protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
ซึ่งจะแสดงบันทึกการตรวจสอบการควบคุมบริการ VPC ทั้งหมด เราจะมองหาบันทึกข้อผิดพลาดล่าสุด เนื่องจากมีการเรียก API จากอินสแตนซ์ VM หลักจึงต้องเป็นบัญชีบริการ Compute Engine "PROJECT_NUMBER-compute@developer.gserviceaccount.com"
เนื่องจากเรามีรหัสที่ไม่ซ้ำกันของการควบคุมบริการ VPC อยู่แล้ว เราจึงใช้รหัสดังกล่าวเพื่อรับบันทึกที่ต้องการได้โดยตรงโดยใช้ตัวกรองนี้
protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
- คลิกส่วนหัวการควบคุมบริการ VPC แล้วเลือก "แก้ปัญหาการปฏิเสธ" ซึ่งจะเปิดเครื่องมือแก้ปัญหาการควบคุมบริการ VPC
API นี้จะแสดงเหตุผลของการละเมิดใน UI ที่ใช้งานง่าย และจะแสดงว่าเป็นการละเมิดขาเข้าหรือขาออกหรือไม่ รวมถึงข้อมูลอื่นๆ ที่มีประโยชน์
ในแบบฝึกหัดนี้ เราจะมองหาข้อมูลต่อไปนี้
authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
ข้อมูลนี้เพียงพอที่จะทำให้เราทราบว่าต้องสร้างกฎขาออกเพื่อให้บัญชีบริการ Compute Engine เข้าถึงที่เก็บข้อมูลจาก ProjectZ ไปยัง ProjectX ได้ นอกจากนี้ เรายังเห็นว่าเครือข่ายไม่ได้อยู่ในขอบเขตเดียวกัน ดังนั้นเราจึงต้องอนุญาตการสื่อสาร VPC กับบริการและแชร์ข้อมูลในขอบเขตบริการ
- เปิดใช้งาน Cloud Shell และสร้างไฟล์ .yaml ที่มีกฎขาออกโดยใช้เครื่องมือแก้ไขข้อความ
nano egresstorage.yaml
- egressTo:
operations:
- serviceName: storage.googleapis.com
methodSelectors:
- method: \"*\"
resources:
- projects/PROJECTX_ID
egressFrom:
identities:
- serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
- อัปเดตนโยบายขาเข้าที่ปกป้อง ProjectZ
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY
ตอนนี้เราลองเข้าถึงที่เก็บข้อมูลจากอินสแตนซ์ VM อีกครั้งได้แล้ว
- ใน Cloud Console ให้ไปที่ตัวเลือกโปรเจ็กต์แล้วเลือก ProjectZ จากนั้นไปที่ Compute Engine > อินสแตนซ์ VM
- คลิกปุ่ม SSH เพื่อเชื่อมต่อกับอินสแตนซ์ VM และเข้าถึงบรรทัดคำสั่ง
- เมื่ออยู่ใน VM CLI แล้ว ให้ลองแสดงรายการออบเจ็กต์ใน Storage Bucket
gcloud storage ls gs://BUCKET_NAME/
คุณจะได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้
ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
- เราต้องให้สิทธิ์ผู้อ่านออบเจ็กต์แก่บัญชีบริการ Compute Engine เพื่อให้แสดงรายการออบเจ็กต์ใน Storage Bucket ได้
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
- ลองแสดงรายการไฟล์ hello.txt จาก CLI ของอินสแตนซ์ VM อีกครั้ง
gcloud storage ls gs://BUCKET_NAME/ . . gs://BUCKET_NAME/hello.txt
ตอนนี้เราสามารถแสดงรายการออบเจ็กต์ได้โดยไม่ละเมิดสิทธิ์การควบคุมบริการ VPC แต่จะเกิดอะไรขึ้นหากเราดาวน์โหลดไฟล์ มาลองกัน
gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}
และเราจะได้รับเอาต์พุตต่อไปนี้
Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
Completed files 1/1 | 54.0B/54.0B
7. ล้างข้อมูล
แม้ว่าจะไม่มีการเรียกเก็บเงินแยกต่างหากสำหรับการใช้การควบคุมบริการ VPC เมื่อไม่ได้ใช้บริการ แต่แนวทางปฏิบัติแนะนำคือการล้างข้อมูลการตั้งค่าที่ใช้ในห้องทดลองนี้ นอกจากนี้ คุณยังลบอินสแตนซ์ VM และ/หรือโปรเจ็กต์ Cloud เพื่อหลีกเลี่ยงค่าใช้จ่ายได้ด้วย การลบโปรเจ็กต์ Cloud จะหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้ภายในโปรเจ็กต์นั้น
- หากต้องการลบอินสแตนซ์ VM ให้เลือกช่องทำเครื่องหมายทางด้านซ้ายของชื่ออินสแตนซ์ VM แล้วคลิกลบ

- หากต้องการลบขอบเขต ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้คลิกความปลอดภัย แล้วคลิกการควบคุมบริการ VPC ที่ขอบเขตขององค์กร
- ในหน้าการควบคุมบริการ VPC ในแถวของตารางที่ตรงกับขอบเขตที่คุณต้องการลบ ให้คลิก "ไอคอนลบ"
- หากต้องการลบระดับการเข้าถึง ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทที่ขอบเขตโฟลเดอร์
- ในตาราง ในแถวของระดับการเข้าถึงที่ต้องการลบ ให้คลิก "ไอคอนลบ" แล้วคลิกลบ
- หากต้องการลบออบเจ็กต์และที่เก็บข้อมูล ให้ทำตามขั้นตอนต่อไปนี้
- ใน Google Cloud Console ให้เปิดหน้าถังเก็บข้อมูล Cloud Storage
- เลือกช่องทำเครื่องหมายข้าง Bucket ที่คุณสร้างขึ้น
- คลิกลบ
- ในหน้าต่างที่เปิดขึ้น ให้ยืนยันว่าต้องการลบบัคเก็ต
- คลิกลบ
- หากต้องการปิดโปรเจ็กต์ ให้ทำตามขั้นตอนต่อไปนี้
- ใน Google Cloud Console ให้ไปที่หน้าการตั้งค่า IAM และผู้ดูแลระบบของโปรเจ็กต์ที่ต้องการลบ
- ในหน้าการตั้งค่า IAM และผู้ดูแลระบบ ให้คลิกปิด
- ป้อนรหัสโปรเจ็กต์ แล้วคลิกปิดเครื่องต่อไป
8. ยินดีด้วย
ใน Codelab นี้ คุณได้อัปเดตขอบเขตการทดลองเรียกใช้การควบคุมบริการ VPC บังคับใช้ และแก้ปัญหา
ดูข้อมูลเพิ่มเติม
- ดูเอกสารประกอบการควบคุมบริการ VPC
- โปรดดูเอกสารประกอบเกี่ยวกับเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบท
- ดูเอกสารประกอบเครื่องมือแก้ปัญหา VPC-SC
- ดูเอกสารประกอบเกี่ยวกับกฎขาเข้าและขาออก
- ดูเอกสารประกอบเกี่ยวกับการทดสอบ
- ดูเอกสารประกอบ Cloud Storage
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป