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:
- Berikan izin
list
danget
kepada akun layanan untuk Organisasi, Folder, dan Project di resource Organisasi. - Jika Anda mencantumkan resource Project dan Folder, tentukan resource induk dalam string filter.
- 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.
Di toolbar konsol Google Cloud, klik Telusuri resource, dokumen, produk, dan lainnya, lalu ketik
apps-script
.Di bagian Resources, pilih folder apps-script.
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:
- Gunakan akun layanan yang memiliki izin
get
untuk resource yang Anda telusuri. - 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.
Dalam contoh ini, semua izin yang diperlukan diberikan di resource Organisasi. Oleh karena itu, seluruh hierarki terlihat saat melakukan daftar atau penelusuran.
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.
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.
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.
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.
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.