Mencantumkan semua project dan folder dalam hierarki Anda

Resource di Google Cloud diatur ke dalam hierarki, dengan setiap node (Organisasi, Folder, Project, dan sebagainya) memiliki referensi ke induknya. Anda dapat menggunakan referensi tersebut sebagai istilah filter utama untuk pemindaian guna meningkatkan konsistensi penelusuran resource.

Anda dapat memberikan izin kepada pengguna menggunakan peran khusus. Peran ini beroperasi berdasarkan prinsip hak istimewa terendah, dan umumnya hanya memberikan izin minimum yang diperlukan untuk melakukan tugas tertentu.

Skema ini dapat berguna untuk mengisolasi berbagai grup pengguna. Contoh:

  • Perusahaan besar dengan departemen yang tidak boleh memeriksa resource rekan mereka.
  • Kontraktor yang diberi izin ke Project tertentu, tetapi tidak ada resource lain.

Namun, karena izinnya yang dibatasi, peran kustom dapat menyebabkan banyak resource dalam hierarki Anda dihilangkan saat menjalankan operasi daftar. Saat melakukan penelusuran sebagai pengguna yang telah diberi peran kustom, mungkin sulit untuk mengetahui alasan resource tertentu tidak muncul.

Untuk menghindari skenario ini, halaman ini membahas praktik terbaik untuk mencantumkan semua resource yang dikelola oleh Cloud Resource Manager API dalam hierarki resource Anda. Anda dapat menggunakan panduan ini untuk mengonfigurasi pemeriksaan audit kustom, atau untuk membuat pengalaman pengguna Anda sendiri di atas Cloud Resource Manager API.

Mencantumkan semua node resource

Saat memindai hierarki resource untuk mencantumkan setiap resource, Anda memerlukan hasil yang sangat konsisten. Jika pemindaian Anda melewatkan resource atau memberikan hasil yang sudah tidak berlaku, mungkin sulit untuk mengetahui bahwa ada yang salah. Untuk memastikan Anda selalu mendapatkan hasil yang paling akurat dan lengkap, gunakan akun layanan dan lakukan pemindaian dengan cara berikut:

  1. Berikan izin list dan get kepada akun layanan untuk Organisasi, Folder, dan Project di resource Organisasi.
  2. Jika Anda mencantumkan resource Project dan Folder, tentukan resource induk dalam string filter.
  3. Jalankan metode projects.list() dengan akun layanan ini untuk setiap jenis resource yang ingin Anda temukan, dan untuk resource perantara seperti Folder.

Contoh untuk mencantumkan semua node resource

Pseudocode berikut menunjukkan cara mencantumkan setiap node resource di Organisasi Anda:

organizations = organizations.search()
projects = emptyList()

parentsToList = queueOf(organizations)
while (parent = parentsToList.pop()) {
  // TODO: Iterate over paginated results as needed.
  // TODO: Handle PERMISSION_DENIED appropriately.
  projects.addAll(projects.list(parent.type, parent.id))
  parentsToList.addAll(folders.list(parent))
}

Saat membuat pengalaman pengguna kustom, Anda juga dapat menggabungkan hasil penelusuran dan memuat resource induk sesuai kebutuhan (sambil juga menangkap pengecualian PERMISSION_DENIED).

Mengurangi latensi pada daftar project gcloud

Jika kueri gcloud projects list Anda gagal atau memerlukan waktu terlalu lama, jumlah project Google Cloud yang ditampilkan mungkin terlalu besar. Untuk memperbaikinya, terapkan flag filter dan page-size ke perintah gcloud projects list Anda.

Untuk mempelajari flag yang dapat Anda tambahkan ke perintah gcloud projects list lebih lanjut, lihat daftar project gcloud.

Contoh mengecualikan project Apps Script

Penyebab paling umum kegagalan atau latensi kueri adalah banyaknya project Apps Script dalam organisasi. Perintah berikut menunjukkan cara mengecualikan project Apps Script dari daftar project dan membatasi jumlah resource yang ditampilkan per halaman.

gcloud projects list --filter="NOT parent.id: 'APPS_SCRIPT_FOLDER_ID' "--page-size='30'

Mendapatkan ID folder Apps Script

Untuk menemukan ID folder Apps Script, lakukan langkah-langkah berikut.

  1. Di toolbar konsol Google Cloud, klik Telusuri resource, dokumen, produk, dan lainnya, lalu ketik apps-script.

    Buka konsol Google Cloud

  2. Di bagian Resources, pilih folder apps-script.

  3. Di bagian ID Folder, salin ID folder.

Telusuri resource

Jika pemindaian dimaksudkan untuk menelusuri resource yang dibuat beberapa waktu lalu, Anda dapat melakukan pemindaian yang lebih cepat yang memiliki konsistensi akhir, bukan konsistensi yang kuat. Perhatikan bahwa metode penelusuran ini dapat menghilangkan beberapa resource dari hasil penelusuran, terutama resource yang baru-baru ini diubah. Untuk menelusuri referensi:

  1. Gunakan akun layanan yang memiliki izin get untuk resource yang Anda telusuri.
  2. Jalankan metode projects.search() dengan akun layanan ini.

Memecahkan masalah resource yang dihilangkan

Jika Anda mengembangkan alat pemindaian, sebaiknya gunakan izin list dan get yang diberikan di tingkat Organisasi. Hal ini menghindari masalah yang disebabkan oleh pengguna yang memiliki izin sebagian, yang mengakibatkan beberapa resource dihilangkan dari daftar.

Jika Anda mendesain pengalaman pengguna kustom yang memeriksa izin pengguna, tidak ada solusi mudah. Jika pengguna tidak memiliki izin tingkat Organisasi, mereka akan memerlukan izin tertentu di setiap resource agar izin tersebut muncul. Jika pengguna tidak memiliki izin pada resource di suatu tempat dalam hierarki, beberapa resource mungkin tidak muncul.

Jika pengguna memiliki izin list, tetapi tidak memiliki izin get untuk resource tertentu, resource tersebut tidak akan terlihat sama sekali di konsol Google Cloud. Namun, resource akan ditampilkan dalam penelusuran menggunakan API atau Google Cloud CLI yang menentukan induk resource. Perbedaan ini antara Google Cloud Console dan metode lainnya adalah sumber kebingungan umum saat mencoba memindai hierarki resource.

Diagram berikut menunjukkan beberapa konfigurasi izin umum, dan cara konfigurasi tersebut mengubah resource yang terlihat oleh pengguna yang menjalankan penelusuran.

Mencantumkan semua resource

Dalam contoh ini, semua izin yang diperlukan diberikan di resource Organisasi. Oleh karena itu, seluruh hierarki terlihat saat melakukan daftar atau penelusuran.

Izin organisasi tidak ada

Pengguna dalam contoh ini memiliki semua izin yang diperlukan kecuali untuk resourcemanager.organizations.get, tetapi mereka diberi izin tersebut di tingkat Folder. Kesenjangan izin ini memberi mereka visibilitas penuh pada daftar atau penelusuran bagian hierarki tersebut, tetapi tidak pada bagian lainnya.

Hanya izin project get

Contoh ini menunjukkan pengalaman pengguna yang hanya memiliki izin resourcemanager.projects.get yang diberikan di tingkat resource Folder. Mereka dapat melihat Project di bawah Folder tersebut dalam hierarki, tetapi hanya dengan menelusuri. Menggunakan fungsi daftar tidak akan menampilkan hasil apa pun.

Folder hanya mendapatkan izin

Contoh ini menunjukkan masalah yang sama seperti di atas, dengan izin yang diberikan hanya memungkinkan pengguna menemukan resource Folder mereka dengan melakukan penelusuran. Menggunakan fungsi daftar tidak akan menampilkan hasil apa pun.

Izin campuran

Pengguna dalam contoh ini memiliki campuran izin di seluruh Organisasinya. Mereka dapat mencantumkan folder dari tingkat Organisasi, yang memungkinkan mereka menemukannya dengan penelusuran yang menentukan resource induk di seluruh hierarki. Mereka dapat mencantumkan resource Project untuk satu Folder, tetapi tidak untuk folder lainnya, dan mereka memiliki izin resourcemanager.projects.get di satu Project di bagian bawah hierarki.

Akibatnya, mereka tidak dapat menampilkan Project di sisi kiri hierarki resource ini. Mereka dapat mencantumkan Project di sisi kanan hanya dengan menggunakan penelusuran yang menentukan resource induk, dan hanya satu Project yang terlihat saat dilihat di konsol Google Cloud.

Resource yang tidak dapat ditemukan

Dalam contoh ini, pengguna dapat mendapatkan resource Organisasi dan mencantumkan resource Project dengan menentukan induk di seluruh hierarki. Namun, mereka tidak memiliki izin untuk mencantumkan atau menelusuri Folder perantara. Project mereka dapat ditelusuri jika pengguna kebetulan mengetahui ID Folder induknya. Folder tidak terlihat sama sekali oleh pengguna ini, sehingga mereka tidak akan dapat menemukan ID jika belum memilikinya. Satu-satunya resource yang akan muncul di konsol Google Cloud adalah Organisasi.

Saat mendesain pengalaman pengguna kustom, penting untuk mengetahui situasi yang mirip dengan di atas. Anda dapat menggunakan kombinasi listingan dan penelusuran untuk merender hierarki resource. Anda juga harus mempertimbangkan cara memberi tahu pengguna bahwa mereka tidak memiliki izin yang akan memungkinkan mereka melihat seluruh hierarki resource.