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 Platform 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 ditetapkan ke false |
datastore.entities.create |
Pembaruan atau transformasi batchWrite dengan prasyarat ada ditetapkan ke true |
datastore.entities.create |
Update atau transformasi batchWrite tanpa prasyarat
| datastore.entities.create
|
beginTransaction |
datastore.databases.get |
Pembaruan atau transformasi commit dengan prasyarat ada ditetapkan ke false |
datastore.entities.create |
Pembaruan atau transformasi commit dengan prasyarat ada ditetapkan ke true
| datastore.entities.update |
Update 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 ditetapkan ke false |
datastore.entities.create |
Pembaruan atau transformasi write (RPC) dengan prasyarat ada ditetapkan ke true |
datastore.entities.update |
Update 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 |
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, 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 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 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 database baru. Peran ini juga memberikan kemampuan untuk membuat database baru, tidak harus dengan memulihkan dari cadangan. |
Peran khusus
Jika peran bawaan tidak memenuhi persyaratan bisnis Anda, Anda dapat menentukan peran khusus sendiri dengan izin yang Anda tentukan:
Izin
Tabel berikut mencantumkan 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 dalam project. | |
datastore.databases.create |
Membuat database. | |
datastore.databases.update |
Memperbarui database. | |
datastore.databases.delete |
Menghapus database. | |
datastore.databases.createTagBinding |
Membuat 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 |
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 akses 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 |
Memperbarui jadwal pencadangan. | |
datastore.backupSchedules.delete |
Menghapus jadwal pencadangan. | |
Nama izin cadangan | Deskripsi | |
datastore.backups.get |
Mendapatkan detail tentang pencadangan. | |
datastore.backups.list |
Mencantumkan cadangan yang tersedia. | |
datastore.backups.delete |
Menghapus cadangan. | |
datastore.backups.restoreDatabase |
Memulihkan database dari cadangan. |
Latensi perubahan peran
Firestore meng-cache izin IAM selama 5 menit, sehingga perlu waktu hingga 5 menit agar perubahan peran 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 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')"
}
}
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.
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 akan 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 peran firebaserules.system
disembunyikan di konsol secara default.
Langkah selanjutnya
- Pelajari IAM lebih lanjut.
- Memberikan peran IAM.
- Pelajari autentikasi.