Kebijakan Firewall Hierarkis dengan tag yang diatur IAM

1. Pengantar

Cloud Next Generation Firewall (NGFW)

Cloud Next Generation Firewall adalah layanan firewall yang terdistribusi sepenuhnya dengan kemampuan perlindungan tingkat lanjut, segmentasi mikro, dan cakupan yang luas untuk melindungi workload Google Cloud Anda dari serangan internal dan eksternal.

Cloud NGFW memiliki manfaat berikut:

  • Layanan firewall terdistribusi: Cloud NGFW menyediakan penerapan berbasis host yang stateful dan terdistribusi sepenuhnya pada setiap workload untuk mengaktifkan arsitektur keamanan zero-trust.
  • Konfigurasi dan deployment yang disederhanakan: Cloud NGFW menerapkan kebijakan firewall hierarkis dan jaringan yang dapat dilampirkan ke node hierarki resource. Kebijakan ini memberikan pengalaman firewall yang konsisten di seluruh hierarki resource Google Cloud.
  • Kontrol terperinci dan mikro-segmentasi: Kombinasi kebijakan firewall dan Tag yang dikelola Identity and Access Management (IAM) memberikan kontrol yang baik untuk traffic utara-selatan dan timur-barat, hingga ke satu VM, di seluruh jaringan Virtual Private Cloud (VPC).

Kebijakan firewall jaringan

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 dengannya. Kebijakan firewall jaringan mendukung Tag yang diatur IAM (atau hanya Tag) dalam aturan firewall 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 Kebijakan Firewall Jaringan 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 update batch.

Di lab ini, kita akan menguji Kebijakan Firewall Hierarkis dan Kebijakan Firewall Jaringan Global.

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

  • Aturan egress 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:

86df8f0d19c64e80.png

Tag yang diatur IAM

Tag yang terintegrasi dalam aturan kebijakan firewall yang baru adalah resource key-value pair yang ditentukan di tingkat Organisasi atau Project dalam hierarki resource Google Cloud. Tag tersebut berisi kontrol akses IAM, seperti yang tersirat dalam 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 kebijakan firewall 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 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 pembatasan 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 dihentikan. Aturan firewall VPC dapat mencakup tag jaringan, tetapi karena tidak dianggap sebagai resource cloud, aturan tersebut tidak tunduk pada kontrol akses IAM. Buka halaman ini untuk mengetahui detail perbedaannya.

2. Yang akan Anda pelajari

  • Cara membuat tag yang diatur IAM untuk digunakan dengan Cloud NGFW dan dengan cakupan global.
  • Cara melampirkan tag ke VM.
  • Cara membuat Kebijakan Firewall Hierarkis dan mengaitkannya dengan folder.
  • Cara membuat aturan firewall dalam Kebijakan Firewall Hierarkis dan menentukan sumber serta target menggunakan tag yang diatur IAM.

3. Arsitektur Lab Secara Keseluruhan

1bfe78ad755496e5.png

Organisasi dan Folder:

  • Anda akan membuat dua folder, folder1 dan folder2, langsung di bawah organisasi Anda.

Proyek:

  • Di dalam folder1, Anda akan membuat project host. Project ini akan berisi jaringan VPC Bersama.
  • Di dalam folder2, Anda akan membuat project layanan. Project ini akan berisi VM yang menggunakan VPC Bersama.

Jaringan:

  • Jaringan VPC bernama mynet akan dibuat di project host dan dikonfigurasi sebagai VPC Bersama. Hal ini memungkinkan resource dalam project layanan menggunakan jaringan.
  • Dua VM akan dibuat di project layanan dan terhubung ke VPC Bersama mynet.

Tag yang diatur IAM:

  • Anda akan membuat tag yang diatur IAM bernama http_tags dengan dua nilai, yaitu http_server dan http_client di tingkat organisasi. Tag/nilai ini akan digunakan untuk mengidentifikasi dan menerapkan aturan firewall ke VM.

Kebijakan Firewall:

  • Kebijakan Firewall Hierarkis akan dibuat dan dikaitkan dengan folder1. Aturan dalam kebijakan ini akan menggunakan tag yang diatur IAM untuk mengizinkan traffic dari http-client ke http-server di port 80.
  • Kebijakan Firewall Jaringan akan dibuat di project host dan dikaitkan dengan VPC mynet. Kebijakan ini akan mencakup aturan untuk mengizinkan akses SSH IAP ke VM untuk tujuan pengujian.

4. Langkah-langkah persiapan

Pertama, siapkan peran IAM, infrastruktur jaringan, dan instance yang diperlukan di organisasi Google Cloud Anda.

Peran IAM yang diperlukan untuk mengerjakan lab

Kita mulai dengan menetapkan peran IAM yang diperlukan ke akun GCP di tingkat Organisasi.

  • Administrator Organisasi (roles/resourcemanager.organizationAdmin) Peran ini memungkinkan Anda mengelola kebijakan IAM dan melihat kebijakan organisasi untuk organisasi, folder, dan project.
  • Administrator Tag(roles/resourcemanager.tagAdmin) Peran ini memungkinkan Anda membuat, memperbarui, dan menghapus tag aman.
  • Peran Tag User (roles/resourcemanager.tagUser) Peran ini memungkinkan Anda mengakses daftar tag aman dan mengelola kaitannya dengan resource.
  • Peran Compute Organization Firewall Policy Admin (roles/compute.orgFirewallPolicyAdmin) Peran ini memberi Anda kontrol penuh atas Kebijakan Firewall Organisasi Compute Engine.
  • Peran Admin Resource Organisasi Compute (roles/compute.orgSecurityResourceAdmin) Peran ini memberi Anda kontrol penuh atas pengaitan Kebijakan Firewall Compute Engine ke organisasi atau folder.
  • Admin Jaringan Compute (roles/compute.networkAdmin) Peran ini memberi Anda kontrol penuh atas resource jaringan Compute Engine.
  • Compute Instance Admin( beta) (roles/compute.instanceAdmin) Peran ini memberi Anda kontrol penuh atas resource instance Compute Engine.
  • Admin Logging (roles/logging.admin) Peran ini memberi Anda akses ke semua izin logging dan izin dependen.
  • Admin Akun Layanan (roles/iam.serviceAccountAdmin) Peran ini memungkinkan Anda membuat dan mengelola akun layanan.
  • Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin) Peran ini memberi Anda kemampuan untuk mengaktifkan, menonaktifkan, dan memeriksa status layanan, memeriksa operasi, serta menggunakan kuota dan penagihan untuk project konsumen.
  • Compute Shared VPC Admin (roles/compute.xpnAdmin) Peran ini memungkinkan Anda mengelola jaringan VPC bersama (XPN).

Membuat folder dan project

Di dalam Cloud Shell, lakukan hal berikut untuk membuat folder1 dan 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)")

Di dalam Cloud Shell, lakukan hal berikut untuk membuat project host di folder1:

gcloud projects create  --name=$hostproject --folder=$folder1_id

Anda akan melihat hal berikut. Tekan Y untuk membuat project dengan project ID baru.

No project ID provided.

Use [NEW-PROJECT-ID] as project ID (Y/n)?

Catat project ID. Di dalam Cloud Shell, lakukan hal berikut untuk mengekspornya ke hostproject_id:

export hostproject_id=[HOSTPROJECT ID]

Di dalam Cloud Shell, lakukan langkah-langkah berikut untuk menautkan project host ke akun penagihan:

gcloud billing projects link $hostproject_id \
--billing-account=$BILLING_ACCOUNT_ID

Di dalam Cloud Shell, lakukan hal berikut untuk membuat project layanan di folder2:

gcloud projects create  --name=$serviceproject --folder=$folder2_id

Anda akan melihat hal berikut. Tekan Y untuk membuat project dengan project ID baru.

No project ID provided.

Use [NEW-PROJECT-ID] as project ID (Y/n)?

Catat project ID. Di dalam Cloud Shell, lakukan hal berikut untuk mengekspornya ke serviceproject_id:

export serviceproject_id=[SERVICEPROJECT ID]

Di dalam Cloud Shell, lakukan langkah-langkah berikut untuk menautkan project layanan ke akun penagihan:

gcloud billing projects link $serviceproject_id \
--billing-account=$BILLING_ACCOUNT_ID

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

Kita membuat satu tag di tingkat organisasi, http-tags. Tujuan tag ini adalah untuk penggunaan Cloud NGFW. Kami tidak membatasi cakupan ke satu jaringan – tag memiliki cakupan global. Kemudian, kita akan menerapkan tag ke VM yang dibuat dalam project layanan di bagian folder2.

Di dalam Cloud Shell, lakukan hal berikut:

gcloud resource-manager tags keys create http_tags \
    --parent=organizations/$org_id \
    --purpose GCE_FIREWALL \
    --purpose-data organization=auto

Kita akan menggunakan ID kunci tag untuk memberi anotasi pada VM selama pembuatan. Di dalam Cloud Shell, lakukan hal berikut untuk mendapatkan ID kunci tag:

export http_tags_id=$(gcloud resource-manager tags keys describe $org_id/http_tags --format="value(name)")
echo $http_tags_id

Di dalam Cloud Shell, lakukan langkah-langkah berikut untuk membuat dua nilai tag baru, 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

Kami akan menggunakan ID tag dan ID nilai tag untuk menganotasi VM selama pembuatan. Di dalam Cloud Shell, lakukan hal berikut untuk mendapatkan ID nilai tag 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

Aktifkan API di project host dan project layanan

Di dalam Cloud Shell, lakukan hal berikut:

gcloud services enable compute.googleapis.com --project=$serviceproject_id
gcloud services enable compute.googleapis.com --project=$hostproject_id

Buat VPC di project host

Di project host, buat jaringan VPC dengan mode subnet kustom, lakukan hal berikut di dalam Cloud Shell:

gcloud compute networks create mynet \
    --subnet-mode=custom \
    --project=$hostproject_id

Membuat subnet di project host

Di dalam Cloud Shell, lakukan hal berikut untuk membuat subnet IPV4:

gcloud compute networks subnets create mysubnet \
    --network=mynet \
    --range=10.0.0.0/28 \
    --region=$regionname \
    --project=$hostproject_id

Aktifkan VPC Bersama di project host

Di dalam Cloud Shell, lakukan langkah-langkah berikut untuk mengaktifkan VPC Bersama di project host:

gcloud compute shared-vpc enable $hostproject_id

Melampirkan project layanan untuk VPC Bersama di project host

Di dalam Cloud Shell, lakukan langkah-langkah berikut untuk melampirkan project layanan untuk VPC Bersama di project host:

gcloud compute shared-vpc associated-projects add $serviceproject_id --host-project=$hostproject_id 

Membuat Cloud Router dan Cloud NAT di project host

Cloud NAT digunakan untuk mengizinkan traffic keluar internet bagi VM untuk mendownload dan menginstal aplikasi.

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

Membuat instance di project layanan

Di project layanan, buat dua instance di subnet yang baru saja Anda buat di VPC Bersama di project host. Satu instance diberi nama http-server dan kita menganotasi tag http_tags dengan nilai http_server. Instance lainnya diberi nama http-client dan kita menganotasi tag http_tags dengan nilai http_client. Jalankan perintah berikut di 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'

Catat IP internal http-server. Kita akan menggunakannya pada langkah pengujian aturan firewall berikutnya.

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. Buat kebijakan firewall jaringan global di project host

Kita akan membuat kebijakan firewall jaringan global di project host dan mengaitkannya dengan VPC bersama di project host.

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

Untuk mengizinkan IAP terhubung ke instance VM Anda, buat aturan firewall di kebijakan firewall jaringan:

  • Berlaku untuk semua instance VM yang ingin Anda akses menggunakan IAP.
  • Mengizinkan traffic masuk dari rentang IP 35.235.240.0/20. Rentang ini berisi semua alamat IP yang digunakan IAP untuk penerusan 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

Di konsol, Anda dapat membuka project host dan menemukan kebijakan firewall jaringan global yang baru dibuat di bagian Firewall Policy. Anda dapat memeriksa aturan firewall yang baru dibuat di kebijakan firewall jaringan. Berikut link konsol untuk membuka halaman tersebut. Pastikan Anda mengubah pemilih project ke project host di konsol.

6. Menguji akses dari VM http-client ke VM http-server

SSH ke VM bernama http-client dan uji apakah VM tersebut dapat mengakses http-server di port 80 http.

Di dalam Cloud Shell, lakukan hal berikut:

gcloud compute ssh \
    --zone=$zonename "http-client" \
    --tunnel-through-iap \
    --project=$serviceproject_id

Gunakan curl untuk mengakses server web.

curl -m 10 [http_server_ip]

Anda akan melihat hasil perintah curl. Tidak ada aturan firewall masuk untuk mengizinkan port 80 untuk http-server.

Waktu koneksi habis setelah 10.000 milidetik.

Kembali ke Cloud Shell dengan keluar dari sesi SSH.

exit

7. Membuat Kebijakan Firewall Hierarkis dan Aturan Firewall

Kita akan membuat Kebijakan Firewall Hierarkis di folder1 dan mengaitkan kebijakan tersebut ke folder1. Aturan firewall dalam kebijakan akan berlaku untuk project host di folder1.

Membuat Kebijakan Firewall Hierarkis

gcloud compute firewall-policies create \
  --folder=$folder1_id \
  --short-name=my-folder1-fw-policy

Membuat aturan firewall dalam Kebijakan Firewall Hierarkis

Aturan ini mengizinkan VM dengan nilai tag http_tags/http_client untuk mengakses VM dengan nilai tag http_tags/http_server di port 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

Mengaitkan Kebijakan Firewall Hierarkis dengan folder1

gcloud compute firewall-policies associations create \
   --firewall-policy=my-folder1-fw-policy \
   --folder=$folder1_id \
   --name=my-folder1-fw-policy\
   --organization=$org_id

Di konsol, Anda dapat membuka folder1 dan menemukan kebijakan firewall hierarkis yang baru dibuat di bagian Firewall Policy. Kebijakan firewall ditampilkan di "Kebijakan firewall yang ada dalam folder ini". Anda dapat memeriksa aturan firewall yang baru dibuat dalam kebijakan firewall hierarkis. Berikut link konsol untuk membuka halaman tersebut. Pastikan Anda mengubah pemilih project ke folder1 di konsol.

8. Menguji akses dari VM http-client ke VM http-server

Periksa kebijakan firewall efektif yang diterapkan ke VPC bersama di project host.

Di dalam Cloud Shell, lakukan hal berikut:

gcloud compute networks get-effective-firewalls mynet --project=$hostproject_id

Anda akan melihat kebijakan firewall hierarkis yang diwarisi seperti ini:

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 ke VM bernama http-client dan uji apakah VM tersebut dapat mengakses http-server di port 80 http.

Di dalam Cloud Shell, lakukan hal berikut:

gcloud compute ssh \
    --zone=$zonename "http-client" \
    --tunnel-through-iap \
    --project=$serviceproject_id

Gunakan curl untuk mengakses server web.

curl [http_server_ip]

Anda akan melihat perintah curl berhasil menampilkan respons dari http-server.

I am a Http Server.

Aturan firewall masuk dari Kebijakan Firewall Hierarkis mengizinkan akses dari http-client ke http-server di port 80.

Kembali ke Cloud Shell dengan keluar dari sesi SSH.

exit

9. Pembersihan

Membersihkan VM di project layanan

Di dalam Cloud Shell, lakukan hal berikut:

gcloud compute instances delete http-server --zone $zonename --project=$serviceproject_id
gcloud compute instances delete http-client --zone $zonename --project=$serviceproject_id

Menghapus Kebijakan Firewall Hierarkis

Di dalam Cloud Shell, lakukan hal berikut:

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

Membersihkan tag di tingkat organisasi

Di dalam Cloud Shell, lakukan hal berikut:

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

Membersihkan project host

Di dalam Cloud Shell, lakukan hal berikut:

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

Membersihkan project layanan

Di dalam Cloud Shell, lakukan hal berikut:

gcloud projects delete $serviceproject_id

Membersihkan folder

Di dalam Cloud Shell, lakukan hal berikut:

gcloud resource-manager folders delete $folder1_id
gcloud resource-manager folders delete $folder2_id

10. Selamat

Anda telah berhasil menguji Kebijakan Firewall Hierarkis dengan tag yang diatur IAM.