Kondisi IAM untuk aturan penerusan

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

Saat digunakan dengan Cloud Load Balancing, IAM Conditions memungkinkan Anda memberikan peran yang telah ditetapkan secara kondisional, seperti Admin Load Balancer atau Admin Jaringan, atau peran khusus.

IAM Conditions mendukung ekspresi kondisi untuk memeriksa skema load balancing dari aturan penerusan. Misalnya, Anda dapat memberi akun utama IAM kemampuan untuk membuat load balancer internal, tetapi tidak 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 dari aturan penerusan menentukan jenis atau 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 Load Balancer Aplikasi eksternal global
Load Balancer Aplikasi eksternal regional
Load Balancer Jaringan proxy eksternal global
Load Balancer Jaringan proxy eksternal regional
INTERNAL Load Balancer Jaringan passthrough internal
INTERNAL_MANAGED Load Balancer Aplikasi internal regional
Load Balancer Aplikasi internal lintas region
Load Balancer Jaringan proxy internal regional
Load Balancer Jaringan proxy internal lintas region
INTERNAL_SELF_MANAGED Traffic Director

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 sebuah project, Anda dapat menggunakan REST API, alat command line gcloud, atau halaman IAM di Konsol Google Cloud.

Untuk informasi selengkapnya, lihat Mengelola kebijakan bersyarat.

Contoh ekspresi kondisi untuk load balancing

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

  • Permintaan ini tidak melibatkan pembuatan aturan penerusan.
  • Permintaan tersebut ditujukan untuk membuat aturan penerusan yang memiliki salah satu skema internal.

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

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

Kebijakan contoh

Contoh kebijakan IAM untuk project ini memberi akun utama IAM jane@example.com peran yang telah ditentukan Admin Load Balancer, sehingga tidak termasuk 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', 'INTERNAL_SELF_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 Kubernetes Engine Service Agent ke akun layanan GKE (service-PROJECT_ID@container-engine-robot.iam.gserviceaccount.com). Peran ini memungkinkan akun layanan membuat, mengubah, dan menghapus komponen load balancer, kecuali untuk aturan penerusan eksternal.

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

{
  "bindings": [
    {
      "role": "roles/container.serviceAgent",
      "members": ["serviceAccount:service-PROJECT_ID@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', 'INTERNAL_SELF_MANAGED'])
              )
                  ||
              !compute.isForwardingRuleCreationOperation()
          "
      }
    }
  ]
}

Tidak adanya pemberian izin lainnya, serta berupaya membuat Layanan GKE baru dengan 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 hibah lain, upaya untuk 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