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
- Pelajari IAM lebih lanjut.
- Memberikan peran IAM.