1. บทนำ
การควบคุมบริการ VPC (VPC-SC) คือการควบคุมความปลอดภัยระดับองค์กรใน Google Cloud ที่ช่วยให้ลูกค้าองค์กรสามารถลดความเสี่ยงในการขโมยข้อมูล การควบคุมบริการ VPC มอบการเข้าถึงบริการแบบ Zero Trust แบบ Zero Trust โดยการเปิดโอกาสให้ไคลเอ็นต์เข้าถึง IP, บริบทของไคลเอ็นต์ และพารามิเตอร์อุปกรณ์ที่ได้รับอนุญาต รวมถึงเชื่อมต่อกับบริการแบบกลุ่มผู้ใช้จำนวนมากจากอินเทอร์เน็ตและบริการอื่นๆ เพื่อลดการสูญเสียทั้งโดยตั้งใจและไม่ได้ตั้งใจ ตามที่เห็นในบทแนะนำพื้นฐานของการควบคุมบริการ VPC 1 คุณสามารถใช้การควบคุมบริการ VPC เพื่อสร้างขอบเขตที่ปกป้องทรัพยากรและข้อมูลของบริการที่คุณระบุอย่างชัดเจน
เป้าหมายของบทแนะนำนี้คือ
- ทำความเข้าใจพื้นฐานของการควบคุมบริการ VPC
- อัปเดตขอบเขตบริการและทดสอบโดยใช้โหมดทดลองเรียกใช้
- ปกป้อง 2 บริการด้วยการควบคุมบริการ VPC
- แก้ปัญหาการละเมิดข้อมูลขาออกในการควบคุมบริการ VPC ขณะแสดงรายการออบเจ็กต์จาก Cloud Storage
2. การตั้งค่าและข้อกำหนด
สำหรับบทแนะนำนี้ เราจำเป็นต้องมีข้อกำหนดล่วงหน้าต่อไปนี้
- องค์กร GCP
- โฟลเดอร์ภายใต้องค์กร
- โปรเจ็กต์ GCP 2 รายการภายในองค์กรเดียวกันซึ่งอยู่ภายใต้โฟลเดอร์
- สิทธิ์ที่จำเป็นในระดับองค์กร
- บัญชีสำหรับการเรียกเก็บเงินของทั้ง 2 โปรเจ็กต์
- บทแนะนำพื้นฐานเกี่ยวกับการควบคุมบริการ VPC 1 การตั้งค่าการควบคุมบริการ VPC และเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบท
การตั้งค่าทรัพยากร
- ตั้งค่าทรัพยากรตามที่อธิบายไว้ใน "การตั้งค่าทรัพยากร" ส่วนบทแนะนำพื้นฐานของการควบคุมบริการ VPC 1
- ยืนยันว่าคุณมีสิทธิ์ที่จำเป็นในการดูแลระบบ Cloud Storage
- สำหรับบทแนะนำนี้ เราจะเริ่มใช้ CLI แทน Cloud Console ในสภาพแวดล้อมการพัฒนา ให้ตั้งค่า gcloud CLI ดังนี้
- Cloud Shell: หากต้องการใช้เทอร์มินัลออนไลน์ที่มีการตั้งค่า gcloud CLI ไว้แล้ว ให้เปิดใช้งาน Cloud Shell
เปิดใช้งาน Cloud Shell โดยคลิกไอคอนที่มุมขวาบนของ Cloud Console เซสชันอาจใช้เวลา 2-3 วินาทีในการเริ่มต้น ดูรายละเอียดเพิ่มเติมได้ที่คำแนะนำ Cloud Shell
ค่าใช้จ่าย
คุณต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้จะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่นอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud ใหม่จะมีสิทธิ์ใช้โปรแกรมช่วงทดลองใช้ฟรีมูลค่า $300 USD
ทรัพยากรเดียวที่จะสร้างค่าใช้จ่ายคืออินสแตนซ์ VM และออบเจ็กต์ Cloud Storage คุณดูค่าใช้จ่ายโดยประมาณของอินสแตนซ์ VM ได้ในเครื่องคำนวณราคา ดูค่าใช้จ่ายโดยประมาณของ Cloud Storage ได้ในรายการราคานี้
3. สร้างที่เก็บข้อมูลและออบเจ็กต์ของพื้นที่เก็บข้อมูล
ดังที่กล่าวไว้ก่อนหน้านี้ เราจะนำแหล่งข้อมูลที่สร้างในบทแนะนำก่อนหน้ามาใช้ซ้ำ ดังนั้น เราจะดำเนินการสร้างที่เก็บข้อมูล Cloud Storage ต่อ สำหรับบทแนะนำนี้ เราจะเริ่มใช้ gcloud CLI แทนคอนโซล
- เลือก ProjectX ในคอนโซล Google ในโปรเจ็กต์นี้ เราจะสร้างที่เก็บข้อมูล Storage และออบเจ็กต์
- ตรวจสอบว่าคุณได้ตั้งค่า 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
เพิ่มอะไรก็ได้ที่ต้องการในไฟล์ข้อความ
- อัปโหลดออบเจ็กต์ลงในที่เก็บข้อมูล
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 ใน Codelab นี้ เราจะแก้ไขขอบเขตโหมดทดลองเรียกใช้และเพิ่ม Cloud Storage การดำเนินการนี้จะช่วยให้เราระบุผลกระทบของการป้องกันขอบเขตได้โดยแสดงการละเมิดการควบคุมบริการ VPC ในบันทึกการตรวจสอบ แต่ทรัพยากรจะยังคงเข้าถึงได้จนกว่าเราจะบังคับใช้ขอบเขต
- เลือกองค์กรของคุณในคอนโซล Google เข้าถึงการควบคุมบริการ VPC ตรวจสอบว่าคุณอยู่ในขอบเขตองค์กร
- เปิด Cloud Shell และอัปเดตขอบเขตทดลองเรียกใช้ "SuperProtection" ที่สร้างในห้องทดลองก่อนหน้านี้
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
- ใน 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 ใน VM CLI แทนรายการออบเจ็กต์พื้นที่เก็บข้อมูล ดังนี้
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. การแก้ปัญหาการปฏิเสธรายการ
เราจะแก้ปัญหาการปฏิเสธที่ได้รับจากอินสแตนซ์ VM CLI ลองดูบันทึกการตรวจสอบ แล้วมองหารหัสที่ไม่ซ้ำกันของการควบคุมบริการ VPC
- ไปที่ตัวเลือกโปรเจ็กต์ แล้วเลือก ProjectZ
- ค้นหารหัสที่ไม่ซ้ำกันสำหรับการควบคุมบริการ VPC ในบันทึกการตรวจสอบโดยใช้การค้นหาต่อไปนี้ใน Logging 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 Service Controls แล้วเลือก "แก้ปัญหาการปฏิเสธ" ซึ่งจะเปิดเครื่องมือแก้ปัญหาการควบคุมบริการ 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
- อัปเดตนโยบายข้อมูลขาเข้าที่ปกป้อง Project Z
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 ให้ลองแสดงรายการออบเจ็กต์ในที่เก็บข้อมูลของพื้นที่เก็บข้อมูล
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 เพื่อให้แสดงรายการออบเจ็กต์ในที่เก็บข้อมูลของพื้นที่เก็บข้อมูลได้
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 และ/หรือโปรเจ็กต์ที่อยู่ในระบบคลาวด์เพื่อหลีกเลี่ยงการเรียกเก็บเงินได้ด้วย การลบโปรเจ็กต์ที่อยู่ในระบบคลาวด์จะหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้ในโปรเจ็กต์นั้น
- หากต้องการลบอินสแตนซ์ VM ให้เลือกช่องทำเครื่องหมายทางด้านซ้ายของชื่ออินสแตนซ์ VM แล้วคลิกลบ
- หากต้องการลบขอบเขต ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้คลิกความปลอดภัย แล้วคลิกการควบคุมบริการ VPC ที่ขอบเขตขององค์กร
- ในหน้าการควบคุมบริการ VPC ให้คลิก "ลบไอคอน" ในแถวตารางที่ตรงกับขอบเขตที่ต้องการลบ
- หากต้องการลบระดับการเข้าถึง ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้เปิดหน้าเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทที่ขอบเขตโฟลเดอร์
- ในตาราง ในแถวของระดับการเข้าถึงที่คุณต้องการลบ ให้คลิก "ลบไอคอน" แล้วคลิกลบ
- หากต้องการลบออบเจ็กต์พื้นที่เก็บข้อมูลและที่เก็บข้อมูล ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้เปิดหน้าที่เก็บข้อมูล Cloud Storage
- เลือกช่องทำเครื่องหมายข้างที่เก็บข้อมูลที่คุณสร้างขึ้น
- คลิกลบ
- ในหน้าต่างที่เปิดขึ้นมา ให้ยืนยันว่าคุณต้องการลบที่เก็บข้อมูล
- คลิกลบ
- หากต้องการปิดโปรเจ็กต์ ให้ทำตามขั้นตอนต่อไปนี้
- ในคอนโซล Google Cloud ให้ไปที่ IAM & การตั้งค่าผู้ดูแลระบบของโปรเจ็กต์ที่ต้องการลบ
- เกี่ยวกับ IAM และ คลิก ปิดการทำงาน ในหน้าการตั้งค่าของผู้ดูแลระบบ
- ป้อนรหัสโปรเจ็กต์ แล้วคลิกปิดเครื่อง
8. ยินดีด้วย
ใน Codelab นี้ คุณได้อัปเดตขอบเขตการทดลองเรียกใช้การควบคุมบริการ VPC บังคับใช้ และแก้ปัญหาแล้ว
ดูข้อมูลเพิ่มเติม
- ดูเอกสารประกอบเกี่ยวกับการควบคุมบริการ VPC
- โปรดดูเอกสารเกี่ยวกับเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบท
- โปรดดูเอกสารเครื่องมือแก้ปัญหา VPC-SC
- ดูเอกสารประกอบกฎขาเข้าและขาออก
- โปรดดูเอกสารทดลองเรียกใช้
- ดูเอกสารประกอบ Cloud Storage
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0