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.

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:

  1. 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.

  2. 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 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. 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 dalam deniedPrincipals atau merupakan bagian dari grup yang tercantum dalam deniedPrincipals.

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