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
datastore.entities.update
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
datastore.entities.update
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
datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runAggregationQuery datastore.entities.get
datastore.entities.list
runQuery datastore.entities.get
datastore.entities.list
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
datastore.entities.update
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 esegui il 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 del 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 a 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 delle regole di sicurezza su IAM

Regole di sicurezza di Firestore per i client mobile/web dipendono dal seguente account di servizio e l'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, 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