Sicurezza delle librerie client server
Quando utilizzi le librerie client server per Firestore, puoi gestire l'accesso alle risorse con Identity and Access Management (IAM). IAM consente di concedere un accesso più granulare a risorse della piattaforma Google Cloud specifiche e impedisce l'accesso indesiderato ad altre risorse. Questa pagina descrive le autorizzazioni e i ruoli IAM di Firestore. Per una descrizione dettagliata di IAM, leggi la documentazione IAM.
IAM consente di adottare il principio di sicurezza del privilegio minimo, in modo da concedere solo l'accesso necessario alle risorse.
IAM consente di controllare chi (utente) dispone dell'autorizzazione quale (ruolo) per quali risorse impostando i criteri IAM.
I criteri IAM concedono uno o più ruoli a un utente, concedendogli determinate autorizzazioni. Ad esempio, puoi concedere il ruolo datastore.indexAdmin
a un utente, che gli consente di creare, modificare, eliminare, elencare o visualizzare indici.
Autorizzazioni e ruoli
Questa sezione riassume le autorizzazioni e i ruoli supportati da Firestore.
Autorizzazioni richieste per i metodi API
Nella tabella seguente sono elencate le autorizzazioni di cui il chiamante deve disporre per eseguire ciascuna azione:
Metodo | Autorizzazioni obbligatorie |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
beginTransaction |
datastore.databases.get |
Aggiorna o trasforma commit con precondizione esistente impostata su false |
datastore.entities.create |
Aggiorna o trasforma commit con precondizione esistente impostata su true
| datastore.entities.update |
commit 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 |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runQuery |
datastore.entities.get |
Aggiorna o trasforma write (RPC) con precondizione esistente impostata su false |
datastore.entities.create |
Aggiorna o trasforma write (RPC) con precondizione esistente impostata su true |
datastore.entities.update |
write (RPC) 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 |
|
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 |
crea | 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 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 utente, un gruppo o un account di servizio. Oltre ai ruoli originari, proprietario, editor e visualizzatore, puoi concedere ruoli Firestore agli utenti del progetto.
La tabella seguente elenca i ruoli IAM di Firestore. Puoi concedere più ruoli a un utente, un gruppo o un account 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.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.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 località Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.get datastore.backups.list datastore.backups.delete |
Accesso completo ai backup in una località 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 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 requisiti aziendali, puoi definire ruoli personalizzati con autorizzazioni specificate da te:
Autorizzazioni
Nella tabella seguente sono elencate le autorizzazioni supportate da Firestore.
Nome autorizzazione database | Descrizione | |
---|---|---|
datastore.databases.get |
Avvia o esegui il rollback di una transazione. | |
datastore.databases.import |
Importare entità in un database. | |
datastore.databases.export |
Esporta entità da un database. | |
datastore.databases.getMetadata |
Legge i metadati da un database. | |
datastore.databases.list |
Elenca i database in un progetto. | |
datastore.databases.create |
Creare un database. | |
datastore.databases.update |
Aggiorna 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 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 di un progetto. (Per accedere ai dati del documento è necessario datastore.entities.get .) |
|
datastore.entities.update |
Aggiornare un documento. | |
Nome autorizzazione indice | Descrizione | |
datastore.indexes.create |
Crea un indice. | |
datastore.indexes.delete |
Elimina un indice. | |
datastore.indexes.get |
Legge 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 |
Eliminare un'operazione a lunga esecuzione. | |
datastore.operations.get |
Restituisce 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 progetti di proprietà. | |
Nome autorizzazione di accesso alla posizione | Descrizione | |
datastore.locations.get |
Recupera i dettagli sulla posizione di un database. Obbligatorio per creare un nuovo database. | |
datastore.locations.list |
Elenca le località del database disponibili. Obbligatorio per creare un nuovo database. | |
Nome autorizzazione Key Visualizer | Descrizione | |
datastore.keyVisualizerScans.get |
Ottieni dettagli sulle scansioni di Key Visualizer. | |
datastore.keyVisualizerScans.list |
Elenca le scansioni di Key Visualizer disponibili. | |
Nome dell'autorizzazione Pianificazione backup | Descrizione | |
datastore.backupSchedules.get |
Ottenere informazioni dettagliate sulla pianificazione di un backup. | |
datastore.backupSchedules.list |
Elenca le pianificazioni di backup disponibili. | |
datastore.backupSchedules.create |
Crea una pianificazione del backup. | |
datastore.backupSchedules.update |
Aggiorna una pianificazione del backup. | |
datastore.backupSchedules.delete |
Eliminare una pianificazione del backup. | |
Nome autorizzazione backup | Descrizione | |
datastore.backups.get |
Ottenere dettagli su 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 modifica ruolo
Firestore memorizza nella cache le autorizzazioni IAM per 5 minuti, quindi sono necessari fino a 5 minuti prima che la modifica dei ruoli diventi effettiva.
Gestione di IAM di 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 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 informazioni su come definire le condizioni IAM per l'accesso temporaneo, consulta Configurare l'accesso temporaneo.
Per informazioni su come configurare le condizioni IAM per l'accesso a uno o più database, consulta Configurare le condizioni di accesso ai database.
Dipendenza delle regole di sicurezza su IAM
Le regole di sicurezza di Firestore per i client mobile/web dipendono dal seguente account di servizio e dall'associazione IAM:
Account di servizio | 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, le regole di sicurezza 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.
Utilizza 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.