Tag dan akses bersyarat

Halaman ini menjelaskan cara menggunakan tag dengan Identity and Access Management (IAM) untuk membantu Anda mengontrol akses ke resource Google Cloud.

Untuk mempelajari tag lebih lanjut, lihat Ringkasan tag.

Ringkasan tag

Tag adalah pasangan nilai kunci yang dilampirkan ke resource Google Cloud. Anda dapat memberikan peran IAM secara bersyarat atau menolak izin IAM secara bersyarat berdasarkan apakah resource memiliki tag tertentu atau tidak.

Resource mewarisi nilai tag dari organisasi, folder, dan project induknya. Oleh karena itu, Anda dapat menggunakan tag untuk mengelola akses ke resource Google Cloud mana pun.

Berikut adalah beberapa kasus penggunaan umum untuk mengelola akses dengan tag:

  • Lingkungan pengembangan, staging, dan produksi. Misalnya, Anda dapat menambahkan tag environment: dev ke lingkungan pengembangan dan environment: prod ke lingkungan produksi.
  • Tipe komponen. Misalnya, Anda dapat menambahkan tag component: frontend ke resource front-end dan component: batch ke resource untuk pemrosesan batch.
  • Nama project. Misalnya, jika tim Anda sedang mengerjakan project dengan namakode Atlas, Anda dapat menambahkan tag project: atlas ke resource pengembangan tim.

Definisi dan ID tag

Sebelum melampirkan tag ke resource, Anda harus menentukan kunci untuk tag tersebut, serta nilai yang diizinkan oleh tag. Anda dapat membuat definisi ini di tingkat organisasi atau proyek. Anda dapat menggunakan Resource Manager untuk mengelola definisi tag. Untuk mempelajari lebih lanjut, lihat Membuat dan menentukan tag baru.

Setiap kunci dan nilai tag memiliki beberapa pengenal yang berbeda:

  • ID permanen, yang bersifat unik secara global dan tidak dapat digunakan kembali. Misalnya, kunci tag dapat memiliki ID permanen tagKeys/123456789012, dan nilai tag dapat memiliki ID permanen tagValues/567890123456.
  • Nama pendek. Nama pendek untuk setiap kunci harus unik dalam organisasi Anda, dan nama pendek untuk setiap nilai harus unik untuk kunci yang terkait. Misalnya, kunci tag dapat memiliki nama pendek env, dan nilai tag dapat memiliki nama pendek prod.
  • Nama dengan namespace, yang menambahkan ID numerik organisasi Anda ke nama pendek kunci tag. Misalnya, kunci tag dapat memiliki nama dengan namespace 123456789012/env. Pelajari cara mendapatkan ID organisasi Anda.

Seperti yang dijelaskan di halaman ini, setelah melampirkan tag ke resource, Anda dapat menulis kondisi untuk memberikan akses berdasarkan tag. Untuk menulis Anda harus memilih jenis ID yang akan digunakan dalam kondisi tersebut. Ikuti panduan berikut untuk memilih di antaranya:

  • Untuk bereksperimen dengan tag, sebaiknya gunakan nama dengan namespace (untuk kunci) dan nama pendeknya (untuk nilai). ID ini lebih mudah dipahami dan diingat, terutama saat Anda memulai.
  • Jika Anda mengelola konfigurasi secara deklaratif,menggunakan alat seperti Terraform, pertimbangkan untuk menggunakan nama dengan namespace (untuk kunci) dan nama pendek (untuk nilai). Anda dapat menggunakan kembali ID ini dari waktu ke waktu, yang berarti bahwa alat deklaratif dapat menghapus dan membuatnya kembali, dan kondisi Anda akan terus berfungsi.

    Pendekatan ini memiliki konsekuensi: Misalkan Anda menghapus kunci atau nilai tag, lalu membuat kunci atau nilai baru dengan nama yang sama tetapi maknanya berbeda. Jika kondisi Anda mengacu pada nama dengan namespace atau nama pendek, kondisi akan terus berlaku untuk kunci atau nilai baru.

    Dalam beberapa kasus, perilaku ini dapat menyebabkan entity utama mendapatkan akses yang tidak Anda inginkan.

  • Untuk membantu meminimalkan risiko, pertimbangkan untuk menggunakan ID permanen, yang tidak akan pernah dapat digunakan kembali.

    Berikut alasan ID permanen membantu meminimalkan risiko: Misalkan Anda menghapus kunci atau nilai tag, lalu membuat kunci atau nilai baru dengan nama yang sama tetapi maknanya berbeda. Jika kondisi Anda mengacu pada ID permanen, maka kondisi tersebut tidak berlaku untuk kunci atau nilai yang baru. Akibatnya, akun utama cenderung tidak mendapatkan akses yang tidak Anda inginkan.

    Salah satu kekurangannya adalah jika Anda menghapus dan membuat ulang kunci dan nilai, dan ingin mempertahankan akses akun utama, Anda juga harus memperbarui kebijakan izin untuk merujuk ke ID permanen baru.

Akses ke resource yang diberi tag

Anda dapat menggunakan tag dengan IAM Conditions untuk memberikan peran secara kondisional, bergantung pada tag yang dikaitkan atau diwarisi oleh resource. Jika kondisi bernilai true, akses akan diberikan; jika tidak, akses tidak akan diberikan. Untuk mempelajari lebih lanjut, baca ringkasan IAM Conditions.

Bagian berikut menunjukkan contoh ekspresi kondisi yang memeriksa tag pada resource. Kondisi ini memanggil fungsi yang berbeda bergantung pada apakah kondisi ini memeriksa ID permanen atau nama pendek. Untuk mempelajari fungsi ini lebih lanjut, lihat Tag resource.

Ketentuan yang menggunakan ID permanen

Kondisi ini memberikan peran pada resource dengan tag tagKeys/123456789012: tagValues/567890123456:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

Kondisi ini memberikan peran pada resource yang memiliki tag apa pun dengan kunci tagKeys/123456789012, terlepas dari nilainya:

resource.hasTagKeyId('tagKeys/123456789012')

Kondisi ini memberikan peran pada resource yang memiliki tag tagKeys/123456789012: tagValues/567890123456, dan tag apa pun yang menggunakan kunci tagKeys/987654321098:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456') &&
    resource.hasTagKeyId('tagKeys/987654321098')

Kondisi yang menggunakan nama dengan namespace dan nama pendek

Kondisi ini memberikan peran pada resource dengan tag env: prod, yang menunjukkan bahwa resource berada dalam lingkungan produksi:

resource.matchTag('123456789012/env', 'prod')

Kondisi ini memberikan peran pada resource yang memiliki tag apa pun dengan kunci env, terlepas dari nilainya:

resource.hasTagKey('123456789012/env')

Kondisi ini memberikan peran pada resource yang memiliki tag env: prod dan tag apa pun yang menggunakan kunci project:

resource.matchTag('123456789012/env', 'prod') &&
    resource.hasTagKey('123456789012/project')

Langkah selanjutnya