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