Keamanan untuk library klien server
Saat menggunakan library klien server untuk Firestore, Anda dapat mengelola akses ke resource dengan Identity and Access Management (IAM). IAM memungkinkan Anda memberikan akses yang lebih terperinci ke resource Google Cloud tertentu dan mencegah akses yang tidak diinginkan ke resource lain. Halaman ini menjelaskan izin dan peran IAM untuk Firestore. Untuk mengetahui deskripsi mendetail tentang IAM, baca dokumentasi IAM.
Dengan IAM, Anda dapat menerapkan prinsip keamanan dengan hak istimewa terendah, jadi Anda hanya memberikan akses yang diperlukan ke resource Anda.
Dengan IAM, Anda dapat mengontrol siapa (pengguna) yang memiliki izin apa (peran) untuk resource mana dengan menetapkan kebijakan IAM.
Kebijakan IAM memberikan satu atau beberapa peran kepada pengguna, sehingga pengguna memiliki izin tertentu. Misalnya, Anda dapat memberikan peran datastore.indexAdmin
kepada pengguna, yang memungkinkan pengguna membuat, mengubah, menghapus, mencantumkan, atau melihat
indeks.
Izin dan peran
Bagian ini merangkum izin dan peran yang didukung Firestore.
Izin yang diperlukan untuk metode API
Tabel berikut mencantumkan daftar izin yang harus dimiliki pemanggil untuk melakukan setiap tindakan:
Metode | Izin yang diperlukan |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
Pembaruan atau transformasi batchWrite dengan prasyarat ada yang ditetapkan ke false |
datastore.entities.create |
Pembaruan atau transformasi batchWrite dengan prasyarat ada yang ditetapkan ke true |
datastore.entities.create |
Pembaruan atau transformasi batchWrite tanpa prasyarat |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
Pembaruan atau transformasi commit dengan prasyarat ada yang ditetapkan ke false |
datastore.entities.create |
Pembaruan atau transformasi commit dengan prasyarat ada yang ditetapkan ke true |
datastore.entities.update |
Pembaruan atau transformasi commit tanpa prasyarat |
datastore.entities.create |
commit hapus |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.get datastore.entities.list |
listCollectionIds |
datastore.entities.list |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
Pembaruan atau transformasi write (RPC) dengan prasyarat ada yang ditetapkan ke false |
datastore.entities.create |
Pembaruan atau transformasi write (RPC) dengan prasyarat ada yang ditetapkan ke true |
datastore.entities.update |
Pembaruan atau transformasi write (RPC) tanpa prasyarat |
datastore.entities.create |
write (RPC) hapus |
datastore.entities.delete |
projects.databases.indexes |
|
create |
datastore.indexes.create |
delete |
datastore.indexes.delete |
get |
datastore.indexes.get |
list |
datastore.indexes.list |
projects.databases |
|
create |
datastore.databases.create Jika permintaan
Jika Anda ingin memverifikasi apakah binding tag berhasil ditetapkan dengan mencantumkan binding, izin tambahan berikut diperlukan:
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
pulihkan | datastore.backups.restoreDatabase |
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
projects.databases.backupschedules |
|
get | datastore.backupSchedules.get |
list | datastore.backupSchedules.list |
buat | datastore.backupSchedules.create |
update | datastore.backupSchedules.update |
delete | datastore.backupSchedules.delete |
projects.locations.backups |
|
get | datastore.backups.get |
list | datastore.backups.list |
delete | datastore.backups.delete |
Peran yang telah ditetapkan
Dengan IAM, setiap metode API di Firestore mengharuskan akun yang membuat permintaan API memiliki izin yang sesuai untuk menggunakan resource. Izin diberikan dengan menetapkan kebijakan yang memberikan peran kepada pengguna, grup, atau akun layanan. Selain peran dasar, yaitu pemilik, editor, dan pelihat, Anda dapat memberikan peran Firestore kepada pengguna project Anda.
Tabel berikut mencantumkan peran IAM Firestore. Anda dapat memberikan beberapa peran kepada pengguna, grup, atau akun layanan.
Peran | Izin | Deskripsi |
---|---|---|
roles/datastore.owner |
appengine.applications.get datastore.* resourcemanager.projects.get resourcemanager.projects.list |
Akses penuh ke Firestore. |
roles/datastore.user |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.databases.list datastore.entities.* datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list |
Akses baca/tulis ke data dalam database Firestore. Ditujukan untuk developer aplikasi dan akun layanan. |
roles/datastore.viewer |
appengine.applications.get datastore.databases.get datastore.databases.getMetadata datastore.databases.list datastore.entities.get datastore.entities.list datastore.indexes.get datastore.indexes.list datastore.namespaces.get datastore.namespaces.list datastore.statistics.get datastore.statistics.list resourcemanager.projects.get resourcemanager.projects.list datastore.insights.get |
Akses baca ke semua resource Firestore. |
roles/datastore.importExportAdmin |
appengine.applications.get datastore.databases.export datastore.databases.getMetadata datastore.databases.import datastore.operations.cancel datastore.operations.get datastore.operations.list resourcemanager.projects.get resourcemanager.projects.list |
Akses penuh untuk mengelola impor dan ekspor. |
roles/datastore.bulkAdmin |
resourcemanager.projects.get resourcemanager.projects.list datastore.databases.getMetadata datastore.databases.bulkDelete datastore.operations.cancel datastore.operations.get datastore.operations.list |
Akses penuh untuk mengelola operasi massal. |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
Akses penuh untuk mengelola definisi indeks. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadata datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list resourcemanager.projects.get resourcemanager.projects.list |
Akses penuh ke pemindaian Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.get datastore.backupSchedules.list |
Akses baca ke jadwal pencadangan di database Firestore. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.get datastore.backupSchedules.list datastore.backupSchedules.create datastore.backupSchedules.update datastore.backupSchedules.delete datastore.databases.list datastore.databases.getMetadata |
Akses penuh ke jadwal pencadangan di database Firestore. |
roles/datastore.backupsViewer |
datastore.backups.get datastore.backups.list |
Akses baca ke informasi cadangan di lokasi Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Akses penuh ke cadangan di lokasi Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.get datastore.backups.list datastore.backups.restoreDatabase datastore.databases.list datastore.databases.create datastore.databases.getMetadata datastore.operations.list datastore.operations.get |
Kemampuan untuk memulihkan cadangan Firestore ke dalam database baru. Peran ini juga memberikan kemampuan untuk membuat database baru, tidak harus dengan memulihkan dari cadangan. |
roles/datastore.statisticsViewer |
resourcemanager.projects.get resourcemanager.projects.list datastore.databases.getMetadata datastore.insights.get datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list datastore.statistics.list datastore.statistics.get |
Akses baca ke Insight, Statistik, dan pemindaian Key Visualizer. |
Peran khusus
Jika peran bawaan tidak memenuhi persyaratan bisnis Anda, Anda dapat menentukan peran khusus sendiri dengan izin yang Anda tentukan:
Peran yang diperlukan untuk membuat dan mengelola tag
Jika ada tag yang diwakili dalam tindakan pembuatan atau pemulihan, beberapa peran diperlukan. Lihat Membuat dan mengelola tag untuk mengetahui detail selengkapnya tentang cara membuat pasangan nilai kunci tag sebelum mengaitkannya dengan resource database.
Izin yang tercantum berikut diperlukan.
Melihat tag
datastore.databases.listTagBindings
datastore.databases.listEffectiveTags
Mengelola tag pada resource
Izin berikut diperlukan untuk resource database tempat Anda mengaitkan nilai tag.
datastore.databases.createTagBinding
Izin
Tabel berikut mencantumkan izin yang didukung Firestore.
Nama izin database | Deskripsi | |
---|---|---|
datastore.databases.get |
Mulai atau melakukan rollback transaksi. | |
datastore.databases.import |
Mengimpor entity ke dalam database. | |
datastore.databases.export |
Mengekspor entity dari database. | |
datastore.databases.bulkDelete |
Menghapus entity secara massal dari database. | |
datastore.databases.getMetadata |
Membaca metadata dari database. | |
datastore.databases.list |
Mencantumkan database dalam project. | |
datastore.databases.create |
Membuat database. | |
datastore.databases.update |
Memperbarui database. | |
datastore.databases.delete |
Menghapus database. | |
datastore.databases.createTagBinding |
Buat binding tag untuk database. | |
datastore.databases.deleteTagBinding |
Menghapus binding tag untuk database. | |
datastore.databases.listTagBindings |
Mencantumkan semua binding tag untuk database. | |
datastore.databases.listEffectiveTagBindings |
Mencantumkan binding tag efektif untuk database. | |
Nama izin entitas | Deskripsi | |
datastore.entities.create |
Membuat dokumen. | |
datastore.entities.delete |
Menghapus dokumen | |
datastore.entities.get |
Membaca dokumen. | |
datastore.entities.list |
Membuat daftar nama dokumen pada project. ( datastore.entities.get diperlukan untuk mengakses data dokumen.) |
|
datastore.entities.update |
Mengupdate dokumen | |
Nama izin indeks | Deskripsi | |
datastore.indexes.create |
Membuat indeks. | |
datastore.indexes.delete |
Menghapus indeks. | |
datastore.indexes.get |
Membaca metadata dari indeks. | |
datastore.indexes.list |
Membuat daftar indeks pada project. | |
datastore.indexes.update |
Mengupdate indeks. | |
Nama izin operasi | Deskripsi | |
datastore.operations.cancel |
Membatalkan operasi yang berjalan lama. | |
datastore.operations.delete |
Menghapus operasi yang berjalan lama. | |
datastore.operations.get |
Mengambil status terbaru dari operasi yang berjalan lama. | |
datastore.operations.list |
Mencantumkan operasi yang berjalan lama. | |
Nama izin project | Deskripsi | |
resourcemanager.projects.get |
Menjelajahi resource di project. | |
resourcemanager.projects.list |
Membuat daftar project yang dimiliki. | |
Nama izin lokasi | Deskripsi | |
datastore.locations.get |
Mendapatkan detail tentang lokasi database. Diperlukan untuk membuat database baru. | |
datastore.locations.list |
Mencantumkan lokasi database yang tersedia. Diperlukan untuk membuat database baru. | |
Nama izin Key Visualizer | Deskripsi | |
datastore.keyVisualizerScans.get |
Mendapatkan detail tentang pemindaian Key Visualizer. | |
datastore.keyVisualizerScans.list |
Mencantumkan pemindaian Key Visualizer yang tersedia. | |
Nama izin Jadwal Pencadangan | Deskripsi | |
datastore.backupSchedules.get |
Mendapatkan detail tentang jadwal pencadangan. | |
datastore.backupSchedules.list |
Mencantumkan jadwal pencadangan yang tersedia. | |
datastore.backupSchedules.create |
Buat jadwal pencadangan. | |
datastore.backupSchedules.update |
Perbarui jadwal pencadangan. | |
datastore.backupSchedules.delete |
Menghapus jadwal pencadangan. | |
Nama izin pencadangan | Deskripsi | |
datastore.backups.get |
Mendapatkan detail tentang cadangan. | |
datastore.backups.list |
Mencantumkan cadangan yang tersedia. | |
datastore.backups.delete |
Menghapus cadangan. | |
datastore.backups.restoreDatabase |
Memulihkan database dari cadangan. | |
Nama izin insight | Deskripsi | |
datastore.insights.get |
Mendapatkan insight resource |
Latensi perubahan peran
Firestore menyimpan izin IAM dalam cache selama 5 menit, sehingga perubahan peran memerlukan waktu hingga 5 menit untuk diterapkan.
Mengelola IAM Firestore
Anda dapat memperoleh dan menetapkan kebijakan IAM menggunakan konsol Google Cloud , IAM API, atau alat command line gcloud
. Lihat
Memberikan, Mengubah, dan Mencabut Akses ke Anggota Project
untuk mengetahui detailnya.
Mengonfigurasi izin akses bersyarat
Anda dapat menggunakan IAM Conditions untuk menentukan dan menerapkan kontrol akses bersyarat.
Misalnya, kondisi berikut menetapkan peran datastore.user
kepada akun utama hingga tanggal tertentu:
{
"role": "roles/datastore.user",
"members": [
"user:travis@example.com"
],
"condition": {
"title": "Expires_December_1_2023",
"description": "Expires on December 1, 2023",
"expression":
"request.time < timestamp('2023-12-01T00:00:00.000Z')"
}
}
Untuk mempelajari cara menentukan IAM Conditions untuk akses sementara, lihat Mengonfigurasi akses sementara.
Untuk mempelajari cara mengonfigurasi IAM Conditions untuk akses ke satu atau beberapa database, lihat Mengonfigurasi kondisi akses database.
Ketergantungan aturan keamanan pada IAM
Aturan Keamanan Firestore untuk klien seluler/web bergantung pada akun layanan dan binding IAM berikut:
Akun layanan | Peran IAM |
---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase otomatis menyiapkan akun layanan ini untuk Anda. Jika Anda
menghapus peran firebaserules.system
dari akun layanan ini, aturan keamanan Anda akan menolak semua permintaan. Untuk memulihkan binding IAM ini,
gunakan perintah gcloud CLI berikut:
gcloud projects add-iam-policy-binding project_id \ --member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \ --role=roles/firebaserules.system
Untuk menentukan project_id dan project_number, lihat Mengidentifikasi project.
Gunakan Google Cloud CLI, bukan konsol Google Cloud ,
karena peranfirebaserules.system
disembunyikan di konsol secara default.
Langkah berikutnya
- Pelajari IAM lebih lanjut.
- Memberikan peran IAM.
- Pelajari autentikasi.