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. Untuk mempelajari cara menggunakan Tag di GKE untuk tujuan lain, seperti pengelolaan penagihan atau kebijakan IAM bersyarat, lihat Mengelola resource GKE menggunakan Tag.

Tentang Tag

Tag adalah key-value pair yang memungkinkan Anda menganotasi dan mengelola resource Google Cloud di tingkat organisasi atau project. Anda dapat menggunakan tag untuk mengatur resource dan menerapkan kebijakan secara bersyarat seperti firewall atau kebijakan 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 bersyarat ke node GKE. Anda harus menetapkan tujuan GCE_FIREWALL untuk tag yang ingin digunakan dengan kebijakan firewall jaringan. Saat Anda menerapkan tag tujuan firewall ke cluster atau node pool GKE, 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 Anda bermigrasi ke kebijakan firewall jaringan dan menggunakan tag firewall yang aman. Untuk perbandingan mendetail, lihat Membandingkan tag jaringan dengan Tag dalam dokumen ini.

Alur kerja tag untuk kebijakan firewall jaringan

Untuk menggunakan tag dengan kebijakan firewall jaringan di GKE, lakukan tindakan berikut:

  1. Buat tag:

    1. Tentukan kunci tag di tingkat 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. Berikan akses kepada pengguna untuk berinteraksi dengan tag firewall.

  3. Terapkan pasangan nilai kunci tag ke cluster atau node pool GKE 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 lakukan inisialisasi 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 versi GKE sebelum 1.28, gunakan tag jaringan dengan aturan firewall VPC sebagai gantinya.
  • Cluster GKE dan tag harus dikaitkan dengan jaringan VPC yang sama.
  • Di cluster Standard, setiap node pool 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 pasangan nilai kunci tag sebelum dapat melampirkan tag tersebut ke cluster atau node pool.

Peran dan izin IAM

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

  • Untuk memberikan izin yang diperlukan untuk 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 cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

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

Membuat tag

Tag harus ada agar Anda dapat melampirkan tag ke cluster atau node. Untuk membuat tag, lihat 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)"
    

    Outputnya adalah tagKeys/KEY_ID, dengan KEY_ID adalah ID numerik untuk kunci. 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 gcloud CLI

Saat merujuk ke tag menggunakan gcloud CLI, Anda harus memformat pasangan nilai kunci 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 pasangan nilai kunci tertentu dalam aturan kebijakan firewall. Untuk mengetahui petunjuknya, lihat Menggunakan Tag untuk firewall.

Memberikan izin IAM ke agen layanan

Agar GKE dapat otomatis melampirkan tag ke node baru selama peristiwa penskalaan, Anda harus memberikan peran IAM yang sesuai ke akun layanan yang dikelola Google Cloud, yang juga disebut 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 cluster. Untuk menemukan nomor project, jalankan perintah berikut:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Berikan peran Administrator Tag Holds (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 pasangan nilai kunci masih digunakan di GKE.

  3. Berikan peran Pengguna Tag (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 untuk akses 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 akses Agen Layanan Google API 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 Holds (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
    

Melampirkan tag firewall ke cluster Autopilot

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

Melampirkan 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 untuk dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di Bagian sintaksis tag dalam perintah. Contohnya, example-project/env=dev,1234567901/team=sre.

Melampirkan 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 dan node pool Standard

Metode yang Anda gunakan untuk melampirkan tag bergantung pada apakah Anda ingin node pool lain di cluster mewarisi tag, sebagai berikut:

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

Setelan tingkat cluster

GKE menerapkan tag ke semua node pool baru yang disediakan secara otomatis di cluster.

Jika Anda menggunakan flag ini di cluster yang ada, GKE tidak akan menerapkan tag ke node pool yang ada di cluster. Node pool yang ada mempertahankan tag apa pun yang telah diterapkan sebelum update. Untuk memperbarui tag node pool yang ada, gunakan flag --resource-manager-tags.

--resource-manager-tags

Setelan tingkat 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 Anda menggunakan flag ini di node pool yang disediakan secara otomatis, GKE akan menimpa tag yang ada di node pool.

Melampirkan tag firewall ke cluster Standard

Anda dapat melampirkan tag ke cluster Standard baru atau yang sudah ada. Saat Anda melampirkan tag ke seluruh cluster, GKE menganggap tag ini ditetapkan di level cluster.

Melampirkan tag ke cluster Standard baru dengan penyediaan otomatis node

GKE menggunakan tag tingkat cluster untuk node baru yang disediakan otomatis secara default. Node pool 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 untuk dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di Bagian sintaksis tag dalam 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

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

GKE hanya menerapkan tag ini ke node pool baru yang disediakan secara otomatis. Node pool yang ada akan mempertahankan tag yang dimilikinya 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 node pool

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

Melampirkan tag ke node pool default

GKE akan melampirkan tag yang Anda tentukan menggunakan flag --resource-manager-tags saat Anda membuat cluster ke node pool 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 untuk dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di Bagian sintaksis tag dalam perintah. Contohnya, example-project/env=dev,1234567901/team=sre.

Melampirkan tag ke node pool baru

Saat Anda menggunakan flag --resource-manager-tags selama pembuatan node pool, GKE akan melampirkan tag yang Anda tentukan ke node pool 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 node pool baru
  • CLUSTER_NAME: nama cluster
  • LOCATION: region atau zona Compute Engine cluster
  • TAG1,TAG2,...:kumpulan key-value pair yang dipisahkan koma untuk dilampirkan. Setiap pasangan nilai kunci harus menggunakan sintaksis yang didukung, seperti yang dijelaskan di Bagian sintaksis tag dalam perintah. Contohnya, example-project/env=dev,1234567901/team=sre.

Melampirkan tag ke node pool yang ada

Saat Anda memperbarui tag di node pool yang ada menggunakan flag --resource-manager-tags, GKE akan menimpa tag yang ada di node pool tersebut. Anda dapat menggunakan perintah ini untuk memperbarui tag di 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 node pool yang akan diupdate.

Mengalihkan setelan penyediaan otomatis di cluster dan node pool yang ada

Saat Anda memperbarui tag di tingkat cluster, GKE akan menerapkan tag baru tersebut ke semua node pool baru di cluster dan mempertahankan tag yang dilampirkan ke node pool yang ada.

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

  • Saat Anda mengaktifkan atau menonaktifkan penyediaan otomatis node, node pool akan mempertahankan tag yang ada. GKE tidak menimpa tag ini dengan tag tingkat cluster, bahkan selama pembuatan ulang node.
  • Jika Anda memperbarui tag secara manual di 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 di cluster Autopilot:

    gcloud beta container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(nodePoolAutoConfig.resourceManagerTags)"
    
  • Cantumkan tag di node pool 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, perbarui resource dengan nilai kosong untuk tag.

Melepaskan tag dari cluster Autopilot

Jalankan perintah berikut:

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

Melepaskan tag dari node pool

  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 node pool:

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

    GKE akan menghapus tag yang ada dari node pool tersebut.

Menghapus kunci dan nilai tag

Untuk menghapus kunci atau nilai tag, pastikan tag tersebut dilepaskan dari semua resource. Kemudian, lihat Menghapus tag dalam dokumentasi Resource Manager.

Membandingkan 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 penegakan 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 di cluster yang sama dengan Tag, meskipun Anda tidak dapat menggunakan tag jaringan untuk menerapkan kebijakan firewall jaringan.

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

Perbedaan fungsional di node pool yang disediakan secara otomatis

Di cluster Autopilot dan di node pool Standard yang tidak menggunakan penyediaan otomatis node, tag jaringan dan Tag menunjukkan perilaku yang serupa. Tabel berikut menunjukkan perbedaan fungsional antara tag jaringan dan Tag di node pool yang disediakan otomatis di cluster Standard:

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

Langkah selanjutnya