Sicurezza per le librerie client server
Quando utilizzi le librerie client server per Firestore, puoi gestire l'accesso alle tue risorse con Identity and Access Management (IAM). IAM ti consente di concedere un accesso più granulare a determinate risorse Google Cloud e impedisce l'accesso indesiderato ad altre risorse. Questa pagina descrive i ruoli e le autorizzazioni IAM per Firestore. Per una descrizione dettagliata di IAM, consulta la documentazione di IAM.
Con IAM puoi adottare il principio di sicurezza del privilegio minimo e quindi concedere solo l'accesso necessario alle tue risorse.
IAM ti consente di controllare chi (utente) ha quale (ruolo)
autorizzazione per quali risorse impostando le policy IAM.
Le policy IAM concedono uno o più ruoli a un utente, assegnandogli determinate autorizzazioni. Ad esempio, puoi concedere il ruolo datastore.indexAdmin
a un utente, che gli consente di creare, modificare, eliminare, elencare o visualizzare
gli indici.
Autorizzazioni e ruoli
Questa sezione riepiloga le autorizzazioni e i ruoli supportati da Firestore.
Autorizzazioni richieste per i metodi API
La tabella seguente elenca le autorizzazioni di cui il chiamante deve disporre per eseguire ciascuna azione:
| Metodo | Autorizzazioni obbligatorie |
|---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
Aggiornamento o trasformazione di batchWrite con la precondizione exists impostata su false |
datastore.entities.create |
Aggiornamento o trasformazione di batchWrite con la precondizione exists impostata su true |
datastore.entities.create |
Aggiornamento o trasformazione di batchWrite senza precondizione |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
Aggiornamento o trasformazione di commit con la precondizione exists impostata su false |
datastore.entities.create |
Aggiornamento o trasformazione di commit con la precondizione exists impostata su true |
datastore.entities.update |
Aggiornamento o trasformazione di commit senza precondizione |
datastore.entities.create |
commit elimina |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.getdatastore.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 |
executePipeline (RPC)con una delle seguenti fasi: - collection(...)- collection_group(...)- database()
|
datastore.entities.get
|
executePipeline (RPC)con una delle seguenti fasi: - documents(...) |
datastore.entities.get
|
Aggiornamento o trasformazione di write (RPC) con la precondizione exists impostata su false |
datastore.entities.create |
Aggiornamento o trasformazione di write (RPC) con la precondizione exists impostata su true |
datastore.entities.update |
Aggiornamento o trasformazione di write (RPC) senza precondizione |
datastore.entities.create |
write (RPC) elimina |
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.createSe la tua richiesta
Se vuoi verificare se i binding dei tag sono stati impostati correttamente elencandoli, sono necessarie le seguenti autorizzazioni aggiuntive:
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
| ripristina | datastore.backups.restoreDatabase |
clone |
datastore.databases.cloneSe la tua richiesta
Se vuoi verificare se i binding dei tag sono stati impostati correttamente elencandoli, sono necessarie le seguenti autorizzazioni aggiuntive:
|
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
projects.databases.backupschedules |
|
| get | datastore.backupSchedules.get |
| list | datastore.backupSchedules.list |
| create | datastore.backupSchedules.create |
| update | datastore.backupSchedules.update |
| elimina | datastore.backupSchedules.delete |
projects.locations.backups |
|
| get | datastore.backups.get |
| list | datastore.backups.list |
| elimina | datastore.backups.delete |
Ruoli predefiniti
Con IAM, ogni metodo dell'API Firestore richiede che l'account che effettua la richiesta API disponga delle autorizzazioni appropriate per utilizzare la risorsa. Le autorizzazioni vengono concesse impostando policy che assegnano ruoli a un utente, un gruppo o un service account. Oltre ai ruoli primitivi proprietario, editor e visualizzatore, puoi concedere i ruoli Firestore agli utenti del tuo progetto.
La tabella seguente elenca i ruoli IAM di Firestore. Puoi concedere più ruoli a un utente, un gruppo o un service account.
| Ruolo | Autorizzazioni | Descrizione |
|---|---|---|
roles/datastore.owner |
appengine.applications.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
Accesso completo a Firestore. |
roles/datastore.user |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.indexes.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list |
Accesso in lettura/scrittura ai dati in un database Firestore. Destinato agli sviluppatori di applicazioni e ai service account. |
roles/datastore.viewer |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.indexes.getdatastore.indexes.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get |
Accesso in lettura a tutte le risorse Firestore. |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
Accesso completo per la gestione di importazioni ed esportazioni. |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
Accesso completo per gestire le operazioni collettive. |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.indexes.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
Accesso completo per la gestione delle definizioni di indice. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
Accesso completo alle scansioni di Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.backupSchedules.list |
Accesso in lettura alle pianificazioni dei backup in un database Firestore. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
Accesso completo alle pianificazioni dei backup in un database Firestore. |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
Accesso in lettura alle informazioni di backup in una località Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
Accesso completo ai backup in una posizione Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
Possibilità di ripristinare un backup di Firestore in un nuovo database. Questo ruolo consente anche di creare nuovi database, non necessariamente ripristinando da un backup. |
roles/datastore.cloneAdmin |
datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
Possibilità di clonare un database Firestore in un nuovo database. Questo ruolo consente anche di creare nuovi database, non necessariamente tramite clonazione. |
roles/datastore.statisticsViewer |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get |
Accesso in lettura a Insight, Statistiche e scansioni di Key Visualizer. |
Ruoli personalizzati
Se i ruoli predefiniti non soddisfano i tuoi requisiti aziendali, puoi definire ruoli personalizzati con le autorizzazioni che specifichi:
Ruoli richiesti per creare e gestire i tag
Se un tag è rappresentato nelle azioni di creazione o ripristino, sono necessari alcuni ruoli. Per ulteriori dettagli sulla creazione di coppie chiave-valore dei tag prima di associarle alle risorse del database, consulta Creare e gestire i tag.
Sono richieste le seguenti autorizzazioni elencate.
Visualizza tag
datastore.databases.listTagBindingsdatastore.databases.listEffectiveTags
Gestire i tag sulle risorse
Per la risorsa di database a cui stai collegando il valore del tag è necessaria la seguente autorizzazione.
datastore.databases.createTagBinding
Autorizzazioni
La tabella seguente elenca le autorizzazioni supportate da Firestore.
| Nome autorizzazione database | Descrizione | |
|---|---|---|
datastore.databases.get |
Avvia o esegui il rollback di una transazione. | |
datastore.databases.import |
Importa entità in un database. | |
datastore.databases.export |
Esporta entità da un database. | |
datastore.databases.bulkDelete |
Elimina in blocco le entità da un database. | |
datastore.databases.getMetadata |
Leggi i metadati da un database. | |
datastore.databases.list |
Elenca i database in un progetto. | |
datastore.databases.create |
Crea un database. | |
datastore.databases.update |
Aggiorna un database. | |
datastore.databases.delete |
Elimina un database. | |
datastore.databases.clone |
Clona un database. | |
datastore.databases.createTagBinding |
Crea un'associazione di tag per un database. | |
datastore.databases.deleteTagBinding |
Elimina un'associazione di tag per un database. | |
datastore.databases.listTagBindings |
Elenca tutti i binding dei tag per un database. | |
datastore.databases.listEffectiveTagBindings |
Elenca i binding dei tag efficaci per un database. | |
| Nome autorizzazione entità | Descrizione | |
datastore.entities.create |
Crea un documento. | |
datastore.entities.delete |
Eliminare un documento. | |
datastore.entities.get |
Leggere un documento. | |
datastore.entities.list |
Elenca i nomi dei documenti in un progetto. ( datastore.entities.get è necessario per accedere ai dati del documento.) |
|
datastore.entities.update |
Aggiorna un documento. | |
| Nome autorizzazione indice | Descrizione | |
datastore.indexes.create |
Crea un indice. | |
datastore.indexes.delete |
Eliminare un indice. | |
datastore.indexes.get |
Leggi i metadati da un indice. | |
datastore.indexes.list |
Elenca gli indici in un progetto. | |
datastore.indexes.update |
Aggiorna un indice. | |
| Nome autorizzazione operazione | Descrizione | |
datastore.operations.cancel |
Annulla un'operazione a lunga esecuzione. | |
datastore.operations.delete |
Elimina un'operazione a lunga esecuzione. | |
datastore.operations.get |
Recupera l'ultimo stato di un'operazione a lunga esecuzione. | |
datastore.operations.list |
Elenca operazioni a lunga esecuzione. | |
| Nome autorizzazione progetto | Descrizione | |
resourcemanager.projects.get |
Sfoglia le risorse del progetto. | |
resourcemanager.projects.list |
Elenca i progetti di proprietà. | |
| Nome dell'autorizzazione di accesso alla posizione | Descrizione | |
datastore.locations.get |
Visualizza i dettagli di una posizione del database. Obbligatorio per creare un nuovo database. | |
datastore.locations.list |
Elenca le posizioni del database disponibili. Obbligatorio per creare un nuovo database. | |
| Nome autorizzazione Key Visualizer | Descrizione | |
datastore.keyVisualizerScans.get |
Visualizza i dettagli sulle scansioni di Key Visualizer. | |
datastore.keyVisualizerScans.list |
Elenca le scansioni di Key Visualizer disponibili. | |
| Nome autorizzazione pianificazione di backup | Descrizione | |
datastore.backupSchedules.get |
Visualizza i dettagli di una pianificazione dei backup. | |
datastore.backupSchedules.list |
Elenca le pianificazioni di backup disponibili. | |
datastore.backupSchedules.create |
Crea una pianificazione dei backup. | |
datastore.backupSchedules.update |
Aggiorna una pianificazione del backup. | |
datastore.backupSchedules.delete |
Elimina una pianificazione del backup. | |
| Nome autorizzazione di backup | Descrizione | |
datastore.backups.get |
Visualizza i dettagli di un backup. | |
datastore.backups.list |
Elenca i backup disponibili. | |
datastore.backups.delete |
Eliminare un backup. | |
datastore.backups.restoreDatabase |
Ripristina un database da un backup. | |
| Nome autorizzazione approfondimenti | Descrizione | |
datastore.insights.get |
Ottenere approfondimenti su una risorsa |
Latenza della modifica del ruolo
Firestore memorizza nella cache le autorizzazioni IAM per 5 minuti, quindi l'applicazione di una modifica al ruolo richiede fino a 5 minuti.
Gestisci IAM per Firestore
Puoi ottenere e impostare i criteri IAM utilizzando la console Google Cloud , l'API IAM o lo strumento a riga di comando gcloud. Per maggiori dettagli, consulta
Concessione, modifica e revoca dell'accesso ai membri del progetto.
Configurare le autorizzazioni di accesso condizionale
Puoi utilizzare le condizioni IAM per definire e applicare il controllo dell'accesso condizionale.
Ad esempio, la seguente condizione assegna a un'entità il ruolo datastore.user
fino a una data specificata:
{
"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')"
}
}
Per scoprire come definire le condizioni IAM per l'accesso temporaneo, vedi Configurare l'accesso temporaneo.
Per scoprire come configurare le condizioni IAM per l'accesso a uno o più database, consulta Configurare le condizioni di accesso al database.
Dipendenza delle regole di sicurezza da IAM
Le regole di sicurezza di Firestore per i client web/mobile dipendono dal seguente account di servizio e dal seguente binding IAM:
| Service account | Ruolo IAM |
|---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase configura automaticamente questo account di servizio per te. Se
rimuovi il ruolo firebaserules.system da questoaccount di serviziot, le tue regole di sicurezza
negheranno tutte le richieste. Per ripristinare questo binding IAM,
utilizza il seguente comando gcloud CLI:
gcloud projects add-iam-policy-binding project_id \ --member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \ --role=roles/firebaserules.system
Per determinare project_id e project_number, consulta Identificazione dei progetti.
Utilizza Google Cloud CLI anziché la console Google Cloud , perché il ruolofirebaserules.system è nascosto nella console per impostazione predefinita.
Passaggi successivi
- Scopri di più su IAM.
- Concedi ruoli IAM.
- Scopri di più sull'autenticazione.