Kebijakan firewall jaringan global dengan Tag

1. Pengantar

Kebijakan firewall jaringan

Firewall adalah elemen penyusun dasar untuk lingkungan cloud yang aman. Sebelumnya, kami memperkenalkan kebijakan firewall di tingkat organisasi dan folder, tanpa mengubah firewall VPC. Pada versi ini, kami akan memperluas struktur kebijakan firewall hingga tingkat VPC, dan melakukan beberapa peningkatan untuk dukungan kebijakan firewall saat ini, guna memberikan dukungan firewall terpadu di seluruh hierarki resource Google Cloud dan pengalaman pengguna yang konsisten dalam mengelola kontrol kebijakan firewall mereka dengan cara yang aman, fleksibel, dan skalabel.

Kebijakan firewall jaringan berfungsi sebagai penampung untuk aturan firewall. Aturan yang ditentukan dalam kebijakan firewall jaringan tidak diterapkan di mana pun hingga kebijakan tersebut dikaitkan dengan jaringan VPC. Setiap jaringan VPC dapat memiliki satu kebijakan firewall jaringan yang terkait dengannya. Kebijakan firewall jaringan mendukung Tag yang diatur IAM (atau hanya Tag) pada aturan firewall, yang menggantikan tag jaringan saat ini dan dapat digunakan untuk memberikan identitas ke workload.

Berbagi kebijakan firewall jaringan di seluruh jaringan dan integrasi dengan Tag yang diatur IAM sangat menyederhanakan konfigurasi dan pengelolaan firewall.

Dengan diperkenalkannya kebijakan firewall jaringan, kebijakan firewall Google Cloud kini terdiri dari komponen berikut:

  1. Kebijakan Firewall Hierarkis
  2. Aturan Firewall VPC
  3. Kebijakan Firewall Jaringan ( Global dan Regional)

Kebijakan firewall hierarkis didukung di node folder dan organisasi dalam hierarki resource, sedangkan aturan firewall VPC dan kebijakan firewall jaringan diterapkan di tingkat VPC. Perbedaan besar antara aturan firewall VPC dan kebijakan firewall jaringan adalah bahwa aturan firewall VPC hanya dapat diterapkan ke satu jaringan VPC, sedangkan kebijakan firewall jaringan dapat dikaitkan ke satu VPC atau grup VPC, di antara manfaat lainnya seperti update batch.

Terakhir, kita juga memiliki aturan firewall implisit yang disertakan dengan setiap jaringan VPC:

  • Aturan keluar yang tindakannya diizinkan, tujuannya adalah 0.0.0.0/0
  • Aturan masuk yang tindakannya ditolak, sumbernya adalah 0.0.0.0/0

Secara default, urutan penerapan ditampilkan dalam diagram berikut:

abae4597af782b2b.png

Perlu diperhatikan bahwa urutan penerapan antara aturan firewall VPC dan kebijakan firewall jaringan global dapat ditukar. Pelanggan dapat menentukan perintah penerapan kapan saja dengan perintah gcloud.

Tag

Tag baru yang terintegrasi dalam aturan kebijakan firewall jaringan adalah resource pasangan nilai kunci yang ditentukan di level organisasi dalam hierarki resource Google Cloud. Tag tersebut berisi kontrol akses IAM, seperti namanya, yang menentukan siapa yang dapat melakukan apa pada tag. Izin IAM, misalnya, memungkinkan seseorang menentukan akun utama mana yang dapat menetapkan nilai ke tag dan akun utama mana yang dapat melampirkan tag ke resource. Setelah Tag diterapkan ke resource, aturan firewall jaringan dapat menggunakannya untuk mengizinkan dan menolak traffic.

Tag mematuhi model resource pewarisan Google Cloud, yang berarti tag dan nilainya diturunkan di seluruh hierarki dari induknya. Akibatnya, tag mungkin dibuat di satu tempat, lalu digunakan oleh folder dan project lain di seluruh hierarki resource. Buka halaman ini untuk mengetahui detail lebih lanjut tentang tag dan pembatasan akses.

Tag tidak sama dengan tag jaringan. Tag jaringan adalah string yang dapat ditambahkan ke instance Compute Engine; terhubung dengan instance dan menghilang saat instance dinonaktifkan. Aturan firewall VPC dapat mencakup tag jaringan, tetapi karena tidak dianggap sebagai resource cloud, aturan tersebut tidak tunduk pada kontrol akses IAM.

Perhatikan bahwa Tag dan Tag yang diatur IAM digunakan secara bergantian dalam dokumen ini.

Yang akan Anda bangun

Codelab ini memiliki dua bagian - bagian pertama menunjukkan kebijakan firewall jaringan dan Tag menggunakan satu jaringan VPC, dan bagian kedua menunjukkan cara menggunakan Tag di berbagai jaringan VPC yang di-peering sesuai diagram di bawah. Dengan demikian, codelab ini memerlukan satu project dan kemampuan untuk membuat beberapa jaringan VPC.

b9acf9823df8be04.jpeg

Yang akan Anda pelajari

  • Cara membuat kebijakan firewall jaringan
  • Cara membuat dan menggunakan Tag dengan kebijakan firewall jaringan
  • Cara menggunakan Tag pada Peering Jaringan VPC

Yang Anda butuhkan

  • Project Google Cloud
  • Pengetahuan dalam men-deploy instance dan mengonfigurasi komponen jaringan
  • Pengetahuan konfigurasi firewall VPC

2. Sebelum memulai

Membuat/memperbarui variabel

Codelab ini menggunakan $variables untuk membantu penerapan konfigurasi gcloud di Cloud Shell.

Di dalam Cloud Shell, lakukan hal berikut:

gcloud config set project [project-id]
export project_id=`gcloud config list --format="value(core.project)"`
export org_id=[org]
export region=us-central1
export zone=us-central1-a
export prefix=fwpolicy

3. Membuat subnet dan jaringan VPC

Jaringan VPC

Buat fwpolicy-vpc1:

gcloud compute networks create $prefix-vpc1 --subnet-mode=custom 

Subnet

Buat subnet yang sesuai di region yang dipilih:

gcloud compute networks subnets create $prefix-vpc1-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region

Cloud NAT

Buat Cloud Router dan gateway Cloud NAT untuk fwpolicy-pc1:

gcloud compute routers create $prefix-vpc1-cr \
  --region=$region --network=$prefix-vpc1

gcloud compute routers nats create $prefix-vpc1-cloudnat \
   --router=$prefix-vpc1-cr --router-region=$region \
   --auto-allocate-nat-external-ips \
   --nat-all-subnet-ip-ranges

4. Membuat instance

Buat aturan firewall yang mengizinkan traffic SSH masuk dari rentang IAP jika belum ditetapkan sebagai bagian dari penyiapan IAP:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc1 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

Buat instance klien fwpolicy-vpc1 dan server web:

gcloud compute instances create $prefix-vpc1-www \
   --subnet=$prefix-vpc1-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

gcloud compute instances create $prefix-vpc1-client \
    --subnet=$prefix-vpc1-subnet --no-address --zone $zone

Karena tidak ada aturan firewall VPC yang ditetapkan (selain aturan izinkan SSH yang harus dibuat saat mengonfigurasi IAP sesuai dengan awal bagian ini), dan secara default semua traffic masuk ditolak, instance klien tidak akan dapat mengakses server web masing-masing. Untuk memastikan bahwa waktu tunggu permintaan akan habis, buka jendela baru dan mulai sesi SSH ke instance fwpolicy-vpc1-client lalu coba curl server web:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Output yang diharapkan:

curl: (28) Connection timed out after 2001 milliseconds

Secara opsional, pastikan tidak ada aturan firewall VPC yang ditetapkan untuk fwpolicy-vpc1 melalui Cloud Shell:

gcloud compute firewall-rules list --filter="network:$prefix-vpc1"

5. Kebijakan firewall jaringan global

Buat kebijakan firewall jaringan global:

gcloud compute network-firewall-policies create \
   $prefix-example --description \
   "firewall-policy-description" --global

Tambahkan aturan yang mengizinkan traffic web:

gcloud compute network-firewall-policies rules create 500 \
    --action allow \
    --description "allow-web" \
    --layer4-configs tcp:80,tcp:443 \
    --firewall-policy $prefix-example \
    --src-ip-ranges 10.0.0.0/16 \
    --global-firewall-policy --enable-logging

Jelaskan kebijakan firewall jaringan dan pastikan aturan berhasil added:

gcloud compute network-firewall-policies describe \
    $prefix-example --global

Output yang diharapkan (scroll ke awal output; perlu diperhatikan bahwa aturan implisit juga ditampilkan):

creationTimestamp: '2022-09-23T12:46:53.677-07:00'
description: "firewall-policy-description"
fingerprint: Np1Rup09Amc=
id: '7021772628738421698'
kind: compute#firewallPolicy
name: fwpolicy-example
ruleTupleCount: 13
rules:
- action: allow
  description: allow-web
  direction: INGRESS
  disabled: false
  enableLogging: true
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: tcp
      ports:
      - '80'
    - ipProtocol: tcp
      ports:
      - '443'
    srcIpRanges:
    - 10.0.0.0/16
  priority: 500
  ruleTupleCount: 5
...

Kaitkan kebijakan firewall jaringan ke fwpolicy-vpc1:

gcloud compute network-firewall-policies associations create \
     --firewall-policy $prefix-example \
     --network $prefix-vpc1 \
     --name $prefix-vpc1-association \
     --global-firewall-policy

Pastikan bahwa kebijakan tersebut berhasil diterapkan ke jaringan fwpolicy-vpc1:

gcloud compute networks get-effective-firewalls $prefix-vpc1

Output yang diharapkan (perhatikan bahwa jika ada kebijakan firewall hierarkis yang diprioritaskan, aturan yang relevan akan ditampilkan di bagian atas):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Pastikan bahwa konfigurasi tersebut juga berhasil diterapkan ke server web fwpolicy-vpc1:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Output yang diharapkan mirip dengan perintah sebelumnya (firewall efektif fwpolicy-vpc1):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Beralih kembali ke sesi SSH vpc1-client dan coba lakukan curl lagi (perhatikan bahwa perintah di bawah mengasumsikan bahwa fwpolicy digunakan sebagai awalan; sesuaikan perintah curl jika yang digunakan adalah nama yang berbeda):

user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Page on vpc1-www in network vpc1 zone us-central1-a

Dari Cloud Shell, validasikan bahwa kebijakan firewall jaringan diterapkan ke fwpolicy-vpc1:

gcloud compute network-firewall-policies describe \
   $prefix-example --global

Output yang diharapkan (scroll ke atas hingga ke awal output):

---
associations:
- attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1
  name: fwpolicy-vpc1-association
...

6. Tag yang diatur IAM

Tag adalah pasangan nilai kunci yang dapat dilampirkan ke organisasi, folder, atau project. Lihat Membuat dan mengelola tag serta izin yang diperlukan untuk detail selengkapnya.

Peran tagAdmin memungkinkan Anda membuat tag baru, memperbarui, dan menghapus tag yang ada. Administrator organisasi dapat memberikan peran ini. Dari Cloud Shell, perbarui Kebijakan IAM untuk menambahkan peran tagAdmin ke pengguna Anda. Gunakan halaman referensi izin untuk melihat izin yang disertakan dalam setiap peran yang telah ditetapkan.

gcloud organizations add-iam-policy-binding $org_id \
  --member user:[user@example.com] --role roles/resourcemanager.tagAdmin

Jalankan perintah di bawah untuk memverifikasi pengguna yang memiliki peran resourcemanager.tagAdmin:

gcloud organizations get-iam-policy $org_id --flatten=bindings \
  --filter=bindings.role:roles/resourcemanager.tagAdmin

Buat Kunci Tag baru:

gcloud resource-manager tags keys create tags-vpc1 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc1

Output yang diharapkan:

Waiting for TagKey [tags-vpc1] to be created...done.                                                                                                                
createTime: '2022-09-23T20:49:01.162228Z'
etag: PwvmFuHO4wK1y6c5Ut2n5w==
name: tagKeys/622132302133
namespacedName: ORGANIZATION_ID/tags-vpc1
parent: organizations/ORGANIZATION_ID
purpose: GCE_FIREWALL
purposeData:
  network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/6749205358365096383
shortName: tags-vpc1
updateTime: '2022-09-23T20:49:03.873776Z'

Buat nilai tag baru:

gcloud resource-manager tags values create web-servers \
   --parent=$org_id/tags-vpc1

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc1

Validasikan bahwa nilai tag berhasil dibuat:

gcloud resource-manager tags values list \
   --parent=$org_id/tags-vpc1

Output yang diharapkan:

NAME                    SHORT_NAME   DESCRIPTION
tagValues/349564376683  web-servers
tagValues/780363571446  web-clients

Dari Cloud Shell, jelaskan aturan kebijakan firewall jaringan yang ada untuk memastikan bahwa tag tidak digunakan:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Output yang diharapkan:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
priority: 500
ruleTupleCount: 5

Dari Cloud Shell, perbarui aturan agar hanya mengizinkan traffic dari kunci tag vpc1-tags/web-clients, lalu instal aturan pada instance dengan kunci tag vpc1-tags/web-servers.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients \
    --target-secure-tags $org_id/tags-vpc1/web-servers \
    --global-firewall-policy

Dari Cloud Shell, jelaskan aturan kebijakan firewall jaringan yang ada untuk memastikan bahwa tag berhasil diterapkan dan dilaporkan sebagai EKTIF:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Output yang diharapkan:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Dari Cloud Shell, mari kita verifikasi bahwa aturan telah diterapkan ke vpc1:

gcloud compute networks get-effective-firewalls $prefix-vpc1

Output yang diharapkan:

network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Pastikan bahwa meskipun kebijakan firewall jaringan masih dikaitkan dengan jaringan VPC, aturan yang mengizinkan traffic web tidak lagi diterapkan ke server web, karena Tag tidak ditambahkan ke instance:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Output yang diharapkan (perhatikan bahwa aturan firewall dengan prioritas 500 tidak ditampilkan):

network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Berikan peran Pengguna Tag ke tag dan pengguna tertentu. Gunakan halaman referensi izin untuk melihat izin yang disertakan dalam setiap peran yang telah ditetapkan.

gcloud resource-manager tags keys add-iam-policy-binding \
  $org_id/tags-vpc1 \
  --member user:[email] --role roles/resourcemanager.tagUser

gcloud projects add-iam-policy-binding $project_id \
  --member user:[email] --role roles/resourcemanager.tagUser

Pastikan peran berhasil ditambahkan:

gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1

gcloud projects get-iam-policy $project_id --flatten=bindings \
   --filter=bindings.role:roles/resourcemanager.tagUser

Output yang diharapkan:

bindings:
- members:
  - user:[user]
  role: roles/resourcemanager.tagUser
...

Terapkan tag ke instance fwpolicy-vpc1-www:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-servers \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www

Output yang diharapkan:

Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34
9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done.                                                                            
done: true
metadata:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata
name: operations/rctb.us-central1-a.6144808968019372877
response:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding
  name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683
  parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502
  tagValue: tagValues/349564376683

Verifikasi binding:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www 

Output yang diharapkan:

namespacedTagKey: ORGANIZATION_ID/tags-vpc1
namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers
tagKey: tagKeys/622132302133
tagValue: tagValues/349564376683

Verifikasi kembali aturan firewall yang efektif:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Output yang diharapkan:

network-firewall-policy  fwpolicy-example      490         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

Kembalilah ke tab sesi SSH fwpolicy-vpc1-client dan coba lakukan curl:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Apakah Anda berhasil terhubung?

Untuk memverifikasi, perbarui aturan untuk menghapus kriteria CIDR sumber melalui Cloud Shell.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-ip-ranges "" \
    --global-firewall-policy

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 490
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Pindah kembali ke tab sesi SSH fwpolicy-vpc1-client, lalu coba lagi:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Waktu tunggu koneksi akan habis kali ini karena tag tidak ditambahkan ke fwpolicy-vpc1-client. Dari Cloud Shell, tambahkan dan coba lagi.

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client

Pindah kembali ke tab sesi SSH fwpolicy-vpc1-client, lalu coba lagi. Setelah itu, seharusnya berhasil.

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

7. Tag yang diatur IAM melalui Peering Jaringan VPC

Dari Cloud Shell, buat VPC, subnet, dan klien baru, serta siapkan Peering Jaringan VPC antarjaringan:

gcloud compute networks create $prefix-vpc2 --subnet-mode=custom 

gcloud compute networks subnets create $prefix-vpc2-subnet \
   --range=10.0.1.0/24 --network=$prefix-vpc2 --region=$region

gcloud compute instances create $prefix-vpc2-client \
   --subnet=$prefix-vpc2-subnet --no-address --zone $zone

gcloud compute networks peerings create vpc1-to-vpc2 \
   --network=$prefix-vpc1 \
   --peer-project $project_id \
   --peer-network $prefix-vpc2

gcloud compute networks peerings create vpc2-to-vpc1 \
    --network=$prefix-vpc2 \
    --peer-project $project_id \
    --peer-network $prefix-vpc1

Buat aturan firewall yang mengizinkan traffic SSH masuk dari rentang IAP jika belum ditetapkan sebagai bagian dari penyiapan IAP:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc2 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc2 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

Meskipun Tag adalah objek seluruh organisasi, kunci tag dikaitkan dengan VPC tertentu, sehingga tidak dapat diterapkan ke instance di jaringan yang berbeda. Dengan demikian, Anda harus membuat kunci tag dan nilai baru yang berlaku untuk vpc2:

gcloud resource-manager tags keys create tags-vpc2 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc2

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc2

Terapkan tag baru ke instance fwpolicy-vpc2-client:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc2/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

Secara opsional, cantumkan binding fwpolicy-vpc2-client:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

Output yang diharapkan:

namespacedTagKey: ORGANIZATION_ID/tags-vpc2
namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients
tagKey: tagKeys/916316350251
tagValue: tagValues/633150043992

Dari Cloud Shell, jelaskan aturan kebijakan firewall jaringan yang ada untuk memastikan bahwa tag baru tidak digunakan:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Output yang diharapkan:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 6
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Perbarui aturan firewall yang ada untuk mengizinkan tag dari jaringan VPC yang di-peering:

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients,$org_id/tags-vpc2/web-clients \
    --global-firewall-policy

Jelaskan aturan firewall untuk memastikan aturan tersebut berhasil diterapkan dan dilaporkan sebagai EKTIF:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Output yang diharapkan:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
  - name: tagValues/633150043992
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

Cari tahu IP fwpolicy-vpc1-www melalui perintah gcloud di bawah ini:

gcloud compute instances list --filter=vpc1-www

Hubungkan ke fwpolicy-vpc2-client melalui SSH, lalu coba curl IP fwpolicy-vpc1:

user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2

Anda akan dapat terhubung ke server fwpolicy-vpc1-www. Lanjutkan ke bagian berikutnya untuk mengetahui langkah-langkah pembersihan.

8. Langkah-langkah pembersihan

Hapus instance, Cloud NAT, dan Cloud Router dari Cloud Shell:

gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone

gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \
--router=$prefix-vpc1-cr --router-region=$region

gcloud -q compute routers delete $prefix-vpc1-cr --region=$region

Hapus Tag dan kebijakan firewall jaringan global:

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc2/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc2

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-servers

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc1

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-example \
     --name $prefix-vpc1-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete \
   $prefix-example --global

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2

Lakukan langkah-langkah di bawah jika peran tagAdmin dan tagUsers telah diubah:

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagUser

Terakhir, hapus Peering Jaringan VPC, subnet, dan jaringan VPC:

gcloud -q compute networks peerings delete vpc1-to-vpc2 \
    --network $prefix-vpc1

gcloud -q compute networks peerings delete vpc2-to-vpc1 \
    --network $prefix-vpc2

gcloud -q compute networks subnets delete $prefix-vpc1-subnet \
    --region $region

gcloud -q compute networks subnets delete $prefix-vpc2-subnet \
    --region $region

gcloud -q compute networks delete $prefix-vpc1

gcloud -q compute networks delete $prefix-vpc2

9. Selamat!

Selamat, Anda telah berhasil mengonfigurasi dan memvalidasi kebijakan firewall jaringan global dengan konfigurasi Tag.