Mengelola binding peran bersyarat

Topik ini menjelaskan cara menambahkan, mengubah, dan menghapus binding peran bersyarat dalam kebijakan izin Identity and Access Management (IAM).

Sebelum memulai

  • Aktifkan IAM API.

    Mengaktifkan API

  • Baca Ringkasan Kondisi IAM untuk memahami dasar-dasar binding peran bersyarat IAM.

  • Tinjau referensi atribut untuk mempelajari berbagai atribut kondisi yang dapat digunakan dalam ekspresi.

Peran yang diperlukan

Untuk mengelola binding peran bersyarat dalam kebijakan izin resource, Anda memerlukan izin untuk mendapatkan resource, serta mendapatkan dan menetapkan kebijakan izin untuk resource. Izin ini memiliki bentuk berikut, dengan SERVICE adalah nama layanan yang memiliki resource dan RESOURCE_TYPE adalah nama jenis resource yang aksesnya ingin Anda kelola kami:

  • SERVICE.RESOURCE_TYPE.get
  • SERVICE.RESOURCE_TYPE.getIamPolicy
  • SERVICE.RESOURCE_TYPE.setIamPolicy

Misalnya, untuk mengelola binding peran bersyarat dalam kebijakan izin project, Anda memerlukan izin berikut:

  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.setIamPolicy

Untuk mendapatkan izin yang diperlukan, minta administrator untuk memberi Anda peran khusus atau yang telah ditetapkan sebelumnya yang menyertakan izin tersebut. Misalnya, administrator dapat memberi Anda peran Admin Keamanan (roles/iam.securityAdmin), yang mencakup izin untuk mendapatkan hampir semua resource Google Cloud dan mengelola kebijakan izin.

Menambahkan binding peran bersyarat ke kebijakan

Binding peran kondisional dapat ditambahkan ke kebijakan izin baru atau yang sudah ada untuk mengontrol akses lebih lanjut ke resource Google Cloud. Bagian ini menunjukkan cara menambahkan kondisi berbasis waktu sederhana ke kebijakan izin yang ada menggunakan Google Cloud Console, Google Cloud CLI, dan REST API.

Untuk menambahkan binding peran bersyarat ke kebijakan izin yang sudah ada:

Konsol

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka halaman IAM

  2. Dari daftar utama, temukan akun utama yang diinginkan, lalu klik tombol .

  3. Dari panel Izin edit, temukan peran yang diinginkan untuk mengonfigurasi kondisi. Kemudian, di bagian IAM condition (optional), klik Add IAM condition.

  4. Di panel Edit condition, masukkan judul dan deskripsi opsional untuk condition.

  5. Anda dapat menambahkan ekspresi kondisi menggunakan Pembuat Kondisi atau Editor Kondisi. Pembuat kondisi menyediakan antarmuka interaktif untuk memilih jenis kondisi, operator, dan detain lain yang berlaku terkait ekspresi yang Anda inginkan. Editor kondisi menyediakan antarmuka berbasis teks untuk memasukkan ekspresi secara manual menggunakan sintaksis CEL.

    Pembuat Kondisi:

    1. Dari drop-down Jenis kondisi, pilih Akses Non-permanen.
    2. Dari drop-down Operator, pilih berdasarkan.
    3. Dari drop-down Waktu, klik tombol untuk memilih dari rentang tanggal dan waktu.
    4. Klik Simpan untuk menerapkan kondisi.
    5. Setelah panel Edit kondisi ditutup, klik kembali tombol Simpan dari panel Izin edit untuk memperbarui kebijakan izin.

    Editor Kondisi:

    1. Klik tab Editor Kondisi, lalu masukkan ekspresi berikut (mengganti stempel waktu dengan stempel waktu Anda sendiri):

      request.time < timestamp("2019-12-31T12:00:00.000Z")
    2. Setelah memasukkan ekspresi, Anda dapat memilih untuk memvalidasi sintaks CEL dengan mengklik Run Linter di atas kotak teks di kanan atas.

    3. Klik Simpan untuk menerapkan kondisi.

    4. Setelah panel Edit kondisi ditutup, klik Simpan lagi dari panel Izin edit untuk memperbarui kebijakan izin.

gcloud

Kebijakan izin ditetapkan menggunakan pola baca-ubah-tulis.

Jalankan perintah gcloud projects get-iam-policy guna mendapatkan kebijakan izin saat ini untuk project. Pada contoh berikut, versi JSON dari kebijakan izin didownload ke jalur pada disk.

Perintah:

gcloud projects get-iam-policy project-id --format json > file-path

Format JSON dari kebijakan izin didownload:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

Perhatikan version kebijakan izin saat ini, yaitu 1. Untuk mengonfigurasi kebijakan izin dengan akses yang dapat habis masa berlakunya, tambahkan ekspresi kondisi yang ditandai berikut (ganti stempel waktu dengan stempel waktu Anda sendiri). gcloud CLI memperbarui versi secara otomatis:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer",
      "condition": {
          "title": "Expires_2019",
          "description": "Expires at noon on 2019-12-31",
          "expression":
            "request.time < timestamp('2019-12-31T12:00:00Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Selanjutnya, tetapkan kebijakan izin baru dengan menjalankan perintah gcloud projects set-iam-policy:

gcloud projects set-iam-policy project-id file-path

Kebijakan izin yang baru diterapkan, dan binding peran travis@example.com akan berakhir pada waktu yang ditentukan.

REST

Gunakan pola baca-ubah-tulis untuk mengizinkan akses hingga waktu tertentu.

Pertama, baca kebijakan izin untuk project:

Metode projects.getIamPolicy Resource Manager API mendapatkan kebijakan izin project.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.
  • POLICY_VERSION: Versi kebijakan yang akan ditampilkan Permintaan harus menentukan versi kebijakan terbaru, yaitu kebijakan versi 3. Lihat Menentukan versi kebijakan saat mendapatkan kebijakan untuk detailnya.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Meminta isi JSON:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON seperti berikut:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

Perhatikan version kebijakan izin saat ini, yaitu 1.

Selanjutnya, ubah kebijakan izin agar mengizinkan akses hingga waktu tertentu. Pastikan untuk mengubah kolom version menjadi nilai 3:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_2019",
        "description": "Expires at noon on 2019-12-31",
        "expression": "request.time < timestamp('2019-12-31T12:00:00Z')"
      },
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

Terakhir, tulis kebijakan izin yang telah diperbarui:

Metode projects.setIamPolicy Resource Manager API menetapkan kebijakan izin dalam permintaan sebagai kebijakan izin baru project.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Meminta isi JSON:

{
  "policy": {
    "version": 3,
    "etag": "BwWKmjvelug=",
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "user:travis@example.com"
        ],
        "condition": {
          "title": "Expires_July_1_2020",
          "description": "Expires on July 1, 2020",
          "expression":
            "request.time < timestamp('2020-07-01T00:00:00.000Z')"
        }
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Respons berisi kebijakan izin yang telah diperbarui.


Mengubah binding peran bersyarat yang ada

Setelah membuat binding peran bersyarat, Anda dapat mengubah ekspresi kondisi kapan saja. Bagian ini menunjukkan cara memperbarui kondisi berbasis waktu dalam kebijakan izin yang ada menggunakan Google Cloud Console, Google Cloud CLI, dan REST API.

Untuk mengubah binding peran bersyarat dalam kebijakan izin yang sudah ada:

Konsol

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka halaman IAM

  2. Dari daftar utama, temukan akun utama yang diinginkan, lalu klik tombol .

  3. Dari panel Izin edit, temukan peran yang diinginkan untuk mengonfigurasi kondisi. Kemudian, di bagian kondisi IAM (opsional), klik nama kondisi yang ada untuk mengeditnya.

  4. Di panel Edit kondisi, Anda dapat menyimpan atau memperbarui judul dan deskripsi yang ada untuk condition.

  5. Anda dapat mengedit ekspresi kondisi yang ada atau menambahkan yang baru menggunakan Builder Kondisi atau Editor Kondisi. Pembuat kondisi menyediakan antarmuka interaktif untuk memilih jenis kondisi, operator, dan detail lain yang berlaku terkait ekspresi yang Anda inginkan. Editor kondisi menyediakan antarmuka berbasis teks untuk memasukkan ekspresi secara manual menggunakan sintaksis CEL.

    Pembuat Kondisi:

    1. Tambahkan ekspresi kondisi baru atau ubah ekspresi kondisi yang ada.
    2. Klik Simpan untuk menerapkan kondisi.
    3. Setelah panel Edit kondisi ditutup, klik kembali tombol Simpan dari panel Izin edit untuk memperbarui kebijakan izin.

    Editor Kondisi:

    1. Klik tab Editor Kondisi, lalu tambahkan ekspresi kondisi baru atau ubah ekspresi kondisi yang ada.
    2. Setelah memasukkan ekspresi, Anda dapat memilih untuk memvalidasi sintaks CEL dengan mengklik Run Linter di atas kotak teks di kanan atas.
    3. Klik Simpan untuk menerapkan kondisi.
    4. Setelah panel Edit kondisi ditutup, klik Simpan lagi dari panel Izin edit untuk memperbarui kebijakan izin.

gcloud

Kebijakan izin ditetapkan menggunakan pola baca-ubah-tulis.

Jalankan perintah gcloud projects get-iam-policy guna mendapatkan kebijakan izin saat ini untuk project. Pada contoh berikut, versi JSON dari kebijakan izin didownload ke jalur pada disk.

Perintah:

gcloud projects get-iam-policy project-id --format json > file-path

Format JSON dari kebijakan izin didownload:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Dalam contoh ini, kita akan memperbarui nilai title, description, dan stempel waktu dalam ekspresi untuk mengubah durasi kondisi akses terjadwal. Perbarui bagian kondisi yang ditandai berikut (mengganti nilainya dengan nilai Anda sendiri):

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Selanjutnya, tetapkan kebijakan izinkan baru dengan menjalankan perintah gcloud projects set-iam-policy.

gcloud projects set-iam-policy project-id file-path

Kebijakan izin yang diperbarui diterapkan, dan binding peran fatima@example.com akan berakhir masa berlakunya pada waktu yang baru.

REST

Gunakan pola baca-ubah-tulis untuk mengubah binding peran bersyarat.

Pertama, baca kebijakan izin untuk project:

Metode projects.getIamPolicy Resource Manager API mendapatkan kebijakan izin project.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Meminta isi JSON:

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Selanjutnya, ubah binding peran kondisional di kebijakan izin. Dalam contoh ini, kita akan memperbarui nilai stempel waktu untuk mengubah durasi kondisi akses terjadwal. Perbarui bagian ekspresi kondisi yang ditandai berikut (ganti stempel waktu dengan stempel waktu Anda sendiri):

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_5_months",
        "description": "Expires in 5 months on 2020-01-12",
        "expression":
          "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Terakhir, tulis kebijakan izin yang telah diperbarui:

Metode projects.setIamPolicy Resource Manager API menetapkan kebijakan izin dalam permintaan sebagai kebijakan izin baru project.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Meminta isi JSON:

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "condition": {
          "title": "Duration_5_months",
          "description": "Expires in 5 months on 2020-01-12",
          "expression":
            "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')"
        },
        "members": [
          "user:fatima@example.com"
        ],
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Respons berisi kebijakan izin yang telah diperbarui.


Menghapus kondisi dari binding peran

Menghapus kondisi dari binding peran tidak akan mencabut peran tersebut. Sebaliknya, metode ini membiarkan semua akun utama dalam binding peran tersebut menggunakan izin dalam peran tanpa syarat.

Bagian ini menunjukkan cara menghapus kondisi berbasis waktu dalam kebijakan izin menggunakan Google Cloud Console, Google Cloud CLI, dan REST API.

Untuk menghapus kondisi dari binding peran dalam kebijakan izinkan:

Konsol

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka halaman IAM

  2. Dari daftar utama, temukan akun utama yang diinginkan, lalu klik tombol .

  3. Dari panel Izin edit, temukan binding peran yang diinginkan. Kemudian, di bagian Kondisi IAM (opsional), klik nama kondisi yang ada.

  4. Di panel Edit kondisi, klik tombol untuk menghapus kondisi. Anda akan diminta untuk mengonfirmasi penghapusan kondisi.

  5. Setelah panel Edit kondisi ditutup, klik Simpan lagi dari panel Izin edit untuk memperbarui kebijakan izin.

gcloud

Kebijakan izin ditetapkan menggunakan pola baca-ubah-tulis.

Jalankan perintah gcloud projects get-iam-policy guna mendapatkan kebijakan izin saat ini untuk project. Pada contoh berikut, versi JSON dari kebijakan izin didownload ke jalur pada disk.

Perintah:

gcloud projects get-iam-policy project-id --format json > file-path

Format JSON dari kebijakan izin didownload:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Untuk menghapus binding peran bersyarat dari kebijakan izin, hapus blok condition seperti yang ditunjukkan di bawah ini:

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:fatima@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Perhatikan bahwa version masih ditetapkan ke 3, meskipun bahwa binding peran tanpa syarat hanya memerlukan kebijakan izin versi 1. Sebaiknya selalu gunakan nomor versi tertinggi saat menetapkan kebijakan izin, baik untuk binding peran kondisional maupun binding peran tanpa syarat. Lihat persyaratan versi untuk informasi selengkapnya. gcloud CLI memperbarui nomor versi untuk kebijakan izin secara otomatis.

Selanjutnya, tetapkan kebijakan izin yang telah diperbarui dengan menjalankan perintah gcloud projects set-iam-policy.

gcloud projects set-iam-policy project-id file-path

Kebijakan izin yang diperbarui diterapkan, sehingga menghapus binding peran bersyarat untuk fatima@example.com. Masa berlaku pengikatan peran tidak akan berakhir.

REST

Gunakan pola baca-ubah-tulis untuk menghapus binding peran bersyarat.

Pertama, baca kebijakan izin untuk project:

Metode projects.getIamPolicy Resource Manager API mendapatkan kebijakan izin project.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

Meminta isi JSON:

{
  "options": {
    "requestedPolicyVersion": 3
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan menerima respons JSON seperti berikut:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Duration_3_months",
        "description": "Expires in 3 months on 2019-10-12",
        "expression":
          "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")"
      },
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Selanjutnya, ubah kebijakan izin dengan menghapus binding peran bersyarat:

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

Perhatikan bahwa version masih ditetapkan ke 3, meskipun bahwa binding peran tanpa syarat hanya memerlukan kebijakan izin versi 1. Sebaiknya selalu gunakan nomor versi tertinggi saat menetapkan kebijakan izin, baik untuk binding peran kondisional maupun binding peran tanpa syarat. Lihat persyaratan versi untuk informasi selengkapnya.

Terakhir, tulis kebijakan izin yang telah diperbarui:

Metode projects.setIamPolicy Resource Manager API menetapkan kebijakan izin dalam permintaan sebagai kebijakan izin baru project.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Google Cloud Anda Project ID adalah string alfanumerik, seperti my-project.

Metode HTTP dan URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Meminta isi JSON:

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "user:fatima@example.com"
        ]
      }
    ]
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Respons berisi kebijakan izin yang telah diperbarui.


Langkah selanjutnya