Sicurezza per le librerie client del server
Quando utilizzi le librerie client del server per Firestore, puoi gestire alle tue risorse con Identity and Access Management (IAM). IAM ti consente di fornire un accesso più granulare a specifiche alle risorse della piattaforma Cloud e impedisce l'accesso indesiderato ad altre risorse. Questo vengono descritti i ruoli e le autorizzazioni IAM Firestore Per una descrizione dettagliata di IAM, leggi il documentazione IAM.
IAM consente di adottare principio di sicurezza del privilegio minimo, in modo da concedere solo l'accesso necessario alle tue risorse.
IAM consente di controllare chi (utente) ha quale (ruolo)
autorizzazione per quale risorse, impostando i criteri IAM.
I criteri IAM concedono uno o più ruoli a un utente, assegnandogli
alcune autorizzazioni. Ad esempio, puoi concedere l'autorizzazione datastore.indexAdmin
ruolo a un utente, il che consente a quest'ultimo di creare, modificare, eliminare, elencare o visualizzare
indici di appartenenza.
Autorizzazioni e ruoli
Questa sezione riassume le autorizzazioni e i ruoli che Firestore Google Cloud.
Autorizzazioni richieste per i metodi API
La tabella seguente elenca le autorizzazioni che il chiamante deve avere per eseguire ogni azione:
Metodo | Autorizzazioni obbligatorie |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
Aggiornamento o trasformazione di batchWrite con il valore exists precondition impostato su false |
datastore.entities.create |
Aggiornamento o trasformazione di batchWrite con il valore exists precondition impostato su true |
datastore.entities.create |
batchWrite si aggiorna o trasforma senza precondizione
| datastore.entities.create
|
beginTransaction |
datastore.databases.get |
Aggiornamento o trasformazione di commit con il valore exists precondition impostato su false |
datastore.entities.create |
Aggiornamento o trasformazione di commit con il valore exists precondition impostato su true
| datastore.entities.update |
commit si aggiorna o trasforma 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.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 |
Aggiornamento o trasformazione di write (RPC) con il valore exists precondition impostato su false |
datastore.entities.create |
Aggiornamento o trasformazione di write (RPC) con il valore exists precondition impostato su true |
datastore.entities.update |
write (RPC) si aggiorna o trasforma 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.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 |
create | 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 |
Ruoli predefiniti
Con IAM, ogni metodo API in Firestore richiede che l'account che effettua la richiesta API disponga delle autorizzazioni appropriate per utilizzare la risorsa. Le autorizzazioni vengono concesse impostando criteri che concedono ruoli a un account utente, gruppo o di servizio. Oltre ai ruoli originari, proprietario, editor e visualizzatore, puoi concedere ruoli Firestore agli utenti del tuo progetto.
La tabella seguente elenca le istanze IAM di Firestore ruoli. Puoi concedere più ruoli a un account utente, gruppo o di servizio.
Ruolo | Autorizzazioni | Descrizione |
---|---|---|
roles/datastore.owner |
appengine.applications.get datastore.* resourcemanager.projects.get resourcemanager.projects.list | Accesso completo a 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 |
Accesso in lettura/scrittura ai dati in un database Firestore. Destinato agli sviluppatori di applicazioni e agli account di servizio. |
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 |
Accesso in lettura a tutte le risorse 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 |
Accesso completo per la gestione di importazioni ed esportazioni. |
roles/datastore.indexAdmin |
appengine.applications.get datastore.databases.getMetadata datastore.indexes.* resourcemanager.projects.get resourcemanager.projects.list |
Accesso completo per la gestione delle definizioni di indice. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadata datastore.keyVisualizerScans.get datastore.keyVisualizerScans.list resourcemanager.projects.get resourcemanager.projects.list |
Accesso completo alle scansioni di Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.get datastore.backupSchedules.list |
Accesso in lettura alle pianificazioni dei backup in un 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 |
Accesso completo alle pianificazioni dei backup in un database Firestore. |
roles/datastore.backupsViewer |
datastore.backups.get datastore.backups.list |
Accesso in lettura alle informazioni di backup in una posizione Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Accesso completo ai backup in una posizione 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 |
Possibilità di ripristinare un backup di Firestore in un nuovo database. Questo ruolo consente anche di creare nuovi database, non necessariamente eseguendo il ripristino da un backup. |
Ruoli personalizzati
Se i ruoli predefiniti non soddisfano i tuoi requisiti aziendali, puoi definire ruoli personalizzati con autorizzazioni da te specificati:
Autorizzazioni
La tabella seguente elenca le autorizzazioni supportate da Firestore.
Nome autorizzazione database | Descrizione | |
---|---|---|
datastore.databases.get |
Avvia o rollback di una transazione. | |
datastore.databases.import |
Importa entità in un database. | |
datastore.databases.export |
Esporta 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 |
Creare un database. | |
datastore.databases.update |
Aggiornare un database. | |
datastore.databases.delete |
Eliminare 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 tutte le associazioni di tag per un database. | |
datastore.databases.listEffectiveTagBindings |
Elenca le associazioni di tag effettive 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 di un progetto. (Per accedere ai dati del documento è necessario datastore.entities.get .) |
|
datastore.entities.update |
Aggiorna un documento. | |
Nome autorizzazione indice | Descrizione | |
datastore.indexes.create |
Crea un indice. | |
datastore.indexes.delete |
Elimina 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 |
Annullare un'operazione a lunga esecuzione. | |
datastore.operations.delete |
Elimina un'operazione a lunga esecuzione. | |
datastore.operations.get |
Recupera lo stato più recente di un'operazione a lunga esecuzione. | |
datastore.operations.list |
Elenca le operazioni a lunga esecuzione. | |
Nome autorizzazione progetto | Descrizione | |
resourcemanager.projects.get |
Sfoglia le risorse nel progetto. | |
resourcemanager.projects.list |
Elenca i progetti di proprietà. | |
Nome autorizzazione di accesso alla posizione | Descrizione | |
datastore.locations.get |
Ottieni i dettagli sulla località di un database. Obbligatorio per la creazione un nuovo database. | |
datastore.locations.list |
Elenca le località disponibili dei database. Obbligatorio per la creazione un nuovo database. | |
Nome autorizzazione di Key Visualizer | Descrizione | |
datastore.keyVisualizerScans.get |
Ottieni dettagli sulle scansioni di Key Visualizer. | |
datastore.keyVisualizerScans.list |
Elenca le scansioni di Key Visualizer disponibili. | |
Nome autorizzazione pianificazione backup | Descrizione | |
datastore.backupSchedules.get |
Visualizza i dettagli di una pianificazione del backup. | |
datastore.backupSchedules.list |
Elenca le pianificazioni dei backup disponibili. | |
datastore.backupSchedules.create |
Crea una pianificazione del 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 |
Ripristinare un database da un backup. |
Latenza del cambio di ruolo
Firestore memorizza nella cache le autorizzazioni IAM per 5 minuti, quindi possono trascorrere fino a 5 minuti prima che la modifica del ruolo abbia effetto.
Gestione di Firestore IAM
Puoi recuperare e impostare i criteri IAM utilizzando la console Google Cloud,
l'API IAM o la
strumento a riga di comando gcloud
. Consulta:
Concessione, modifica e revoca dell'accesso ai membri del progetto
per maggiori dettagli.
Configurare le autorizzazioni di accesso condizionale
Puoi utilizzare le condizioni IAM per la definizione e l'applicazione del controllo dell'accesso condizionato.
Ad esempio, la seguente condizione assegna a un'entità datastore.user
fino alla 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, consulta Configurare l'accesso temporaneo.
Per scoprire come configurare le condizioni IAM per l'accesso a una o più vedi i database Configurare le condizioni di accesso al database.
Dipendenza della regola di sicurezza su IAM
Regole di sicurezza di Firestore per i client mobile/web dipendono dal seguente account di servizio e l'associazione 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 questo account di servizio,
regole rifiutano tutte le richieste. Per ripristinare questa associazione 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.
Usa Google Cloud CLI anziché la console Google Cloud
perché il ruolo firebaserules.system
è nascosto nella console per impostazione predefinita.
Passaggi successivi
- Scopri di più su IAM.
- Concedi ruoli IAM.
- Scopri di più sull'autenticazione.