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. Dalam versi ini, kami akan memperluas struktur kebijakan firewall hingga ke tingkat VPC, dan membuat beberapa peningkatan pada dukungan kebijakan firewall saat ini untuk 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 dikaitkan dengan jaringan VPC. Setiap jaringan VPC dapat memiliki satu kebijakan firewall jaringan yang terkait. Kebijakan firewall jaringan mendukung Tag yang diatur IAM (atau hanya Tag) dalam 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 organisasi dan folder 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 aturan firewall VPC hanya dapat diterapkan ke satu jaringan VPC, sedangkan kebijakan firewall jaringan dapat dilampirkan ke satu VPC atau grup VPC, di antara manfaat lainnya seperti pembaruan batch.

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

  • Aturan keluar yang tindakannya adalah izinkan, tujuannya adalah 0.0.0.0/0
  • Aturan masuk yang tindakannya adalah tolak, sumbernya adalah 0.0.0.0/0

Secara default, urutan penerapan ditampilkan dalam diagram berikut:

abae4597af782b2b.png

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

Tag

Tag yang terintegrasi dalam aturan kebijakan firewall jaringan yang baru adalah resource key-value pair yang ditentukan di tingkat organisasi hierarki resource Google Cloud. Tag tersebut berisi kontrol akses IAM, seperti namanya, yang menentukan siapa yang dapat melakukan tindakan apa pada tag. Misalnya, izin IAM 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 diteruskan ke seluruh hierarki dari induknya. Akibatnya, tag dapat dibuat di satu tempat, lalu digunakan oleh folder dan project lain di seluruh hierarki resource. Buka halaman ini untuk mengetahui detail selengkapnya tentang tag dan batasan akses.

Tag tidak boleh sama dengan tag jaringan, yang merupakan string yang dapat ditambahkan ke instance Compute Engine; tag ini dikaitkan dengan instance dan akan hilang 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 akan menunjukkan cara menggunakan Tag di seluruh jaringan VPC yang di-peering sesuai diagram di bawah. Oleh karena itu, 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 melalui Peering Jaringan VPC

Yang Anda butuhkan

  • Project Google Cloud
  • Pengetahuan tentang 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 jaringan dan subnet VPC

Jaringan VPC

Buat fwpolicy-vpc1:

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

Subnet

Buat subnet masing-masing 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 ditentukan 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 dan server web fwpolicy-vpc1:

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 ditentukan (selain aturan izinkan SSH yang seharusnya dibuat saat mengonfigurasi IAP seperti di awal bagian ini), dan secara default semua traffic masuk ditolak, instance klien tidak akan dapat mengakses server web masing-masing. Untuk memverifikasi bahwa permintaan akan habis waktu tunggunya, 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 ditentukan 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 verifikasi bahwa aturan berhasil added:

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

Output yang diharapkan (scroll ke atas ke awal output; perhatikan 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

Validasi bahwa kebijakan 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

Validasi bahwa kebijakan 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 curl lagi (perhatikan bahwa perintah di bawah mengasumsikan bahwa fwpolicy digunakan sebagai awalan; sesuaikan perintah curl jika nama yang digunakan 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, validasi bahwa kebijakan firewall jaringan diterapkan ke fwpolicy-vpc1:

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

Output yang diharapkan (scroll ke atas 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 mengetahui 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 bawaan.

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

Validasi 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 mengonfirmasi 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, dan instal aturan di 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 mengonfirmasi bahwa tag berhasil diterapkan dan dilaporkan sebagai EFEKTIF:

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 bawaan.

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

Verifikasi bahwa 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

Beralih kembali ke tab sesi SSH fwpolicy-vpc1-client dan coba curl:

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

Apakah Anda dapat terhubung?

Untuk memverifikasinya, 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

Beralih kembali ke tab sesi SSH fwpolicy-vpc1-client dan coba lagi:

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

Kali ini koneksi akan habis waktu tunggunya, 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

Beralih kembali ke tab sesi SSH fwpolicy-vpc1-client dan coba lagi, yang sekarang akan 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, lalu siapkan Peering Jaringan VPC di antara jaringan:

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 ditentukan 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. Oleh karena itu, Anda harus membuat kunci dan nilai tag 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 mengonfirmasi 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 EFEKTIF:

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:

gcloud compute instances list --filter=vpc1-www

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

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

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

8. Langkah-langkah pembersihan

Dari Cloud Shell, hapus instance, Cloud NAT, dan Cloud Router:

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 kebijakan firewall jaringan global dan Tag:

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 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.