Kondisi IAM untuk aturan penerusan

Identity and Access Management (IAM) Conditions memungkinkan Anda menentukan kebijakan IAM dengan pemberian bersyarat. Anda menentukan kondisi dalam binding peran kebijakan IAM resource. Jika kondisi ada, peran hanya diberikan jika ekspresi kondisi bernilai true. Setiap ekspresi kondisi adalah kumpulan pernyataan logika, sehingga Anda dapat menentukan satu atau beberapa atribut. Untuk informasi selengkapnya, lihat Referensi atribut untuk IAM Conditions.

Jika digunakan dengan Cloud Load Balancing, IAM Conditions memungkinkan Anda memberikan peran standar secara bersyarat — seperti Load Balancer Admin atau Network Admin — atau peran kustom.

IAM Conditions mendukung ekspresi kondisi untuk memeriksa skema load balancer aturan penerusan. Misalnya, Anda dapat memberikan kemampuan kepada akun utama IAM untuk membuat load balancer internal secara bersyarat, tetapi tidak untuk load balancer eksternal. Jika akun utama IAM tersebut mencoba membuat aturan penerusan untuk load balancer eksternal, Google Cloud akan menolak tindakan tersebut dan menampilkan error seperti berikut:

ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource:

 - Required 'compute.forwardingRules.create' permission for
 'projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME'

Menggunakan IAM Conditions pada load balancer Google Cloud

Skema load balancing aturan penerusan menentukan jenis load balancer yang dapat menggunakan aturan penerusan. Dengan kata lain, skema load balancing sesuai dengan jenis load balancer, seperti yang ditunjukkan dalam tabel berikut.

Skema load balancing Deskripsi
EKSTERNAL Load Balancer Aplikasi Klasik
Load Balancer Jaringan proxy Klasik
Load Balancer Jaringan passthrough eksternal
EXTERNAL_MANAGED Global external Application Load Balancer
Global external proxy Network Load Balancer
Regional external Application Load Balancer
regional external proxy Network Load Balancer
INTERNAL Load Balancer Network passthrough internal
INTERNAL_MANAGED Load Balancer Aplikasi internal regional
Load Balancer Jaringan proxy internal regional
Load Balancer Aplikasi internal lintas region
Load Balancer Jaringan proxy internal lintas region
INTERNAL_SELF_MANAGED Mesh Layanan Cloud

Anda menentukan kolom loadBalancingScheme saat membuat load balancer. Dengan memeriksa kolom loadBalancingScheme dalam kondisi IAM, Anda dapat memberi akun utama kemampuan untuk membuat jenis load balancer tertentu.

Menentukan IAM Conditions

Anda dapat menetapkan binding peran bersyarat menggunakan metode setIamPolicy yang sama dengan yang Anda gunakan untuk mengonfigurasi binding peran lainnya. Untuk menetapkan binding peran dengan kondisi pada project, Anda dapat menggunakan REST API, alat command line gcloud, atau halaman IAM di konsol Google Cloud.

Untuk mengetahui informasi selengkapnya, lihat Mengelola kebijakan bersyarat.

Contoh ekspresi kondisi untuk load balancing

Ekspresi kondisi berikut, yang dapat digunakan dalam kebijakan IAM, hanya mengizinkan permintaan API jika salah satu hal berikut benar:

  • Permintaan tidak melibatkan pembuatan aturan penerusan.
  • Permintaannya adalah membuat aturan penerusan yang memiliki salah satu skema load balancing internal.

    !compute.isForwardingRuleCreationOperation() || (
      compute.isForwardingRuleCreationOperation() &&
      compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED'])
    )
    

Skema load balancing EXTERNAL dihilangkan. Jika akun utama mencoba membuat aturan penerusan dengan skema load balancing EXTERNAL, pesan error izin akan muncul.

Contoh kebijakan

Contoh kebijakan IAM untuk project ini memberikan peran standar Admin Load Balancer ke akun utama IAM jane@example.com, yang mengecualikan kemampuan untuk membuat load balancer eksternal (karena skema load balancing EXTERNAL dihilangkan). jane@example.com dapat membuat load balancer internal, serta dapat mengelola, mengubah, dan menghapus load balancer apa pun.

{
  "bindings": [
    {
      "role": "roles/compute.loadBalancerAdmin",
      "members": ["user:jane@example.com"],
      "condition": {
          "title": "only_internal_lb_schemes",
          "description": "Internal LB creation only permitted",
          "expression": "
             !compute.isForwardingRuleCreationOperation() || (
                compute.isForwardingRuleCreationOperation() &&
                compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED'])
             )
          "
      }
    }
  ]
}

Memberikan izin akun layanan GKE untuk jenis aturan penerusan tertentu

Anda juga dapat menggunakan IAM Conditions untuk membatasi akses ke akun layanan GKE agar hanya membuat jenis aturan penerusan tertentu.

Contoh JSON ini menunjukkan kebijakan IAM lengkap untuk memberikan peran Agen Layanan Kubernetes Engine kepada akun layanan GKE (service-PROJECT_ID@container-engine-robot.iam.gserviceaccount.com). Dengan peran ini, akun layanan dapat membuat, mengubah, dan menghapus komponen load balancer, kecuali untuk aturan penerusan eksternal.

Dengan pemberian bersyarat ini, akun layanan GKE hanya dapat membuat aturan penerusan internal baru, tetapi dapat mengelola semua aturan penerusan yang ada.

{
  "bindings": [
    {
      "role": "roles/container.serviceAgent",
      "members": ["serviceAccount:service-<var>PROJECT_ID</var>@container-engine-robot.iam.gserviceaccount.com"],
      "condition": {
          "title": "only_internal_lb_schemes",
          "description": "Internal LB Creation Only Permitted",
          "expression": "(
                 compute.isForwardingRuleCreationOperation()
                      &&
                  compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED'])
              )
                  ||
              !compute.isForwardingRuleCreationOperation()
          "
      }
    }
  ]
}

Tanpa pemberian lain, upaya membuat Layanan GKE baru jenis LoadBalancer, tanpa anotasi untuk Load Balancer Jaringan passthrough internal, akan menghasilkan pesan error seperti berikut:

Error creating load balancer (will retry): failed to ensure load balancer for
service default/SERVICE-NAME: failed to create forwarding rule for load balancer
(a01d427111c7011ea96e142010a80006(default/SERVICE-NAME)): googleapi: Error 403:
Required 'compute.forwardingRules.create' permission for
'projects/PROJECT_ID/regions/[region]/forwardingRules/FORWARDING_RULE_NAME',
forbidden

Selain itu, tanpa pemberian izin lainnya, upaya membuat objek Ingress baru akan menyebabkan pesan error serupa karena pengontrol Ingress Cloud Load Balancing perlu membuat Load Balancer Aplikasi eksternal.

Pesan error GKE tersedia menggunakan perintah kubectl describe dan kubectl get events -w.

Langkah selanjutnya