นโยบายไฟร์วอลล์แบบลำดับชั้นที่มีแท็กที่ควบคุมโดย IAM

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 จึงประกอบด้วยคอมโพเนนต์ต่อไปนี้

  1. นโยบายไฟร์วอลล์แบบลำดับชั้น
  2. กฎไฟร์วอลล์ VPC
  3. นโยบายไฟร์วอลล์เครือข่ายส่วนกลางและนโยบายไฟร์วอลล์เครือข่ายระดับภูมิภาค

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

ในแล็บนี้ เราจะทดสอบนโยบายไฟร์วอลล์แบบลำดับชั้นและนโยบายไฟร์วอลล์เครือข่ายส่วนกลาง

สุดท้ายนี้ เรายังมีกฎไฟร์วอลล์โดยนัยที่มาพร้อมกับเครือข่าย VPC ทุกเครือข่ายด้วย

  • กฎขาออกที่มีการดำเนินการเป็นอนุญาต ปลายทางเป็น 0.0.0.0/0
  • กฎขาเข้าที่มีการดำเนินการเป็นปฏิเสธและแหล่งที่มาเป็น 0.0.0.0/0

โดยค่าเริ่มต้น ลำดับการบังคับใช้จะแสดงในแผนภาพต่อไปนี้

86df8f0d19c64e80.png

แท็กที่ควบคุมโดย IAM

แท็กใหม่ที่ผสานรวมในกฎนโยบายไฟร์วอลล์คือทรัพยากรคู่คีย์-ค่าที่กำหนดไว้ที่ระดับองค์กรหรือโปรเจ็กต์ของลำดับชั้นทรัพยากร Google Cloud แท็กดังกล่าวมีการควบคุมการเข้าถึง IAM ตามชื่อที่ระบุว่าใครทำอะไรในแท็กได้บ้าง เช่น สิทธิ์ IAM ช่วยให้ระบุได้ว่าผู้ใช้รายใดสามารถกำหนดค่าให้กับแท็ก และผู้ใช้รายใดสามารถแนบแท็กกับทรัพยากรได้ เมื่อใช้แท็กกับทรัพยากรแล้ว กฎนโยบายไฟร์วอลล์จะใช้แท็กดังกล่าวเพื่ออนุญาตและปฏิเสธการรับส่งข้อมูลได้

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

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

2. สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างแท็กที่ควบคุมโดย IAM เพื่อใช้กับ Cloud NGFW และมีขอบเขตทั่วโลก
  • วิธีแนบแท็กกับ VM
  • วิธีสร้างนโยบายไฟร์วอลล์แบบลําดับชั้นและเชื่อมโยงกับโฟลเดอร์
  • วิธีสร้างกฎไฟร์วอลล์ในนโยบายไฟร์วอลล์แบบลําดับชั้น และระบุแหล่งที่มาและเป้าหมายโดยใช้แท็กที่ควบคุมโดย IAM

3. สถาปัตยกรรมของ Lab โดยรวม

1bfe78ad755496e5.png

การจัดระเบียบและโฟลเดอร์:

  • คุณจะสร้างโฟลเดอร์ 2 โฟลเดอร์ ได้แก่ folder1 และ folder2 โดยตรงภายใต้องค์กร

โปรเจ็กต์:

  • ใน folder1 คุณจะสร้างโปรเจ็กต์โฮสต์ โปรเจ็กต์นี้จะมีเครือข่าย VPC ที่แชร์
  • ใน folder2 คุณจะสร้างโปรเจ็กต์บริการ โปรเจ็กต์นี้จะมี VM ที่ใช้ VPC ที่แชร์

เครือข่าย:

  • ระบบจะสร้างเครือข่าย VPC ชื่อ mynet ในโปรเจ็กต์โฮสต์และกำหนดค่าเป็น VPC ที่แชร์ ซึ่งจะช่วยให้ทรัพยากรในโปรเจ็กต์บริการใช้เครือข่ายได้
  • ระบบจะสร้าง VM 2 รายการในโปรเจ็กต์บริการและเชื่อมต่อกับ mynet VPC ที่แชร์

แท็กที่ควบคุมโดย IAM:

  • คุณจะสร้างแท็กที่ควบคุมโดย IAM ชื่อ http_tags โดยมีค่า 2 ค่า ได้แก่ ชื่อ http_server และ http_client ที่ระดับองค์กร ระบบจะใช้แท็ก/ค่าเหล่านี้เพื่อระบุและใช้กฎไฟร์วอลล์กับ VM

นโยบายไฟร์วอลล์:

  • ระบบจะสร้างนโยบายไฟร์วอลล์แบบลำดับชั้นและเชื่อมโยงกับ folder1 กฎภายในนโยบายนี้จะใช้แท็กที่ควบคุมโดย IAM เพื่ออนุญาตการรับส่งข้อมูลจาก http-client ไปยัง http-server ในพอร์ต 80
  • ระบบจะสร้างนโยบายไฟร์วอลล์เครือข่ายในโปรเจ็กต์โฮสต์และเชื่อมโยงกับ mynet VPC นโยบายนี้จะมีกฎที่อนุญาตให้เข้าถึง 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 เรียบร้อยแล้ว