Membatasi tindakan pada resource GKE menggunakan kebijakan organisasi khusus

deskripsi: Pelajari cara mengontrol tindakan pada resource GKE tertentu di organisasi Google Cloud Anda.

Halaman ini menunjukkan cara membatasi operasi tertentu pada resource Google Kubernetes Engine (GKE) di organisasi Anda menggunakan batasan khusus di Layanan Kebijakan Organisasi Google Cloud. Untuk mempelajari Kebijakan Organisasi lebih lanjut, lihat Kebijakan organisasi khusus.

Tentang batasan dan kebijakan organisasi

Kebijakan Organisasi Google Cloud memberi Anda kontrol terpusat dan terprogram atas resource organisasi. Sebagai administrator kebijakan organisasi, Anda dapat menentukan kebijakan organisasi, yang merupakan serangkaian batasan yang disebut batasan yang berlaku untuk resource Google Cloud dan turunan dari resource tersebut dalam hierarki resource Google Cloud. Anda dapat menerapkan kebijakan organisasi di level organisasi, folder, atau project.

Kebijakan Organisasi memberikan batasan yang telah ditetapkan untuk berbagai layanan Google Cloud. Namun, jika ingin kontrol yang lebih terperinci dan dapat disesuaikan atas kolom tertentu yang dibatasi dalam kebijakan organisasi, Anda juga dapat membuat batasan khusus dan menggunakan batasan khusus tersebut dalam kebijakan organisasi khusus.

Resource yang didukung di GKE

Untuk GKE, Anda dapat membuat batasan khusus untuk metode CREATE atau UPDATE di kolom mana pun di resource Cluster atau NodePool Google Kubernetes Engine API v1, kecuali untuk kolom khusus output dan kolom berikut:

  • projects.locations.clusters.masterAuth.clientKey
  • projects.locations.clusters.masterAuth.password

Pewarisan kebijakan

Secara default, kebijakan diwariskan oleh turunan resource tempat Anda menerapkan kebijakan. Misalnya, jika Anda menerapkan kebijakan pada folder, Google Cloud akan menerapkan kebijakan ini pada semua project dalam folder tersebut. Untuk mempelajari lebih lanjut perilaku ini dan cara mengubahnya, lihat Aturan evaluasi hierarki.

Harga

Batasan dan kebijakan organisasi ditawarkan tanpa biaya.

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.
  • Untuk mendapatkan izin yang Anda perlukan untuk membuat batasan dan menerapkan kebijakan organisasi, minta administrator untuk memberi Anda peran IAM Administrator Kebijakan Organisasi (roles/orgpolicy.policyAdmin) di organisasi Google Cloud Anda. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.

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

  • Pastikan Anda mengetahui ID organisasi Anda.

Membuat batasan khusus

Untuk membuat batasan khusus baru, tentukan batasan dalam file YAML dan terapkan batasan khusus di organisasi Anda menggunakan Google Cloud CLI.

  1. Buat file YAML untuk batasan khusus:

    name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_NAME
    resourceTypes:
    - container.googleapis.com/RESOURCE_NAME
    methodTypes:
    - METHOD1
    - METHOD2
    condition: "resource.OBJECT_NAME.FIELD_NAME == VALUE"
    actionType: ACTION
    displayName: DISPLAY_NAME
    description: DESCRIPTION
    

    Ganti kode berikut:

    • ORGANIZATION_ID: ID organisasi Anda, seperti 123456789.
    • CONSTRAINT_NAME: nama yang Anda inginkan untuk batasan kustom baru. Batasan kustom harus diawali dengan custom., dan hanya dapat menyertakan huruf besar, huruf kecil, atau angka, misalnya, custom.enableGkeAutopilot. Panjang maksimum kolom ini adalah 70 karakter, tidak termasuk awalan, misalnya, organizations/123456789/customConstraints/custom..
    • RESOURCE_NAME: nama (bukan URI) resource REST GKE API yang berisi objek dan kolom yang ingin Anda batasi. Misalnya Cluster atau NodePool.
    • METHOD1,METHOD2,...: daftar metode RESTful yang akan menerapkan batasan. Dapat berupa CREATE atau CREATE dan UPDATE.
    • condition: kondisi untuk memvalidasi permintaan, yang ditulis dalam Common Expression Language (CEL). Kolom ini memiliki panjang maksimal 1000 karakter. Ekspresi harus berisi kolom berikut, dan mendukung operator logika seperti && dan ||:

      • OBJECT_NAME: nama objek GKE API yang ingin Anda batasi, dalam format pascalCase. Misalnya, privateClusterConfig.
      • FIELD_NAME: nama kolom GKE API yang ingin Anda batasi, dalam format pascalCase. Misalnya, enablePrivateNodes.
      • VALUE: nilai kolom. Untuk kolom boolean, gunakan true atau false. Untuk kolom string, gunakan "STRING".
    • ACTION: tindakan yang akan diambil jika condition terpenuhi. Ini dapat berupa ALLOW atau DENY.

    • DISPLAY_NAME: nama yang mudah dibaca manusia untuk batasan. Kolom ini memiliki panjang maksimal 200 karakter.

    • DESCRIPTION: deskripsi batasan yang mudah dipahami untuk ditampilkan sebagai pesan error saat kebijakan dilanggar. Kolom ini memiliki panjang maksimal 2000 karakter.

  2. Terapkan batasan khusus:

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

    Ganti PATH_TO_FILE dengan jalur file definisi batasan khusus Anda.

  3. Pastikan batasan khusus ada:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    Outputnya mirip dengan yang berikut ini:

    CONSTRAINT                     LIST_POLICY    BOOLEAN_POLICY    ETAG
    custom.enableGkeAutopilot      -              SET               COCsm5QGENiXi2E=
    ...
    

Menerapkan batasan khusus

Untuk menerapkan batasan khusus baru, buat kebijakan organisasi yang merujuk ke batasan tersebut, lalu terapkan kebijakan organisasi.

  1. Buat file YAML untuk kebijakan organisasi:

    name: RESOURCE_HIERARCHY/policies/POLICY_NAME
    spec:
      rules:
      - enforce: true
    

    Ganti kode berikut:

    • RESOURCE_HIERARCHY: lokasi kebijakan baru, yang memengaruhi cakupan penegakan. Gunakan hierarki resource Google Cloud sebagai panduan. Misalnya, jika Anda ingin menerapkan kebijakan pada project tertentu, gunakan projects/PROJECT_ID. Untuk menerapkan kebijakan di organisasi tertentu, gunakan organizations/ORGANIZATION_ID.
    • POLICY_NAME: nama kebijakan baru.
  2. Terapkan kebijakan:

    gcloud org-policies set-policy PATH_TO_POLICY
    

    Ganti PATH_TO_POLICY dengan jalur ke file definisi kebijakan Anda.

  3. Pastikan kebijakan ada:

    gcloud org-policies list \
        --RESOURCE_FLAG=RESOURCE_ID
    

    Ganti kode berikut:

    • RESOURCE_FLAG: resource Google Cloud tempat Anda menerapkan kebijakan. Misalnya project atau folder.
    • RESOURCE_ID: ID resource tempat Anda menerapkan kebijakan. Misalnya, ID folder Google Cloud Anda.

    Untuk daftar argumen, lihat gcloud org-policies list.

    Outputnya mirip dengan hal berikut ini:

    CONSTRAINT                                    LIST_POLICY    BOOLEAN_POLICY    ETAG
    iam.disableWorkloadIdentityClusterCreation    -              SET               CO3UkJAGEOj1qsQB
    custom.enableGkeAutopilot                     -              SET               COCsm5QGENiXi2E=
    custom.enableBinAuth                          -              SET               CJfKiZUGEJju7LUD
    

Contoh: Membuat batasan khusus dan menerapkan kebijakan

Contoh berikut membuat batasan khusus dan kebijakan yang mengharuskan semua cluster baru dalam project tertentu untuk menjadi cluster Autopilot.

Sebelum memulai, Anda harus mengetahui hal-hal berikut:

  • ID organisasi Anda
  • Project ID

Membuat batasan

  1. Simpan file berikut sebagai constraint-enable-autopilot.yaml:

    name: organizations/ORGANIZATION_ID/customConstraints/custom.enableGkeAutopilot
    resourceTypes:
    - container.googleapis.com/Cluster
    methodTypes:
    - CREATE
    condition: "resource.autopilot.enabled == false"
    actionType: DENY
    displayName: Enable GKE Autopilot
    description: All new clusters must be Autopilot clusters.
    

    Hal ini menentukan batasan untuk setiap cluster baru, jika mode cluster bukan Autopilot, operasi akan ditolak.

  2. Terapkan batasan:

    gcloud org-policies set-custom-constraint ~/constraint-enable-autopilot.yaml
    
  3. Pastikan batasan ada:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    Outputnya mirip dengan hal berikut ini:

    CUSTOM_CONSTRAINT                       ACTION_TYPE  METHOD_TYPES   RESOURCE_TYPES                     DISPLAY_NAME
    custom.enableGkeAutopilot               DENY         CREATE         container.googleapis.com/Cluster   Enable GKE Autopilot
    ...
    

Membuat kebijakan

  1. Simpan file berikut sebagai policy-enable-autopilot.yaml:

    name: projects/PROJECT_ID/policies/custom.enableGkeAutopilot
    spec:
      rules:
      - enforce: true
    

    Ganti PROJECT_ID dengan project ID Anda.

  2. Terapkan kebijakan:

    gcloud org-policies set-policy ~/policy-enable-autopilot.yaml
    
  3. Pastikan kebijakan ada:

    gcloud org-policies list --project=PROJECT_ID
    

    Outputnya mirip dengan hal berikut ini:

    CONSTRAINT                  LIST_POLICY    BOOLEAN_POLICY    ETAG
    custom.enableGkeAutopilot   -              SET               COCsm5QGENiXi2E=
    

Setelah Anda menerapkan kebijakan, tunggu sekitar dua menit hingga Google Cloud mulai menerapkan kebijakan tersebut.

Menguji kebijakan

Coba buat cluster GKE Standard dalam project:

gcloud container clusters create org-policy-test \
    --project=PROJECT_ID \
    --zone=COMPUTE_ZONE \
    --num-nodes=1

Outputnya adalah sebagai berikut:

Operation denied by custom org policies: ["customConstraints/custom.enableGkeAutopilot": "All new clusters must be Autopilot clusters."]

Contoh batasan khusus untuk kasus penggunaan umum

Bagian berikut memberikan sintaksis beberapa batasan khusus yang mungkin berguna bagi Anda:

Deskripsi Sintaksis batasan
Jangan nonaktifkan upgrade otomatis node untuk node pool baru

    name: organizations/ORGANIZATION_ID/customConstraints/custom.enableAutoUpgrade
    resourceTypes:
    - container.googleapis.com/NodePool
    methodTypes:
    - CREATE
    condition: "resource.management.autoUpgrade == true"
    actionType: ALLOW
    displayName: Enable node auto-upgrade
    description: All node pools must have node auto-upgrade enabled.
Mengaktifkan Workload Identity Federation untuk GKE bagi cluster baru

    name: organizations/ORGANIZATION_ID/customConstraints/custom.enableWorkloadIdentity
    resourceTypes:
    - container.googleapis.com/Cluster
    methodTypes:
    - CREATE
    condition: "has(resource.workloadIdentityConfig.workloadPool) || resource.workloadIdentityConfig.workloadPool.size() > 0"
    actionType: ALLOW
    displayName: Enable Workload Identity on new clusters
    description: All new clusters must use Workload Identity.
Jangan nonaktifkan Cloud Logging pada cluster yang ada

    name: organizations/ORGANIZATION_ID/customConstraints/custom.enableLogging
    resourceTypes:
    - container.googleapis.com/Cluster
    methodTypes:
    - UPDATE
    condition: "resource.loggingService == 'none'"
    actionType: DENY
    displayName: Do not disable Cloud Logging
    description: You cannot disable Cloud Logging on existing GKE cluster.
Hanya izinkan pembuatan atau pembaruan node pool Standard saat endpoint metadata lama dinonaktifkan

    name: organizations/ORGANIZATION_ID/customConstraints/custom.nodeConfigMetadata
    resourceTypes:
    - container.googleapis.com/NodePool
    methodTypes:
    - CREATE
    - UPDATE
    condition: "'disable-legacy-endpoints' in resource.config.metadata && resource.config.metadata['disable-legacy-endpoints'] == 'true'"
    actionType: ALLOW
    displayName: Disable legacy metadata endpoints
    description: You can only create or update node pools if you disable legacy
    metadata endpoints.

Contoh batasan ini menunjukkan cara menetapkan batasan khusus pada nilai peta. Kolom condition menggunakan operator indeks pada kunci peta disable-legacy-endpoints. Jika menggunakan sintaksis pemilihan kolom reguler, seperti dalam contoh sebelumnya, Anda akan melihat error INVALID_CUSTOM_CONSTRAINT_CONDITION.

Langkah selanjutnya