Keamanan untuk library klien server
Saat menggunakan library klien server untuk Firestore, Anda dapat mengelola akses ke resource dengan Identity and Access Management (IAM). Dengan IAM, Anda dapat memberikan akses yang lebih terperinci ke resource Google Cloud Platform tertentu dan mencegah akses yang tidak diinginkan ke resource lain. Halaman ini menjelaskan izin dan peran IAM untuk Firestore. Untuk penjelasan lengkap 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.
IAM memungkinkan Anda mengontrol siapa (pengguna) yang memiliki izin apa (peran) untuk resource mana dengan menetapkan kebijakan IAM.
Kebijakan IAM memberikan satu atau beberapa peran kepada pengguna, dengan memberikan izin tertentu kepada pengguna. Misalnya, Anda dapat memberikan peran datastore.indexAdmin
kepada pengguna, yang memungkinkannya 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 |
beginTransaction |
datastore.databases.get |
Pembaruan atau transformasi commit dengan prasyarat yang ada ditetapkan ke false |
datastore.entities.create |
Pembaruan atau transformasi commit dengan prasyarat yang ada ditetapkan ke true
| datastore.entities.update |
commit mengupdate atau mentransformasi tanpa prakondisi
| 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 |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runQuery |
datastore.entities.get |
Pembaruan atau transformasi write (RPC) dengan prasyarat yang ada ditetapkan ke false |
datastore.entities.create |
Pembaruan atau transformasi write (RPC) dengan prasyarat yang ada ditetapkan ke true |
datastore.entities.update |
write (RPC) mengupdate atau mentransformasi tanpa prakondisi |
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 |
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
restore | 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 primitif, pemilik, editor, dan viewer, Anda dapat memberikan peran Firestore kepada pengguna project Anda.
Tabel berikut mencantumkan peran IAM Firestore. Anda dapat memberikan beberapa peran ke akun pengguna, grup, atau 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 di 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 |
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.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 pencadangan 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. |
Peran khusus
Jika peran yang telah ditetapkan tidak memenuhi kebutuhan bisnis, Anda dapat menentukan peran khusus sendiri dengan izin yang Anda tentukan:
Izin
Tabel berikut mencantumkan daftar izin yang didukung Firestore.
Nama izin database | Deskripsi | |
---|---|---|
datastore.databases.get |
Memulai atau melakukan rollback transaksi. | |
datastore.databases.import |
Mengimpor entity ke dalam database. | |
datastore.databases.export |
Mengekspor entity dari database. | |
datastore.databases.getMetadata |
Membaca metadata dari database. | |
datastore.databases.list |
Mencantumkan database pada sebuah 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 yang 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 |
Mendapatkan 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 akses lokasi | Deskripsi | |
datastore.locations.get |
Mendapatkan detail tentang lokasi database. Diperlukan untuk membuat database baru. | |
datastore.locations.list |
Menampilkan daftar lokasi database yang tersedia. Diperlukan untuk membuat database baru. | |
Nama izin Key Visualizer | Deskripsi | |
datastore.keyVisualizerScans.get |
Dapatkan detail tentang pemindaian Key Visualizer. | |
datastore.keyVisualizerScans.list |
Mencantumkan pemindaian Key Visualizer yang tersedia. | |
Nama izin Jadwal Cadangan | Deskripsi | |
datastore.backupSchedules.get |
Dapatkan detail tentang jadwal pencadangan. | |
datastore.backupSchedules.list |
Mencantumkan jadwal pencadangan yang tersedia. | |
datastore.backupSchedules.create |
Buat jadwal cadangan. | |
datastore.backupSchedules.update |
Memperbarui jadwal pencadangan. | |
datastore.backupSchedules.delete |
Menghapus jadwal pencadangan. | |
Nama izin pencadangan | Deskripsi | |
datastore.backups.get |
Dapatkan detail tentang cadangan. | |
datastore.backups.list |
Mencantumkan cadangan yang tersedia. | |
datastore.backups.delete |
Menghapus cadangan. | |
datastore.backups.restoreDatabase |
Memulihkan database dari cadangan. |
Latensi perubahan peran
Firestore menyimpan izin IAM dalam cache selama 5 menit, sehingga perubahan peran perlu waktu hingga 5 menit agar berlaku.
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 yang ditentukan:
{
"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')"
}
}
Guna mempelajari cara menetapkan Kondisi IAM untuk akses sementara, lihat Mengonfigurasi akses sementara.
Guna mempelajari cara mengonfigurasi Kondisi IAM untuk akses ke satu atau beberapa database, lihat Mengonfigurasi kondisi akses database.
Dependensi 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 menyiapkan akun layanan ini secara otomatis 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 bagian Mengidentifikasi project.
Gunakan Google Cloud CLI, bukan Google Cloud Console, karena peran firebaserules.system
tersembunyi di konsol secara default.
Langkah selanjutnya
- Pelajari IAM lebih lanjut.
- Memberikan peran IAM.
- Pelajari autentikasi.