Kebijakan tolak

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 bawah 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

cloudresourcemanager.googleapis.com/organizations/ORG_ID
Ganti ORG_ID dengan ID organisasi numerik. Untuk REST API, mengenkode seluruh nilai ke URL.

Contoh untuk gcloud CLI:
cloudresourcemanager.googleapis.com/organizations/123456789012

Contoh untuk REST API:
cloudresourcemanager.googleapis.com%2Forganizations%2F123456789012

Folder

cloudresourcemanager.googleapis.com/folders/FOLDER_ID
Ganti FOLDER_ID dengan ID folder numerik. Untuk REST API, mengenkode seluruh nilai ke URL.

Contoh untuk gcloud CLI:
cloudresourcemanager.googleapis.com/folders/987654321098

Contoh untuk REST API:
cloudresourcemanager.googleapis.com%2Ffolders%2F987654321098

Project

cloudresourcemanager.googleapis.com/projects/PROJECT_ID
Ganti PROJECT_ID dengan project ID alfanumerik atau numerik. Untuk REST API, mengenkode seluruh nilai ke URL.

Contoh untuk gcloud CLI:
cloudresourcemanager.googleapis.com/projects/my-project

Contoh untuk REST API:
cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project

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 format policies/ATTACHMENT_POINT/denypolicies/POLICY_ID, dimana ATTACHMENT_POINT merupakan project, folder, atau organisasi tempat kebijakan tolak dilampirkan dan POLICY_ID adalah ID alfanumerik kebijakan tolak.
  • uid: ID unik yang ditetapkan untuk kebijakan tolak oleh Google.
  • kind: Jenis kebijakan. kind untuk kebijakan tolak selalu DenyPolicy.
  • displayName: Opsional. Nama yang dapat dibaca manusia untuk kebijakan tolak.
  • etag: ID untuk versi kebijakan. Untuk mencegah update yang bertentangan, nilai etag harus cocok dengan nilai yang disimpan IAM. Jika nilai etag 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 dalam deniedPrincipals atau merupakan bagian dari grup yang tercantum dalam deniedPrincipals.

    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 izin v2 IAM, yang menggunakan nama domain yang sepenuhnya memenuhi syarat (FQDN) untuk mengidentifikasi layanan. Formatnya adalah SERVICE_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 dalam deniedPermissions. 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 bernilai true atau tidak dapat dievaluasi, izin akan ditolak. Jika kondisi bernilai false, 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