Kebijakan tolak Identity and Access Management (IAM) dapat Anda gunakan untuk menetapkan batasan pada akses ke resource Google Cloud. Dengan kebijakan tolak, Anda dapat menentukan aturan tolak yang mencegah akun utama tertentu menggunakan izin tertentu, terlepas dari peran yang diberikan.
Halaman ini memberikan ringkasan kebijakan tolak dan aturan tolak. Untuk mempelajari cara membuat dan memperbarui kebijakan tolak, lihat Menolak akses ke resource.
Cara kerja kebijakan tolak
Kebijakan tolak dibuat dari aturan tolak. Setiap aturan tolak menentukan hal berikut:
- Kumpulan akun utama yang izinnya ditolak
- Izin yang ditolak atau tidak dapat digunakan oleh akun utama
- Opsional: kondisi yang harus benar untuk izin yang ditolak
Jika izin akun utama ditolak, akun utama tidak dapat melakukan apa pun yang memerlukan izin tersebut, terlepas dari peran IAM yang telah diberikan kepadanya. Hal ini karena IAM selalu memeriksa aturan tolak yang relevan sebelum memeriksa kebijakan izin yang relevan. Untuk mengetahui detailnya, lihat evaluasi kebijakan.
Untuk menentukan tempat dimana Anda ingin menerapkan kebijakan tolak, lampirkan ke project, folder, atau organisasi. Saat kebijakan tolak ditambahkan ke salah satu resource ini, akun utama dalam kebijakan tidak dapat menggunakan izin yang ditentukan untuk mengakses resource atau salah satu turunan resource.
Anda dapat melampirkan beberapa kebijakan penolakan ke satu resource. Hal ini memungkinkan Anda membuat kebijakan tolak terpisah untuk berbagai jenis aturan tolak. Misalnya, Anda dapat menempatkan aturan tolak terkait kepatuhan dalam satu kebijakan, lalu menggunakan kebijakan lain untuk aturan tolak lainnya. Setiap kebijakan tolak dievaluasi secara terpisah dari semua kebijakan tolak lainnya.
Setiap resource dapat memiliki hingga 500 kebijakan penolakan. Bersama-sama, kebijakan penolakan ini dapat berisi total 500 aturan penolakan.
Evaluasi kebijakan
Saat akun utama mencoba mengakses resource, IAM mengevaluasi semua kebijakan izin dan tolak yang relevan untuk melihat apakah akun utama diizinkan untuk mengakses resource. Ini mengevaluasi kebijakan dalam urutan berikut ini:
IAM memeriksa semua kebijakan tolak yang relevan untuk melihat apakah akun utama telah ditolak izinnya. Kebijakan tolak yang relevan adalah kebijakan tolak yang ditambahkan ke resource, serta kebijakan tolak yang diwariskan.
Jika salah satu dari kebijakan tolak ini mencegah akun utama menggunakan izin yang diperlukan, IAM akan mencegah akun utama mengakses resource.
Jika tidak ada kebijakan tolak yang mencegah akun utama menggunakan izin yang diperlukan, IAM akan melanjutkan ke langkah berikutnya.
IAM memeriksa semua kebijakan izin yang relevan untuk melihat apakah akun utama memiliki izin yang diperlukan. Kebijakan izin yang relevan adalah kebijakan izin yang dilampirkan ke resource, serta semua kebijakan izin yang diwariskan.
Jika akun utama memiliki izin yang diperlukan, IAM memungkinkan akun mengakses resource.
Jika akun utama tidak memiliki izin yang diperlukan, IAM akan mencegahnya mengakses resource.
Diagram berikut menunjukkan alur evaluasi kebijakan ini:
Pewarisan kebijakan tolak
Kebijakan tolak, sama seperti kebijakan izin, diwariskan melaluihierarki resource. Saat Anda melampirkan kebijakan tolak ke project, folder, atau organisasi, kebijakan tersebut juga berlaku untuk semua resource di dalam project, folder, atau organisasi tersebut.
Misalnya, jika kebijakan tolak untuk organisasi mengatakan bahwa akun utama tidak dapat menggunakan izin tertentu, akun utama tidak dapat menggunakan izin tersebut untuk resource apa pun dalam organisasi. Aturan ini berlaku meskipun folder dan project dalam organisasi tersebut memiliki kebijakan tolak yang lebih permisif.
Demikian pula, jika kebijakan tolak untuk sebuah project mengatakan bahwa akun utama tidak dapat menggunakan izin tertentu, maka akun utama tidak dapat menggunakan izin tersebut untuk resource apa pun dalam project. Aturan ini berlaku meskipun organisasi dan folder induk memiliki kebijakan tolak yang lebih permisif.
Kondisi penolakan
Kondisi penolakan menetapkan kondisi yang harus dipenuhi agar aturan
tolak dapat diterapkan. Jika kondisi bernilai true
atau tidak dapat dievaluasi, aturan
tolak akan berlaku dan akun utama tidak dapat menggunakan izin yang
ditentukan. Jika kondisi bernilai false
, aturan tolak tidak akan berlaku
dan akun utama dapat menggunakan izin yang ditentukan jika memiliki izin tersebut.
Kondisi penolakan memiliki struktur yang sama dengan Kondisi IAM. Namun, kondisi penolakan hanya mengenali fungsi tag resource.
Untuk mempelajari cara menulis condition, lihat ringkasan Kondisi IAM.
Grup izin
Beberapa layanan memungkinkan Anda menolak grup izin. Grup izin adalah kumpulan izin yang cocok dengan pola yang ditentukan. Anda dapat menggunakan grup izin untuk menolak serangkaian izin terkait—misalnya, Anda dapat menolak semua izin untuk satu layanan atau resource.
Grup izin yang didukung tercantum dalam Izin yang didukung dalam kebijakan penolakan. Anda tidak dapat menggunakan karakter pengganti pada nama izin lainnya.
ID untuk grup izin menggantikan satu atau beberapa bagian
nama izin dengan karakter pengganti (*
). Grup izin mencakup
semua izin yang cocok dengan pola ini.
Karakter pengganti dapat muncul di tempat berikut:
SERVICE_FQDN/RESOURCE.*
: Menolak semua izin untuk resource yang diberikan yang ditentukan.SERVICE_FQDN/.
: Menolak semua izin untuk layanan yang ditentukan.SERVICE_FQDN/*.VERB
: Menolak semua izin untuk layanan yang diakhiri dengan kata kerja yang ditentukan.
Grup izin mencakup semua izin saat ini dan mendatang yang cocok dengan
pola yang ditentukan. Misalnya, bayangkan Anda menggunakan grup izin
example.googleapis.com/exampleResource.*
untuk menolak semua izin pengguna untuk
jenis resource exampleResource
. Jika example.googleapis.com
menambahkan izin
baru untuk jenis resource exampleResource
, seperti
example.googleapis.com/exampleResource.newPermission
, pengguna akan
otomatis ditolak izin baru.
Struktur kebijakan tolak
Kebijakan tolak adalah kumpulan metadata dan aturan tolak. Aturan tolak mengaitkan kumpulan akun utama dengan serangkaian izin yang ditolak atau tidak dapat digunakan oleh akun utama. Setiap aturan juga dapat menentukan kondisi yang menentukan kapan izin ditolak.
Misalnya, kebijakan tolak berikut memblokir semua akun utama
dari menghapus project, kecuali jika akun utama adalah anggota
project-admins@example.com
atau project yang dihapus memiliki tag dengan
nilai test
.
{
"name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F253519172624/denypolicies/limit-project-deletion",
"uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
"kind": "DenyPolicy",
"displayName": "Only project admins can delete projects.",
"etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
"createTime": "2021-09-07T23:15:35.258319Z",
"updateTime": "2021-09-07T23:15:35.258319Z",
"rules": [
{
"denyRule": {
"deniedPrincipals": [
"principalSet://goog/public:all"
],
"exceptionPrincipals": [
"principalSet://goog/group/project-admins@example.com"
],
"deniedPermissions": [
"cloudresourcemanager.googleapis.com/projects.delete"
],
"denialCondition": {
"title": "Only for non-test projects",
"expression": "!resource.matchTag('12345678/env', 'test')"
}
}
}
]
}
Bagian berikut menjelaskan kolom dalam metadata kebijakan tolak dan aturan tolak.
Metadata
Kebijakan tolak berisi metadata berikut:
name
: Nama kebijakan tolak. Nama ini memiliki formatpolicies/ATTACHMENT_POINT/denypolicies/POLICY_ID
, dimanaATTACHMENT_POINT
merupakan project, folder, atau organisasi tempat kebijakan tolak dilampirkan danPOLICY_ID
adalah ID alfanumerik kebijakan tolak.uid
: ID unik yang ditetapkan untuk kebijakan tolak oleh Google.kind
: Jenis kebijakan.kind
untuk kebijakan tolak selaluDenyPolicy
.displayName
: Opsional. Nama yang dapat dibaca manusia untuk kebijakan tolak.etag
: ID untuk versi kebijakan. Untuk mencegah update yang bertentangan, nilaietag
harus cocok dengan nilai yang disimpan IAM. Jika nilaietag
tidak cocok, permintaan akan gagal.createTime
: Waktu saat kebijakan tolak dibuat.updateTime
: Terakhir kali kebijakan tolak diperbarui.
Aturan tolak
Setiap aturan tolak dapat memiliki kolom berikut:
deniedPrincipals
: Akun utama yang izinnya ditolak. Anda dapat membuat daftar akun utama individual dan kumpulan akun utama. Jenis prinsip individual meliputi akun pengguna, akun layanan, dan identitas tunggal dalam kumpulan identitas tenaga kerja atau beban kerja. Kumpulan akun utama mencakup grup Google, domain Cloud Identity, kumpulan identitas tenaga kerja atau beban kerja, dan semua pengguna di internet.Untuk mengetahui daftar jenis dan ID utama yang valid, lihat ID utama IAM v2 API.
exceptionPrincipals
: Opsional. Akun utama yang dikecualikan dari aturan tolak. Akun utama ini tidak ditolak oleh izin yang ditentukan meskipun tercantum dalamdeniedPrincipals
atau merupakan bagian dari grup yang tercantum dalamdeniedPrincipals
.Anda dapat mencantumkan setiap akun utama dan kumpulan akun utama. Jenis utama individual mencakup akun pengguna, akun layanan, dan identitas tunggal dalam kumpulan tenaga kerja atau workload identity. Kumpulan akun utama mencakup grup Google, domain Cloud Identity, kumpulan identitas tenaga kerja atau beban kerja, dan semua pengguna di internet.
Untuk mengetahui daftar jenis dan ID utama yang valid, lihat ID utama IAM v2 API.
deniedPermissions
: Izin yang tidak dapat digunakan atau ditolak oleh akun utama yang ditentukan. Izin ini menggunakan format izinv2
IAM yang menggunakan nama domain yang sepenuhnya memenuhi syarat (FQDN) untuk mengidentifikasi layanan. Formatnya adalahSERVICE_FQDN/RESOURCE.ACTION
. Google API menggunakan domain*.googleapis.com
. Contoh,iam.googleapis.com/roles.delete
.Hanya beberapa izin yang dapat ditolak. Untuk mengetahui daftar lengkap izin yang dapat ditolak, lihat Izin yang didukung dalam kebijakan penolakan.
Dalam beberapa kasus, Anda juga dapat menggunakan grup izin untuk menolak kumpulan izin. Untuk mengetahui informasi selengkapnya, lihat Grup izin.
denialConditions
: Opsional. Ekspresi logika yang memengaruhi kapan aturan tolak berlaku. Jika kondisi bernilaitrue
atau tidak dapat dievaluasi, izin akan ditolak. Jika kondisi bernilaifalse
, izin tidak akan ditolak. Untuk mengetahui informasi selengkapnya, lihat Ketentuan penolakan di halaman ini.
Kasus penggunaan umum
Berikut adalah situasi umum saat Anda mungkin ingin menggunakan kebijakan tolak dan contoh aturan tolak yang dapat Anda buat dalam setiap situasi. Untuk mempelajari cara membuat dan memperbarui kebijakan tolak, lihat Menolak akses ke resource.
Memusatkan hak istimewa administrator
Anda dapat menggunakan kebijakan tolak untuk membatasi jenis aktivitas administratif tertentu ke kumpulan akun utama tertentu.
Misalnya, bayangkan Anda ingin membatasi pengelolaan peran khusus untuk
organisasi Anda ke satu tim pusat. Untuk melakukannya, Anda harus membuat aturan
tolak yang menolak izin yang diperlukan untuk pengelolaan peran khusus bagi semua pengguna, kecuali
pengguna dalam grup administratif (custom-role-admins@example.com
):
{
"deniedPrincipals": [
"principalSet://goog/public:all"
],
"exceptionPrincipals": [
"principalSet://goog/group/custom-role-admins@example.com"
],
"deniedPermissions": [
"iam.googleapis.com/roles.create",
"iam.googleapis.com/roles.delete",
"iam.googleapis.com/roles.update",
]
}
Kemudian, lampirkan kebijakan tolak ke organisasi Anda.
Kini, hanya anggota grup custom-role-admins@example.com
yang dapat
mengelola peran khusus, meskipun pengguna lain memiliki izin yang diperlukan.
Misalnya, bayangkan bahwayuri@example.com
dantal@example.com
memiliki peran
Administrator Peran Organisasi (roles/iam.organizationRoleAdmin
).
Namun, yuri@example.com
adalah anggota daricustom-role-admins@example.com
dantal@example.com
tidak. Dengan kebijakan tolak ini, hanya yuri@example.com
yang dapat membuat, menghapus, dan memperbarui peran.
Membuat pengecualian untuk pemberian akses
Anda dapat menggunakan kebijakan tolak untuk menolak izin yang diwariskan. Kemampuan ini memberi Anda opsi untuk memberikan peran pada level tinggi dalam hierarki resource, lalu menolak izin peran pada setiap resource dengan tingkat yang lebih rendah jika diperlukan.
Misalnya, bayangkan Anda memiliki folder, Engineering
, yang berisi
beberapa project. Anda ingin memberi grup, eng@example.com
, izin
dalam peran Admin Kunci Akun Layanan (roles/iam.serviceAccountKeyAdmin
) pada
hampir semua project dalam folder. Namun, Anda tidak ingin grup
mendapatkan kemampuan untuk membuat dan menghapus kunci akun layanan di satu project
tertentu dalam folder, example-prod
.
Daripada memberikan peran Admin Kunci Akun Layanan pada setiap project, Anda dapat membuat
aturan tolak berikut yang menolak pembuatan dan penghapusan
izin dalam peran Admin Kunci Akun Layanan untuk akun utama di
eng@example.com
kami:
{
"deniedPrincipals": [
"principalSet://goog/group/eng@example.com"
],
"deniedPermissions": [
"iam.googleapis.com/serviceAccountKeys.create",
"iam.googleapis.com/serviceAccountKeys.delete"
]
}
Kemudian, tambahkan aturan tolak ini ke kebijakan tolak dan lampirkan kebijakan
tersebut ke project example-prod
.
Setelah melampirkan kebijakan tolak ke project, Anda dapat memberikan peran Admin
Kunci Akun Layanan kepada eng@example.com
di folder Engineering
tanpa
mengizinkan grup membuat atau menghapus kunci akun layanan di example-prod
.
Anggota eng@example.com
kemudian dapat membuat dan menghapus kunci akun
layanan di semua project kecuali example-prod
. Misalnya, jika izumi@example.com
adalah anggota eng@example.com
, mereka dapat membuat dan menghapus kunci untuk akun
layanan di example-dev
dan example-test
, tetapi tidak di example-prod
.
Namun, bayangkan Anda sebenarnya ingin subset eng@example.com
dapat
membuat dan menghapus kunci akun layanan di example-prod
. Subset ini
diwakili oleh grup eng-prod@example.com
. Untuk mengizinkan anggota
eng-prod@example.com
membuat dan menghapus kunci akun layanan di
example-prod
, Anda dapat membuat grup dikecualikan dari aturan tolak:
{
"deniedPrincipals": [
"principalSet://goog/group/eng@example.com"
],
"exceptionPrincipals": [
"principalSet://goog/group/eng-prod@example.com"
],
"deniedPermissions": [
"iam.googleapis.com/serviceAccountKeys.create",
"iam.googleapis.com/serviceAccountKeys.delete"
]
}
Dengan kebijakan tolak yang direvisi ini, anggota eng-prod@example.com
dapat membuat dan
menghapus kunci akun layanan di semua project, termasuk example-prod
. Misalnya
jika charlie@example.com
adalah anggota eng-prod@example.com
, mereka
dapat membuat dan menghapus kunci di example-dev
, example-test
, dan example-prod
,
bahkan jika mereka juga anggota eng@example.com
.
Memblokir akses berdasarkan tag
Tag adalah pasangan nilai kunci yang dapat dilampirkan ke organisasi, folder, atau project. Anda dapat menggunakan kebijakan tolak untuk menolak izin berdasarkan tag tanpa menambahkan Kondisi IAM ke setiap pemberian peran.
Misalnya, bayangkan Anda memberi tag pada semua project sebagai dev
, test
, atau
prod
. Anda hanya ingin anggota project-admins@example.com
yang dapat
menghapus project yang diberi tag prod
.
Untuk mengatasi masalah ini, Anda membuat aturan tolak yang menolak
izin cloudresourcemanager.googleapis.com/projects.delete
untuk semua orang
kecuali project-admins@example.com
untuk resource yang diberi tag prod
:
{
"displayName": "Only project admins can delete production projects.",
"rules": [
{
"denyRule": {
"deniedPrincipals": [
"principalSet://goog/public:all"
],
"exceptionPrincipals": [
"principalSet://goog/group/project-admins@example.com"
],
"deniedPermissions": [
"cloudresourcemanager.googleapis.com/projects.delete"
],
"denialCondition": {
"title": "Only for prod projects",
"expression": "resource.matchTag('12345678/env', 'prod')"
}
}
}
]
}
Kemudian, tambahkan aturan tolak ini ke kebijakan tolak dan lampirkan kebijakan tersebut ke organisasi Anda.
Karena aturan tolak ini, Anda dapat membatasi akses akun utama tanpa
menambahkan kondisi pada pemberian perannya. Sebagai gantinya, Anda dapat memberikan peran
utama yang berisi izin cloudresourcemanager.googleapis.com/projects.delete
dan mengandalkan aturan tolak untuk mencegah akun utama di luar
project-admins@example.com
dari menghapus project apa pun yang diberi tag prod
.
Misalnya, pertimbangkan dua pengguna, bola@example.com
dan kiran@example.com
.
Kedua pengguna memiliki peran Project Deleter
(roles/resourcemanager.projectDeleter
). Selain itu, kiran@example.com
adalah
anggota dari project-admins@example.com
. Dengan kebijakan tolak ini,
bola@example.com
hanya dapat menghapus project yang memiliki tag dev
atau test
.
kiran@example.com
dapat menghapus semua project, apa pun tagnya.
Langkah selanjutnya
- Pelajari cara membuat, memperbarui, dan menghapus kebijakan tolak.
- Cari tahu cara memecahkan masalah akses dengan kebijakan tolak.
- Tinjau izin yang dapat ditolak.
- Lihat jenis akun utama yang dapat Anda sertakan dalam kebijakan tolak.