1. บทนำ
ไฟร์วอลล์รุ่นใหม่บนระบบคลาวด์ (NGFW)
Cloud Next Generation Firewall เป็นบริการไฟร์วอลล์แบบกระจายอย่างเต็มรูปแบบที่มีความสามารถในการป้องกันขั้นสูง การแบ่งส่วนย่อย และความครอบคลุมที่กว้างขวางเพื่อปกป้องภาระงาน Google Cloud จากการโจมตีทั้งภายในและภายนอก
Cloud NGFW มีประโยชน์ดังนี้
- บริการไฟร์วอลล์แบบกระจาย: Cloud NGFW มีการบังคับใช้แบบมีสถานะที่อิงตามโฮสต์แบบกระจายอย่างเต็มรูปแบบในแต่ละภาระงานเพื่อเปิดใช้สถาปัตยกรรมการรักษาความปลอดภัยแบบ Zero Trust
- การกำหนดค่าและการติดตั้งใช้งานที่ง่ายขึ้น: Cloud NGFW จะใช้นโยบายไฟร์วอลล์เครือข่ายและแบบลำดับชั้นที่แนบกับโหนดลำดับชั้นของทรัพยากรได้ นโยบายเหล่านี้มอบประสบการณ์การใช้งานไฟร์วอลล์ที่สอดคล้องกันในลำดับชั้นทรัพยากรของ Google Cloud
- การควบคุมแบบละเอียดและการแบ่งส่วนย่อย: การรวมกันของนโยบายไฟร์วอลล์และแท็กที่ควบคุมโดย Identity and Access Management (IAM) ช่วยให้ควบคุมการรับส่งข้อมูลทั้งจากภายนอกและภายในได้อย่างละเอียดจนถึงระดับ VM เดียวในเครือข่าย Virtual Private Cloud (VPC)
นโยบายไฟร์วอลล์เครือข่าย
นโยบายไฟร์วอลล์เครือข่ายทำหน้าที่เป็นคอนเทนเนอร์สำหรับกฎไฟร์วอลล์ กฎที่กำหนดไว้ในนโยบายไฟร์วอลล์เครือข่ายจะไม่มีผลที่ใดจนกว่าจะมีการเชื่อมโยงนโยบายกับเครือข่าย VPC เครือข่าย VPC แต่ละเครือข่ายสามารถมีนโยบายไฟร์วอลล์เครือข่ายที่เชื่อมโยงได้ 1 รายการ นโยบายไฟร์วอลล์เครือข่ายรองรับแท็กที่ควบคุมโดย IAM (หรือแท็ก) ในกฎไฟร์วอลล์ และใช้เพื่อระบุตัวตนให้กับภาระงานได้
การแชร์นโยบายไฟร์วอลล์เครือข่ายในเครือข่ายต่างๆ และการผสานรวมกับแท็กที่ควบคุมโดย IAM จะช่วยลดความซับซ้อนในการกำหนดค่าและการจัดการไฟร์วอลล์ได้อย่างมาก
เมื่อเปิดตัวนโยบายไฟร์วอลล์เครือข่าย นโยบายไฟร์วอลล์ของ Google Cloud จึงประกอบด้วยคอมโพเนนต์ต่อไปนี้
- นโยบายไฟร์วอลล์แบบลำดับชั้น
- กฎไฟร์วอลล์ VPC
- นโยบายไฟร์วอลล์เครือข่ายส่วนกลางและนโยบายไฟร์วอลล์เครือข่ายระดับภูมิภาค
ระบบรองรับนโยบายไฟร์วอลล์แบบลำดับชั้นที่โหนดองค์กรและโฟลเดอร์ภายในลำดับชั้นทรัพยากร ในขณะที่กฎไฟร์วอลล์ VPC และนโยบายไฟร์วอลล์เครือข่ายจะใช้ในระดับ VPC ความแตกต่างที่สำคัญระหว่างกฎไฟร์วอลล์ VPC กับนโยบายไฟร์วอลล์เครือข่ายคือ กฎไฟร์วอลล์ VPC ใช้ได้กับเครือข่าย VPC เดียวเท่านั้น ในขณะที่นโยบายไฟร์วอลล์เครือข่ายสามารถแนบกับ VPC เดียวหรือกลุ่ม VPC ได้ นอกเหนือจากประโยชน์อื่นๆ เช่น การอัปเดตแบบเป็นชุด
ในแล็บนี้ เราจะทดสอบนโยบายไฟร์วอลล์แบบลำดับชั้นและนโยบายไฟร์วอลล์เครือข่ายส่วนกลาง
สุดท้ายนี้ เรายังมีกฎไฟร์วอลล์โดยนัยที่มาพร้อมกับเครือข่าย VPC ทุกเครือข่ายด้วย
- กฎขาออกที่มีการดำเนินการเป็นอนุญาต ปลายทางเป็น 0.0.0.0/0
- กฎขาเข้าที่มีการดำเนินการเป็นปฏิเสธและแหล่งที่มาเป็น 0.0.0.0/0
โดยค่าเริ่มต้น ลำดับการบังคับใช้จะแสดงในแผนภาพต่อไปนี้

แท็กที่ควบคุมโดย IAM
แท็กใหม่ที่ผสานรวมในกฎนโยบายไฟร์วอลล์คือทรัพยากรคู่คีย์-ค่าที่กำหนดไว้ที่ระดับองค์กรหรือโปรเจ็กต์ของลำดับชั้นทรัพยากร Google Cloud แท็กดังกล่าวมีการควบคุมการเข้าถึง IAM ตามชื่อที่ระบุว่าใครทำอะไรในแท็กได้บ้าง เช่น สิทธิ์ IAM ช่วยให้ระบุได้ว่าผู้ใช้รายใดสามารถกำหนดค่าให้กับแท็ก และผู้ใช้รายใดสามารถแนบแท็กกับทรัพยากรได้ เมื่อใช้แท็กกับทรัพยากรแล้ว กฎนโยบายไฟร์วอลล์จะใช้แท็กดังกล่าวเพื่ออนุญาตและปฏิเสธการรับส่งข้อมูลได้
แท็กเป็นไปตามโมเดลทรัพยากรการรับช่วงของ Google Cloud ซึ่งหมายความว่าระบบจะส่งแท็กและค่าของแท็กผ่านลำดับชั้นจากระดับบนสุด ด้วยเหตุนี้ ระบบจึงอาจสร้างแท็กในที่เดียว แล้วโฟลเดอร์และโปรเจ็กต์อื่นๆ จะใช้แท็กนั้นได้ทั่วทั้งลำดับชั้นของทรัพยากร ดูรายละเอียดเพิ่มเติมเกี่ยวกับแท็กและการจำกัดการเข้าถึงได้ที่หน้านี้
อย่าสับสนระหว่างแท็กกับแท็กเครือข่าย โดยแท็กเครือข่ายเป็นสตริงที่เพิ่มลงในอินสแตนซ์ Compute Engine ได้ ซึ่งเชื่อมโยงกับอินสแตนซ์และจะหายไปเมื่อเลิกใช้งานอินสแตนซ์ กฎไฟร์วอลล์ VPC อาจมีแท็กเครือข่าย แต่เนื่องจากไม่ได้ถือว่าเป็นทรัพยากรระบบคลาวด์ จึงไม่อยู่ภายใต้การควบคุมการเข้าถึง IAM ดูรายละเอียดความแตกต่างได้ที่หน้านี้
2. สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างแท็กที่ควบคุมโดย IAM เพื่อใช้กับ Cloud NGFW และมีขอบเขตทั่วโลก
- วิธีแนบแท็กกับ VM
- วิธีสร้างนโยบายไฟร์วอลล์แบบลําดับชั้นและเชื่อมโยงกับโฟลเดอร์
- วิธีสร้างกฎไฟร์วอลล์ในนโยบายไฟร์วอลล์แบบลําดับชั้น และระบุแหล่งที่มาและเป้าหมายโดยใช้แท็กที่ควบคุมโดย IAM
3. สถาปัตยกรรมของ Lab โดยรวม

การจัดระเบียบและโฟลเดอร์:
- คุณจะสร้างโฟลเดอร์ 2 โฟลเดอร์ ได้แก่
folder1และfolder2โดยตรงภายใต้องค์กร
โปรเจ็กต์:
- ใน
folder1คุณจะสร้างโปรเจ็กต์โฮสต์ โปรเจ็กต์นี้จะมีเครือข่าย VPC ที่แชร์ - ใน
folder2คุณจะสร้างโปรเจ็กต์บริการ โปรเจ็กต์นี้จะมี VM ที่ใช้ VPC ที่แชร์
เครือข่าย:
- ระบบจะสร้างเครือข่าย VPC ชื่อ
mynetในโปรเจ็กต์โฮสต์และกำหนดค่าเป็น VPC ที่แชร์ ซึ่งจะช่วยให้ทรัพยากรในโปรเจ็กต์บริการใช้เครือข่ายได้ - ระบบจะสร้าง VM 2 รายการในโปรเจ็กต์บริการและเชื่อมต่อกับ
mynetVPC ที่แชร์
แท็กที่ควบคุมโดย IAM:
- คุณจะสร้างแท็กที่ควบคุมโดย IAM ชื่อ
http_tagsโดยมีค่า 2 ค่า ได้แก่ ชื่อhttp_serverและhttp_clientที่ระดับองค์กร ระบบจะใช้แท็ก/ค่าเหล่านี้เพื่อระบุและใช้กฎไฟร์วอลล์กับ VM
นโยบายไฟร์วอลล์:
- ระบบจะสร้างนโยบายไฟร์วอลล์แบบลำดับชั้นและเชื่อมโยงกับ
folder1กฎภายในนโยบายนี้จะใช้แท็กที่ควบคุมโดย IAM เพื่ออนุญาตการรับส่งข้อมูลจากhttp-clientไปยังhttp-serverในพอร์ต 80 - ระบบจะสร้างนโยบายไฟร์วอลล์เครือข่ายในโปรเจ็กต์โฮสต์และเชื่อมโยงกับ
mynetVPC นโยบายนี้จะมีกฎที่อนุญาตให้เข้าถึง VM ผ่าน IAP SSH เพื่อวัตถุประสงค์ในการทดสอบ
4. ขั้นตอนการเตรียม
ก่อนอื่น ให้ตั้งค่าบทบาท IAM โครงสร้างพื้นฐานเครือข่าย และอินสแตนซ์ที่จำเป็นในองค์กร Google Cloud
บทบาท IAM ที่จำเป็นต่อการทำงานในแล็บ
เราเริ่มต้นด้วยการมอบหมายบทบาท IAM ที่จำเป็นให้กับบัญชี GCP ในระดับองค์กร
- ผู้ดูแลระบบองค์กร (
roles/resourcemanager.organizationAdmin) บทบาทนี้ช่วยให้คุณจัดการนโยบาย IAM และดูนโยบายขององค์กรสำหรับองค์กร โฟลเดอร์ และโปรเจ็กต์ได้ - ผู้ดูแลแท็ก(
roles/resourcemanager.tagAdmin) บทบาทนี้ช่วยให้คุณสร้าง อัปเดต และลบแท็กที่ปลอดภัยได้ - บทบาทผู้ใช้แท็ก (
roles/resourcemanager.tagUser) บทบาทนี้ช่วยให้คุณเข้าถึงรายการแท็กที่ปลอดภัยและจัดการการเชื่อมโยงกับทรัพยากรได้ - บทบาทผู้ดูแลระบบนโยบายไฟร์วอลล์ขององค์กร Compute (
roles/compute.orgFirewallPolicyAdmin) บทบาทนี้ช่วยให้คุณควบคุมนโยบายไฟร์วอลล์ขององค์กร Compute Engine ได้อย่างเต็มที่ - บทบาทผู้ดูแลระบบทรัพยากรขององค์กร Compute (
roles/compute.orgSecurityResourceAdmin) บทบาทนี้ช่วยให้คุณควบคุมการเชื่อมโยงนโยบายไฟร์วอลล์ของ Compute Engine กับองค์กรหรือโฟลเดอร์ได้อย่างเต็มที่ - ผู้ดูแลระบบเครือข่าย Compute (
roles/compute.networkAdmin) บทบาทนี้ช่วยให้คุณควบคุมทรัพยากรเครือข่ายของ Compute Engine ได้อย่างเต็มที่ - ผู้ดูแลระบบอินสแตนซ์ Compute( เบต้า) (
roles/compute.instanceAdmin) บทบาทนี้ช่วยให้คุณควบคุมทรัพยากรอินสแตนซ์ของ Compute Engine ได้อย่างเต็มที่ - ผู้ดูแลระบบการบันทึก (
roles/logging.admin) บทบาทนี้ให้สิทธิ์เข้าถึงสิทธิ์การบันทึกทั้งหมดและสิทธิ์ที่เกี่ยวข้อง - ผู้ดูแลระบบบัญชีบริการ (
roles/iam.serviceAccountAdmin) บทบาทนี้ช่วยให้คุณสร้างและจัดการบัญชีบริการได้ - ผู้ดูแลการใช้งานบริการ (
roles/serviceusage.serviceUsageAdmin) บทบาทนี้ช่วยให้คุณเปิดใช้ ปิดใช้ และตรวจสอบสถานะของบริการ ตรวจสอบการดำเนินงาน รวมถึงใช้โควต้าและการเรียกเก็บเงินสำหรับโปรเจ็กต์ของผู้บริโภคได้ - ผู้ดูแลระบบ VPC ที่แชร์ของ Compute (
roles/compute.xpnAdmin) บทบาทนี้ช่วยให้คุณดูแลจัดการเครือข่าย VPC ที่แชร์ (XPN) ได้
สร้างโฟลเดอร์และโปรเจ็กต์
ใน Cloud Shell ให้ทำดังนี้เพื่อสร้าง folder1 และ folder2
gcloud auth login
export org_id=$(gcloud organizations list --format='value(ID)')
export BILLING_ACCOUNT_ID=$(gcloud billing accounts list --format='value(ACCOUNT_ID)')
export folder1=[FOLDER1 NAME]
export folder2=[FOLDER2 NAME]
export hostproject=[HOST PROJECT NAME]
export serviceproject=[SERVICE PROJECT NAME]
export regionname=[REGION NAME]
export zonename=[COMPUTE ZONE NAME]
gcloud resource-manager folders create --display-name=$folder1 --organization=$org_id
export folder1_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder1" --format="value(ID)")
gcloud resource-manager folders create --display-name=$folder2 --organization=$org_id
export folder2_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder2" --format="value(ID)")
ใน Cloud Shell ให้ทำดังนี้เพื่อสร้างโปรเจ็กต์โฮสต์ภายใต้ folder1
gcloud projects create --name=$hostproject --folder=$folder1_id
คุณจะเห็นข้อมูลต่อไปนี้ กด Y เพื่อสร้างโปรเจ็กต์ด้วยรหัสโปรเจ็กต์ใหม่
No project ID provided.
Use [NEW-PROJECT-ID] as project ID (Y/n)?
จดรหัสโปรเจ็กต์ ใน Cloud Shell ให้ทำดังนี้เพื่อส่งออกไปยัง hostproject_id
export hostproject_id=[HOSTPROJECT ID]
ใน Cloud Shell ให้ทำดังนี้เพื่อลิงก์โปรเจ็กต์โฮสต์กับบัญชีสำหรับการเรียกเก็บเงิน
gcloud billing projects link $hostproject_id \
--billing-account=$BILLING_ACCOUNT_ID
ใน Cloud Shell ให้ทำดังนี้เพื่อสร้างโปรเจ็กต์บริการภายใต้ folder2
gcloud projects create --name=$serviceproject --folder=$folder2_id
คุณจะเห็นข้อมูลต่อไปนี้ กด Y เพื่อสร้างโปรเจ็กต์ด้วยรหัสโปรเจ็กต์ใหม่
No project ID provided.
Use [NEW-PROJECT-ID] as project ID (Y/n)?
จดรหัสโปรเจ็กต์ ใน Cloud Shell ให้ทำดังนี้เพื่อส่งออกไปยัง serviceproject_id
export serviceproject_id=[SERVICEPROJECT ID]
ใน Cloud Shell ให้ทำดังนี้เพื่อลิงก์โปรเจ็กต์บริการกับบัญชีสำหรับการเรียกเก็บเงิน
gcloud billing projects link $serviceproject_id \
--billing-account=$BILLING_ACCOUNT_ID
สร้างแท็กที่ควบคุมโดย IAM
แท็กคือคู่คีย์-ค่าที่ต่อเชื่อมกับองค์กร โฟลเดอร์ หรือโปรเจ็กต์ได้ ดูรายละเอียดเพิ่มเติมได้ที่การสร้างและการจัดการแท็กและสิทธิ์ที่จำเป็น
เราสร้างแท็ก 1 รายการที่ระดับองค์กร http-tags วัตถุประสงค์ของแท็กคือเพื่อใช้ Cloud NGFW เราไม่ได้จำกัดขอบเขตไว้ที่เครือข่ายเดียว แต่แท็กมีขอบเขตทั่วโลก และในภายหลังเราจะใช้แท็กกับ VM ที่สร้างในโปรเจ็กต์บริการภายใต้ folder2
ใน Cloud Shell ให้ทำดังนี้
gcloud resource-manager tags keys create http_tags \
--parent=organizations/$org_id \
--purpose GCE_FIREWALL \
--purpose-data organization=auto
เราจะใช้รหัสคีย์แท็กเพื่อประกอบ VM ในระหว่างการสร้าง ใน Cloud Shell ให้ทำดังนี้เพื่อรับรหัสคีย์แท็ก
export http_tags_id=$(gcloud resource-manager tags keys describe $org_id/http_tags --format="value(name)")
echo $http_tags_id
ใน Cloud Shell ให้ทำดังนี้เพื่อสร้างค่าแท็กใหม่ 2 ค่า ได้แก่ http_server และ http_client
gcloud resource-manager tags values create http_server \
--parent $org_id/http_tags
gcloud resource-manager tags values create http_client \
--parent $org_id/http_tags
เราจะใช้รหัสแท็กและรหัสค่าแท็กเพื่อใส่คำอธิบายประกอบ VM ในระหว่างการสร้าง ใน Cloud Shell ให้ทำดังนี้เพื่อรับรหัสค่าแท็กของ http_server และ http_client
export http_tags_http_server_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_server --format="value(name)")
echo $http_tags_http_server_id
export http_tags_http_client_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_client --format="value(name)")
echo $http_tags_http_client_id
เปิดใช้ API ในโปรเจ็กต์โฮสต์และโปรเจ็กต์บริการ
ใน Cloud Shell ให้ทำดังนี้
gcloud services enable compute.googleapis.com --project=$serviceproject_id
gcloud services enable compute.googleapis.com --project=$hostproject_id
สร้าง VPC ในโปรเจ็กต์โฮสต์
ในโปรเจ็กต์โฮสต์ ให้สร้างเครือข่าย VPC ที่มีโหมดซับเน็ตที่กำหนดเอง แล้วทำดังนี้ใน Cloud Shell
gcloud compute networks create mynet \
--subnet-mode=custom \
--project=$hostproject_id
สร้างซับเน็ตในโปรเจ็กต์โฮสต์
ใน Cloud Shell ให้ทำดังนี้เพื่อสร้างเครือข่ายย่อย IPv4
gcloud compute networks subnets create mysubnet \
--network=mynet \
--range=10.0.0.0/28 \
--region=$regionname \
--project=$hostproject_id
เปิดใช้ VPC ที่แชร์ในโปรเจ็กต์โฮสต์
ใน Cloud Shell ให้ทำดังนี้เพื่อเปิดใช้ VPC ที่แชร์ในโปรเจ็กต์โฮสต์
gcloud compute shared-vpc enable $hostproject_id
แนบโปรเจ็กต์บริการสำหรับ VPC ที่แชร์ในโปรเจ็กต์โฮสต์
ใน Cloud Shell ให้ทำดังนี้เพื่อแนบโปรเจ็กต์บริการสำหรับ VPC ที่แชร์ในโปรเจ็กต์โฮสต์
gcloud compute shared-vpc associated-projects add $serviceproject_id --host-project=$hostproject_id
สร้าง Cloud Router และ Cloud NAT ในโปรเจ็กต์โฮสต์
Cloud NAT ใช้เพื่ออนุญาตการรับส่งข้อมูลขาออกจากอินเทอร์เน็ตสำหรับ VM เพื่อดาวน์โหลดและติดตั้งแอปพลิเคชัน
gcloud compute routers create $regionname-cr \
--network=mynet \
--region=$regionname \
--project=$hostproject_id
gcloud compute routers nats create $regionname-nat \
--router=$regionname-cr \
--region=$regionname \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips \
--project=$hostproject_id
สร้างอินสแตนซ์ในโปรเจ็กต์บริการ
ในโปรเจ็กต์บริการ ให้สร้างอินสแตนซ์ 2 รายการในซับเน็ตที่คุณเพิ่งสร้างใน VPC ที่แชร์ในโปรเจ็กต์โฮสต์ อินสแตนซ์หนึ่งชื่อ http-server และเราใส่คำอธิบายประกอบแท็กของ http_tags ด้วยค่าของ http_server อินสแตนซ์อีกรายการหนึ่งชื่อ http-client และเราจะใส่คำอธิบายประกอบแท็กของ http_tags ด้วยค่าของ http_client เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell
gcloud compute instances create http-client \
--project=$serviceproject_id \
--subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
--zone=$zonename \
--no-address \
--resource-manager-tags=$http_tags_id=$http_tags_http_client_id
gcloud compute instances create http-server \
--project=$serviceproject_id \
--subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
--zone=$zonename \
--no-address \
--resource-manager-tags=$http_tags_id=$http_tags_http_server_id \
--metadata startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
a2enmod ssl
sudo a2ensite default-ssl
echo "I am a Http Server." | \
tee /var/www/html/index.html
systemctl restart apache2'
จดที่อยู่ IP ภายในของ http-server เราจะใช้ข้อมูลนี้ในขั้นตอนการทดสอบกฎไฟร์วอลล์ในภายหลัง
export http_server_ip=$(gcloud compute instances describe http-server --zone $zonename --format='value(networkInterfaces[0].networkIP)' --project $serviceproject_id)
echo $http_server_ip
5. สร้างนโยบายไฟร์วอลล์เครือข่ายส่วนกลางในโปรเจ็กต์โฮสต์
เราจะสร้างนโยบายไฟร์วอลล์เครือข่ายส่วนกลางในโปรเจ็กต์โฮสต์และเชื่อมโยงกับ VPC ที่แชร์ในโปรเจ็กต์โฮสต์
gcloud config set project $hostproject_id
gcloud compute network-firewall-policies create mynet-fw-policy \
--global \
--project=$hostproject_id
gcloud compute network-firewall-policies associations create \
--firewall-policy=mynet-fw-policy \
--network=mynet \
--name=mynet-fw-policy \
--global-firewall-policy \
--project=$hostproject_id
หากต้องการอนุญาตให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ให้สร้างกฎไฟร์วอลล์ในนโยบายไฟร์วอลล์ของเครือข่ายโดยทำดังนี้
- มีผลกับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
- อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้มีที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP
gcloud compute network-firewall-policies rules create 1000 \
--action=ALLOW \
--firewall-policy=mynet-fw-policy \
--description="mynet-allow-iap" \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20 \
--layer4-configs=tcp:22 \
--global-firewall-policy \
--project=$hostproject_id
ในคอนโซล คุณสามารถไปที่โปรเจ็กต์โฮสต์และค้นหานโยบายไฟร์วอลล์เครือข่ายส่วนกลางที่สร้างขึ้นใหม่ได้ในส่วนนโยบายไฟร์วอลล์ คุณสามารถตรวจสอบกฎไฟร์วอลล์ที่สร้างขึ้นใหม่ได้ในนโยบายไฟร์วอลล์ของเครือข่าย นี่คือลิงก์คอนโซลที่จะนำคุณไปยังที่เก็บถาวร โปรดตรวจสอบว่าคุณได้เปลี่ยนเครื่องมือเลือกโปรเจ็กต์เป็นโปรเจ็กต์โฮสต์ในคอนโซลแล้ว
6. ทดสอบการเข้าถึงจาก VM ไคลเอ็นต์ HTTP ไปยัง VM เซิร์ฟเวอร์ HTTP
SSH ไปยัง VM ที่ชื่อ http-client และทดสอบว่าเข้าถึง http-server ที่พอร์ต 80 ของ HTTP ได้หรือไม่
ใน Cloud Shell ให้ทำดังนี้
gcloud compute ssh \
--zone=$zonename "http-client" \
--tunnel-through-iap \
--project=$serviceproject_id
ใช้ curl เพื่อเข้าถึงเว็บเซิร์ฟเวอร์
curl -m 10 [http_server_ip]
คุณจะเห็นผลลัพธ์ของคำสั่ง curl ไม่มีกฎไฟร์วอลล์ขาเข้าที่อนุญาตพอร์ต 80 สำหรับ http-server
การเชื่อมต่อหมดเวลาหลังจาก 10000 มิลลิวินาที
กลับไปที่ Cloud Shell โดยออกจากเซสชัน SSH
exit
7. สร้างนโยบายไฟร์วอลล์แบบลำดับชั้นและกฎไฟร์วอลล์
เราจะสร้างนโยบายไฟร์วอลล์แบบลําดับชั้นที่ folder1 และเชื่อมโยงนโยบายกับ folder1 กฎไฟร์วอลล์ในนโยบายจะมีผลกับโปรเจ็กต์โฮสต์ภายใต้ folder1
สร้างนโยบายไฟร์วอลล์แบบลำดับชั้น
gcloud compute firewall-policies create \
--folder=$folder1_id \
--short-name=my-folder1-fw-policy
สร้างกฎไฟร์วอลล์ในนโยบายไฟร์วอลล์แบบลำดับชั้น
กฎนี้อนุญาตให้ VM ที่มีค่าแท็กเป็น http_tags/http_client เข้าถึง VM ที่มีค่าแท็กเป็น http_tags/http_server ที่พอร์ต TCP 80
gcloud compute firewall-policies rules create 100 \
--organization=$org_id \
--firewall-policy my-folder1-fw-policy \
--direction=INGRESS \
--layer4-configs=tcp:80 \
--action=allow \
--src-secure-tags=$org_id/http_tags/http_client \
--target-secure-tags=$org_id/http_tags/http_server \
--description=folder1-allow-http
เชื่อมโยงนโยบายไฟร์วอลล์แบบลำดับชั้นกับโฟลเดอร์ 1
gcloud compute firewall-policies associations create \
--firewall-policy=my-folder1-fw-policy \
--folder=$folder1_id \
--name=my-folder1-fw-policy\
--organization=$org_id
ในคอนโซล คุณสามารถไปที่ folder1 และค้นหานโยบายไฟร์วอลล์แบบลำดับชั้นที่สร้างขึ้นใหม่ภายใต้นโยบายไฟร์วอลล์ นโยบายไฟร์วอลล์จะแสดงใน "นโยบายไฟร์วอลล์ในโฟลเดอร์นี้" คุณสามารถตรวจสอบกฎไฟร์วอลล์ที่สร้างขึ้นใหม่ในนโยบายไฟร์วอลล์แบบลําดับชั้น นี่คือลิงก์คอนโซลที่จะนำคุณไปยังที่เก็บถาวร โปรดตรวจสอบว่าคุณได้เปลี่ยนตัวเลือกโปรเจ็กต์เป็น folder1 ในคอนโซลแล้ว
8. ทดสอบการเข้าถึงจาก VM ไคลเอ็นต์ HTTP ไปยัง VM เซิร์ฟเวอร์ HTTP
ตรวจสอบนโยบายไฟร์วอลล์ที่มีผลซึ่งใช้กับ VPC ที่แชร์ในโปรเจ็กต์โฮสต์
ใน Cloud Shell ให้ทำดังนี้
gcloud compute networks get-effective-firewalls mynet --project=$hostproject_id
คุณจะเห็นนโยบายไฟร์วอลล์แบบลําดับชั้นที่รับช่วงมาดังนี้
TYPE: org-firewall
FIREWALL_POLICY_NAME: <NUMBER_FOR_YOUR_FW_POLICY>
FIREWALL_POLICY_PRIORITY:
PRIORITY: 100
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES:
You will see the network firewall policy to the VPC like this:
TYPE: network-firewall-policy
FIREWALL_POLICY_NAME: mynet-fw-policy
FIREWALL_POLICY_PRIORITY: 1000
PRIORITY: 1000
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES: 35.235.240.0/20
SSH ไปยัง VM ที่ชื่อ http-client และทดสอบว่าเข้าถึง http-server ที่พอร์ต 80 ของ HTTP ได้หรือไม่
ใน Cloud Shell ให้ทำดังนี้
gcloud compute ssh \
--zone=$zonename "http-client" \
--tunnel-through-iap \
--project=$serviceproject_id
ใช้ curl เพื่อเข้าถึงเว็บเซิร์ฟเวอร์
curl [http_server_ip]
คุณจะเห็นว่าคำสั่ง curl แสดงการตอบกลับจาก http-server ได้สำเร็จ
I am a Http Server.
กฎไฟร์วอลล์ขาเข้าจากนโยบายไฟร์วอลล์แบบลำดับชั้นอนุญาตให้เข้าถึงจาก http-client ไปยัง http-server ที่พอร์ต 80
กลับไปที่ Cloud Shell โดยออกจากเซสชัน SSH
exit
9. ล้างข้อมูล
ล้างข้อมูล VM ในโปรเจ็กต์บริการ
ใน Cloud Shell ให้ทำดังนี้
gcloud compute instances delete http-server --zone $zonename --project=$serviceproject_id
gcloud compute instances delete http-client --zone $zonename --project=$serviceproject_id
ล้างนโยบายไฟร์วอลล์แบบลําดับชั้น
ใน Cloud Shell ให้ทำดังนี้
gcloud compute firewall-policies associations delete my-folder1-fw-policy \
--firewall-policy=my-folder1-fw-policy \
--organization=$org_id
gcloud compute firewall-policies rules delete 100 \
--organization=$org_id \
--firewall-policy=my-folder1-fw-policy
gcloud compute firewall-policies delete my-folder1-fw-policy \
--organization=$org_id
ล้างข้อมูลแท็กที่ระดับองค์กร
ใน Cloud Shell ให้ทำดังนี้
gcloud resource-manager tags values delete $http_tags_http_server_id
gcloud resource-manager tags values delete $http_tags_http_client_id
gcloud resource-manager tags keys delete $http_tags_id
ล้างข้อมูลโปรเจ็กต์โฮสต์
ใน Cloud Shell ให้ทำดังนี้
gcloud compute shared-vpc associated-projects remove $serviceproject_id --host-project=$hostproject_id
gcloud compute shared-vpc disable $hostproject_id
gcloud projects delete $hostproject_id
ล้างข้อมูลในโปรเจ็กต์บริการ
ใน Cloud Shell ให้ทำดังนี้
gcloud projects delete $serviceproject_id
ล้างโฟลเดอร์
ใน Cloud Shell ให้ทำดังนี้
gcloud resource-manager folders delete $folder1_id
gcloud resource-manager folders delete $folder2_id
10. ขอแสดงความยินดี
คุณทดสอบนโยบายไฟร์วอลล์แบบลําดับชั้นด้วยแท็กที่ควบคุมโดย IAM เรียบร้อยแล้ว