Menerapkan kebijakan firewall di GKE secara selektif


Halaman ini menunjukkan cara menerapkan kebijakan firewall jaringan Cloud Next Generation Firewall secara selektif di Google Kubernetes Engine (GKE) menggunakan Tag. Guna mempelajari cara menggunakan Tag di GKE untuk tujuan lain, seperti pengelolaan penagihan atau kebijakan IAM bersyarat, baca artikel Mengelola resource GKE menggunakan Tag.

Tentang Tag

Tag adalah key-value pair yang dapat Anda gunakan untuk menganotasi dan mengelola resource Google Cloud di level organisasi atau project. Anda dapat menggunakan tag untuk mengatur resource dan menerapkan kebijakan secara kondisional, seperti kebijakan firewall atau IAM. Anda dapat menggunakan kontrol akses IAM untuk menentukan siapa yang dapat melampirkan, membuat, memperbarui, atau menghapus tag.

Untuk mempelajari Tag lebih lanjut, lihat Ringkasan tag di dokumentasi Resource Manager.

Menggunakan Tag untuk menerapkan kebijakan firewall jaringan

Anda dapat menggunakan Tag untuk menerapkan kebijakan firewall jaringan global atau regional secara kondisional ke node GKE Anda. Anda harus menentukan tujuan GCE_FIREWALL untuk tag yang ingin digunakan dengan kebijakan firewall jaringan. Saat Anda menerapkan tag tujuan firewall ke cluster GKE atau node pool, GKE akan otomatis melampirkan tag tersebut ke virtual machine (VM) Compute Engine yang sesuai.

Tag untuk kebijakan firewall jaringan menggantikan kebutuhan untuk menggunakan tag jaringan, yang merupakan metadata yang dapat dilampirkan oleh siapa saja ke VM Compute Engine yang mendasarinya untuk penerapan aturan firewall Virtual Private Cloud, dan yang tidak mendukung kontrol akses IAM. Jika saat ini Anda menggunakan tag jaringan dengan aturan firewall VPC, sebaiknya lakukan migrasi ke kebijakan firewall jaringan dan gunakan tag firewall yang aman. Untuk perbandingan yang lebih mendetail, baca artikel Membandingkan tag jaringan dengan Tag dalam dokumen ini.

Tag untuk alur kerja kebijakan firewall jaringan

Untuk menggunakan tag dengan kebijakan firewall jaringan di GKE, Anda perlu melakukan hal-hal berikut:

  1. Buat tag:

    1. Tentukan kunci tag di level organisasi atau project, seperti env.
    2. Tentukan kemungkinan nilai tag untuk kunci, seperti dev, staging, dan prod.
    3. Tetapkan tag untuk penggunaan kebijakan firewall jaringan.

  2. Memberi pengguna akses untuk berinteraksi dengan tag firewall.

  3. Terapkan key-value pair tag ke cluster GKE atau node pool tertentu. GKE secara otomatis memasang tag ke VM Compute Engine yang mendasarinya untuk penerapan kebijakan firewall.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Persyaratan dan batasan

  • Tag untuk kebijakan firewall jaringan didukung di GKE versi 1.28 dan yang lebih baru. Jika Anda menggunakan GKE versi yang lebih lama dari 1.28, gunakan tag jaringan dengan aturan firewall VPC.
  • Cluster GKE seharusnya dibuat menggunakan GKE versi 1.28 atau yang lebih baru. Mengupgrade cluster dari versi yang lebih lama dari 1.28 ke versi 1.28 atau yang lebih baru tidak akan mengaktifkan Tag.
  • Cluster GKE dan tag harus dikaitkan dengan jaringan VPC yang sama.
  • Dalam cluster Standar, setiap kumpulan node mendukung hingga lima tag firewall yang terpasang.
  • Cluster autopilot mendukung hingga lima tag firewall.
  • GKE menolak kunci tag yang menggunakan awalan gke-managed.
  • Anda harus membuat key-value pair tag sebelum dapat menambahkannya ke cluster atau node pool.

Peran dan izin IAM

Untuk mendapatkan izin yang diperlukan agar dapat menggunakan Tag untuk kebijakan firewall di GKE, minta administrator untuk memberi Anda peran IAM berikut:

  • Untuk memberikan izin yang diperlukan atas tag kepada pengguna dan agen layanan GKE:
  • Untuk membuat dan mengelola tag: Administrator Tag (roles/resourcemanager.tagAdmin) di organisasi atau project
  • Untuk melampirkan tag ke resource: Tag User (roles/resourcemanager.tagUser) di project

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat tag

Tag harus ada agar Anda dapat melampirkannya ke cluster atau node. Untuk membuat tag, lihat artikel Menggunakan Tag untuk firewall dalam dokumentasi Cloud NGFW.

Misalnya, untuk membuat tag firewall cakupan project, jalankan perintah berikut:

  1. Buat kunci tag:

    gcloud resource-manager tags keys create TAG_KEY \
        --parent=projects/PROJECT_ID \
        --purpose=GCE_FIREWALL \
        --purpose-data=network=PROJECT_ID/NETWORK_NAME
    

    Ganti kode berikut:

    • TAG_KEY: nama kunci tag, seperti env
    • PROJECT_ID: project ID Google Cloud Anda
    • NETWORK_NAME: nama jaringan VPC yang akan Anda gunakan dengan tag
  2. Dapatkan ID kunci tag:

    gcloud resource-manager tags keys describe PROJECT_ID/TAG_KEY \
        --format="value(name)"
    

    Output-nya adalah tagKeys/KEY_ID, dengan KEY_ID adalah ID numerik untuk kunci tersebut. Catat ID ini untuk nanti.

  3. Tambahkan nilai tag ke kunci tag:

    gcloud resource-manager tags values create TAG_VALUE \
        --parent=tagKeys/KEY_ID
    

    Ganti TAG_VALUE dengan nama nilai yang diizinkan untuk kunci tag tersebut, seperti dev.

Sintaksis tag dalam perintah CLI gcloud

Saat merujuk ke tag menggunakan gcloud CLI, Anda harus memformat key-value pair menggunakan salah satu sintaksis berikut:

Sintaksis tag

tagKeys/KEY_ID=tagValues/VALUE_ID

Ganti kode berikut:

  • KEY_ID: ID kunci numerik
  • VALUE_ID: ID nilai numerik

Misalnya, tagKeys/123456789=tagValues/987654321.


ORGANIZATION_ID/TAG_KEY=TAG_VALUE

Ganti kode berikut:

  • ORGANIZATION_ID: ID organisasi Google Cloud numerik Anda
  • TAG_KEY: nama kunci tag yang Anda buat
  • TAG_VALUE: nama nilai tag yang Anda buat

Misalnya, 12345678901/env=dev.


PROJECT_ID/TAG_KEY=TAG_VALUE

Ganti kode berikut:

  • PROJECT_ID: project ID Google Cloud Anda
  • TAG_KEY: nama kunci tag yang Anda buat
  • TAG_VALUE: nama nilai tag yang Anda buat

Misalnya, example-project/env=dev.


PROJECT_NUMBER/TAG_KEY=TAG_VALUE

Ganti kode berikut:

  • PROJECT_ID: ID numerik untuk project Google Cloud Anda
  • TAG_KEY: nama kunci tag yang Anda buat
  • TAG_VALUE: nama nilai tag yang Anda buat

Misalnya, 11223344556/env=dev.

Menargetkan tag dengan kebijakan firewall

Setelah membuat tag, Anda dapat merujuk ke key-value pair tertentu dalam aturan kebijakan firewall. Untuk mengetahui petunjuknya, lihat Menggunakan Tag untuk firewall.

Memberikan izin IAM kepada agen layanan

Agar GKE dapat otomatis melampirkan tag ke node baru selama peristiwa peningkatan skala, Anda harus memberikan peran IAM yang sesuai ke akun layanan yang dikelola Google Cloud, yang juga disebut sebagai agen layanan.

  1. Berikan peran Tag User (roles/resourcemanager.tagUser) ke Agen Layanan Kubernetes Engine:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Ganti PROJECT_NUMBER dengan nomor project Google Cloud di cluster. Untuk menemukan nomor project, jalankan perintah berikut:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Berikan peran Administrator Tag Hold (roles/resourcemanager.tagHoldAdmin) ke Agen Layanan Kubernetes Engine untuk pasangan nilai kunci tag:

    gcloud resource-manager tags values add-iam-policy-binding PROJECT_ID/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

    Peran ini memungkinkan agen layanan mencegah penghapusan tag jika key-value pair masih digunakan di GKE.

  3. Berikan peran Tag User (roles/resourcemanager.tagUser) kepada Agen Layanan Google API:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

Memberikan peran IAM tambahan untuk tag di luar project

Untuk menggunakan tag yang dimiliki oleh organisasi atau project yang berbeda dengan project cluster, lakukan langkah-langkah tambahan berikut:

  1. Berikan peran Tag User (roles/resourcemanager.tagUser) ke Agen Layanan Kubernetes Engine akses untuk tag di resource induk:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Ganti kode berikut:

    • PARENT_RESOURCE: project ID atau ID organisasi resource yang memiliki tag tersebut
    • PROJECT_NUMBER: nomor project project cluster
  2. Berikan peran Tag User (roles/resourcemanager.tagUser) ke Agen Layanan Google API akses untuk tag di resource induk:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    
  3. Berikan peran Administrator Tag Hold (roles/resourcemanager.tagHoldAdmin) ke Agen Layanan Kubernetes Engine untuk pasangan nilai kunci tag:

    gcloud resource-manager tags values add-iam-policy-binding PARENT_RESOURCE/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

Memasang tag firewall ke cluster Autopilot

Anda melampirkan tag firewall ke cluster Autopilot di tingkat cluster. GKE secara otomatis menerapkan tag level cluster ini ke setiap node.

Lampirkan tag saat membuat cluster Autopilot baru

Jalankan perintah berikut:

gcloud beta container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru.
  • LOCATION: region Compute Engine cluster.
  • TAG1,TAG2,...: kumpulan key-value pair yang dipisahkan koma yang akan dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di Sintaksis tag di bagian perintah. Contohnya, example-project/env=dev,1234567901/team=sre.

Memasang tag ke cluster Autopilot yang ada

Jalankan perintah berikut:

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Saat Anda memperbarui tag di cluster, GKE akan menimpa tag yang ada di semua node.

Melampirkan tag firewall ke Cluster standar dan node pool

Metode yang Anda gunakan untuk melampirkan tag bergantung pada apakah Anda ingin kumpulan node lain dalam cluster mewarisi tag atau tidak, sebagai berikut:

Tag firewall cluster standar
--autoprovisioning-resource-manager-tags

Setelan level cluster

GKE menerapkan tag ke semua node pool baru yang disediakan secara otomatis di cluster. Jika Anda menggunakan flag ini pada cluster yang ada, kumpulan node yang ada akan mempertahankan tag yang diterapkan sebelum update.

--resource-manager-tags

Setelan level kumpulan node

GKE menerapkan tag ke node pool yang ditentukan. Jika Anda menggunakan flag ini selama pembuatan cluster, GKE akan menerapkan tag ke node pool default yang dibuat GKE. Jika tanda ini digunakan pada kumpulan node yang disediakan secara otomatis, GKE akan menimpa tag yang ada di kumpulan node.

Melampirkan tag firewall ke cluster Standar

Anda dapat melampirkan tag ke cluster Standar baru atau yang sudah ada. Jika Anda melampirkan tag ke seluruh cluster, GKE menganggap tag tersebut ditetapkan pada level cluster.

Lampirkan tag ke cluster Standar baru dengan penyediaan otomatis node

GKE menggunakan tag level cluster untuk node baru yang disediakan secara otomatis secara default. Kumpulan node default yang dibuat GKE di cluster tidak disediakan secara otomatis dan tidak mendapatkan tag tersebut.

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,... \
    --enable-autoprovisioning \
    --max-cpu=MAX_CPU \
    --max-memory=MAX_MEMORY

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru
  • LOCATION: region atau zona Compute Engine untuk cluster
  • TAG1,TAG2,...: kumpulan key-value pair yang dipisahkan koma yang akan dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di Sintaksis tag di bagian perintah. Contohnya, example-project/env=dev,1234567901/team=sre.
  • MAX_CPU: jumlah maksimum core untuk cluster
  • MAX_MEMORY: kapasitas memori maksimum untuk cluster dalam gigabyte

Lampirkan tag saat Anda mengaktifkan penyediaan otomatis node di cluster yang ada

GKE hanya menerapkan tag ini ke node pool baru yang disediakan secara otomatis. Kumpulan node yang ada akan mempertahankan tag yang dimiliki sebelum update.

  1. Lampirkan tag ke cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=TAG1,TAG2,...
    
  2. Aktifkan penyediaan otomatis node di cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --enable-autoprovisioning \
        --max-cpu=MAX_CPU \
        --max-memory=MAX_MEMORY
    

Melampirkan tag firewall ke kumpulan node

Anda dapat melampirkan tag ke kumpulan node baru atau yang ada, terlepas dari apakah tag tersebut menggunakan penyediaan otomatis node. GKE menganggap tag ini sebagai setelan level kumpulan node.

Melampirkan tag ke kumpulan node default

GKE melampirkan tag yang Anda tentukan menggunakan flag --resource-manager-tags saat membuat cluster ke kumpulan node default yang dibuat GKE di cluster.

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster baru
  • LOCATION: region atau zona Compute Engine untuk cluster
  • TAG1,TAG2,...: kumpulan key-value pair yang dipisahkan koma yang akan dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di Sintaksis tag di bagian perintah. Contohnya, example-project/env=dev,1234567901/team=sre.

Melampirkan tag ke kumpulan node baru

Saat Anda menggunakan flag --resource-manager-tags selama pembuatan node pool, GKE akan melampirkan tag yang Anda tentukan ke kumpulan node tersebut.

gcloud beta container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Ganti kode berikut:

  • NODE_POOL_NAME: nama kumpulan node baru
  • CLUSTER_NAME: nama cluster
  • LOCATION: region atau zona Compute Engine
  • TAG1,TAG2,...:kumpulan key-value pair yang dipisahkan koma yang akan dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di Sintaksis tag di bagian perintah. Contohnya, example-project/env=dev,1234567901/team=sre.

Melampirkan tag ke kumpulan node yang ada

Saat Anda memperbarui tag pada kumpulan node yang ada menggunakan tanda --resource-manager-tags, GKE akan menimpa tag yang ada di kumpulan node tersebut. Anda dapat menggunakan perintah ini untuk memperbarui tag pada node pool yang disediakan secara otomatis.

gcloud beta container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Ganti NODE_POOL_NAME dengan nama kumpulan node yang akan diperbarui.

Mengaktifkan/menonaktifkan setelan penyediaan otomatis di cluster dan node pool yang ada

Saat Anda memperbarui tag pada level cluster, GKE akan menerapkan tag baru tersebut ke semua node pool baru dalam cluster dan mempertahankan tag yang telah disertakan ke node pool yang ada.

Saat Anda mengupdate kumpulan node yang ada untuk mengaktifkan atau menonaktifkan penyediaan otomatis node, pertimbangkan implikasi berikut untuk tag:

  • Saat Anda mengaktifkan atau menonaktifkan penyediaan otomatis node, kumpulan node akan mempertahankan tag yang ada. GKE tidak menimpa tag ini dengan tag level cluster, bahkan selama pembuatan ulang node.
  • Jika Anda mengupdate tag secara manual pada node pool tertentu, GKE akan menimpa tag yang ada dengan tag yang Anda tentukan untuk node pool tersebut.

Memverifikasi tag firewall di cluster

  • Cantumkan tag pada cluster Autopilot:

    gcloud beta container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(nodePoolAutoConfig.resourceManagerTags)"
    
  • Cantumkan tag pada kumpulan node tertentu:

    gcloud beta container node-pools describe NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=LOCATION \
      --format="value(config.resourceManagerTags)"
    

Melepaskan tag firewall dari cluster dan node pool

Untuk menghapus tag firewall dari cluster dan node pool, update resource dengan nilai kosong untuk tag tersebut.

Lepaskan tag dari cluster Autopilot

Jalankan perintah berikut:

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=

Melepaskan tag dari kumpulan node

  1. Lepaskan tag penyediaan otomatis node tingkat cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=
    

    GKE tidak akan melampirkan tag ke node pool baru yang disediakan secara otomatis.

  2. Lepaskan tag kumpulan node:

    gcloud beta container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --resource-manager-tags=
    

    GKE menghapus tag yang sudah ada dari kumpulan node tersebut.

Hapus kunci dan nilai tag

Untuk menghapus kunci atau nilai tag, pastikan tag dilepas dari semua resource. Selanjutnya, lihat Menghapus tag di dokumentasi Resource Manager.

Bandingkan tag jaringan dengan Tag

Menggunakan Tag untuk penerapan kebijakan firewall memiliki manfaat keamanan dan kegunaan yang signifikan dibandingkan dengan tag jaringan. Demikian pula, kebijakan firewall jaringan meningkatkan kemampuan aturan firewall VPC dengan memfasilitasi penerapan aturan firewall di seluruh organisasi, folder, project, atau jaringan.

Menggunakan Tag dengan kebijakan firewall jaringan adalah cara yang lebih aman dan skalabel untuk mengelola akses ke lingkungan GKE di seluruh organisasi Anda. Anda dapat menggunakan tag jaringan dalam cluster yang sama seperti Tag, meskipun Anda tidak dapat menggunakan tag jaringan untuk menerapkan kebijakan firewall jaringan.

Untuk perbandingan mendetail antara Tag dan tag jaringan, baca Perbandingan Tag dan tag jaringan dalam dokumentasi Cloud NGFW.

Perbedaan fungsi pada node pool yang disediakan secara otomatis

Di cluster Autopilot dan kumpulan node Standar yang tidak menggunakan penyediaan otomatis node, tag jaringan dan Tag menunjukkan perilaku yang serupa. Tabel berikut menunjukkan perbedaan fungsional antara tag jaringan dan Tag dalam kumpulan node yang disediakan secara otomatis di Cluster Standar:

Tindakan Perilaku tag jaringan Perilaku tag
GKE menyediakan node pool secara otomatis GKE menerapkan tag jaringan level cluster GKE menerapkan tag level cluster
Anda memperbarui tag atau tag jaringan pada kumpulan node yang disediakan secara otomatis
  • Jika ada tag jaringan tingkat cluster, operasi update akan gagal
  • Jika tag jaringan level cluster tidak ada, GKE akan menimpa tag jaringan yang ada untuk kumpulan node tersebut
GKE menimpa tag yang sudah ada untuk kumpulan node, terlepas dari apakah tag level cluster ada atau tidak
Anda memperbarui tag atau tag jaringan untuk seluruh cluster GKE menimpa tag jaringan untuk node pool yang disediakan otomatis oleh baru dan lama dalam cluster. GKE menerapkan tag level cluster baru ke node pool baru yang disediakan secara otomatis. Kumpulan node yang disediakan secara otomatis yang ada akan mempertahankan tag yang dimiliki sebelum update.

Langkah selanjutnya