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. Untuk mempelajari lebih lanjut tempat Anda dapat melampirkan kebijakan penolakan, lihat Titik lampiran di halaman ini.
Anda dapat melampirkan beberapa kebijakan tolak 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. Secara keseluruhan, kebijakan penolakan ini dapat berisi total 500 aturan penolakan.
Titik lampiran
Setiap kebijakan penolakan dilampirkan ke organisasi, folder, atau project. Saat dilampirkan ke salah satu resource ini, kebijakan tolak akan diwarisi oleh semua resource tingkat rendah di project, folder, atau organisasi tersebut. Untuk menangani kebijakan penolakan, Anda memerlukan ID untuk resource tempat kebijakan penolakan, yang disebut titik lampiran. ID ini menggunakan salah satu format dalam tabel berikut:
Format titik lampiran | |
---|---|
Organisasi |
Contoh untuk gcloud CLI:
Contoh untuk REST API: |
Folder |
Contoh untuk gcloud CLI:
Contoh untuk REST API: |
Project |
Contoh untuk gcloud CLI:
Contoh untuk REST API: |
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
tolak. ID untuk grup izin
yang didukung mengganti satu atau beberapa bagian nama izin dengan karakter pengganti (*
). Izin yang disertakan setiap grup bergantung pada posisi
karakter pengganti:
SERVICE_FQDN/RESOURCE.*
: Menolak semua izin untuk resource tertentu 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 kepada 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 barunya.
Anda hanya dapat menggunakan karakter pengganti dalam grup izin yang didukung. Penggunaan karakter pengganti dalam nama izin lain tidak didukung.
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 agar tidak menghapus
project, kecuali jika akun utama adalah anggota grup project-admins
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",
"cloudresourcemanager.googleapis.com/folders.*"
],
"exceptionPermissions": [
"cloudresourcemanager.googleapis.com/folders.list",
"cloudresourcemanager.googelapis.com/folders.get"
],
"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. Setiap jenis akun utama mencakup akun pengguna, akun layanan, dan identitas tunggal dalam kumpulan identitas tenaga kerja atau workload. Kumpulan akun utama mencakup Google Grup, 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. Setiap jenis akun utama mencakup akun pengguna, akun layanan, dan satu identitas dalam kumpulan identitas tenaga kerja atau beban kerja. Kumpulan akun utama mencakup Google Grup, 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 tolak.
Dalam beberapa kasus, Anda juga dapat menggunakan grup izin untuk menolak serangkaian izin. Untuk informasi selengkapnya, lihat Grup izin.
exceptionPermissions
: Opsional. Daftar izin yang dapat digunakan akun utama yang ditentukan, meskipun izin tersebut disertakan dalamdeniedPermissions
. Misalnya, Anda dapat menggunakan kolom ini untuk membuat pengecualian untuk izin tertentu dalam 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
):
{
"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
yang dapat
mengelola peran khusus, meskipun pengguna lain memiliki izin yang diperlukan.
Misalnya, bayangkan bahwa Yuri dan Tal memiliki peran
Administrator Peran Organisasi (roles/iam.organizationRoleAdmin
). Namun, Yuri adalah
anggota custom-role-admins
, dan Tal bukan. Dengan kebijakan tolak ini, hanya Yuri
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
, 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
grup eng
:
{
"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 grup eng
di folder Engineering
tanpa
mengizinkan grup membuat atau menghapus kunci akun layanan di example-prod
.
Anggota grup eng
kemudian dapat membuat dan menghapus kunci akun
layanan di semua project kecuali example-prod
. Misalnya, jika Izumi adalah anggota
grup eng
, dia 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 grup eng
dapat
membuat dan menghapus kunci akun layanan di example-prod
. Subset ini
diwakili oleh grup eng-prod
. Untuk mengizinkan anggota grup eng-prod
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 grup eng-prod
dapat membuat dan
menghapus kunci akun layanan di semua project, termasuk example-prod
. Misalnya, jika Charlie adalah anggota grup eng-prod
, dia dapat membuat dan
menghapus kunci di example-dev
, example-test
, dan example-prod
, meskipun dia
juga anggota grup eng
.
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 grup project-admins
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 grup project-admins
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
grup project-admins
menghapus project apa pun yang diberi tag prod
.
Misalnya, pertimbangkan dua pengguna, Bola dan Kiran. Kedua pengguna memiliki peran Project Deleter (roles/resourcemanager.projectDeleter
). Selain itu, Kiran adalah anggota grup project-admins
. Dengan kebijakan tolak ini, Bola hanya dapat
menghapus project yang memiliki tag dev
atau test
. Kiran 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.