Identity and Access Management (IAM)

Quando utilizzi le librerie client del server per Cloud 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 le autorizzazioni e i ruoli IAM per Cloud 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, consentendogli di creare, modificare, eliminare, elencare o visualizzare gli indici.

Autorizzazioni e ruoli

Questa sezione riepiloga le autorizzazioni e i ruoli supportati da Cloud 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
batchWrite aggiornamento o trasformazione senza precondizione datastore.entities.create
datastore.entities.update
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
commit aggiornamento o trasformazione senza precondizione datastore.entities.create
datastore.entities.update
Elimina commit 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
executePipeline (RPC)

con una delle seguenti fasi:
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
executePipeline (RPC)

con una delle seguenti fasi:
- documents(...)
datastore.entities.get
executePipeline (RPC)

con una delle seguenti fasi:
- update(...)
datastore.entities.update
executePipeline (RPC)

con una delle seguenti fasi:
- delete(...)
datastore.entities.delete
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
write (RPC) aggiornamento o trasformazione senza precondizione datastore.entities.create
datastore.entities.update
Elimina write (RPC) datastore.entities.delete
projects.databases.indexes
create datastore.schemas.create
delete datastore.schemas.delete
get datastore.schemas.get
list datastore.schemas.list
projects.databases
create datastore.databases.create

Se la richiesta create contiene un valore tags, sono necessarie le seguenti autorizzazioni aggiuntive:

  • datastore.databases.createTagBinding

Se vuoi verificare se le associazioni dei tag sono state impostate correttamente elencandole, sono necessarie le seguenti autorizzazioni aggiuntive:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
ripristina datastore.backups.restoreDatabase
clone datastore.databases.clone

Se la richiesta clone contiene un valore tags, sono necessarie le seguenti autorizzazioni aggiuntive:

  • datastore.databases.createTagBinding

Se vuoi verificare se le associazioni dei tag sono state impostate correttamente elencandole, sono necessarie le seguenti autorizzazioni aggiuntive:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
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 API in Cloud 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 di base, proprietario, editor e visualizzatore, puoi concedere i ruoli Cloud Firestore agli utenti del tuo progetto.

La tabella seguente elenca i ruoli IAM Cloud Firestore. Puoi concedere più ruoli a un utente, un gruppo o un service account.

Ruolo Autorizzazioni Descrizione
roles/datastore.owner appengine.applications.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
Accesso completo a Cloud Firestore.
roles/datastore.user appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.schemas.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 Cloud Firestore. Destinato a sviluppatori di applicazioni e service account.
roles/datastore.viewer appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.get
datastore.entities.list
datastore.schemas.get
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list

datastore.insights.get
Accesso in lettura a tutte le risorse Cloud 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.bulkAdmin resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.databases.bulkDelete
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
Accesso completo per gestire le operazioni collettive.
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.schemas.*

datastore.operations.list

datastore.operations.get

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 Cloud 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 Cloud Firestore.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Accesso in lettura alle informazioni di backup in una località Cloud Firestore.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Accesso completo ai backup in una località Cloud 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 Cloud Firestore in un nuovo database. Questo ruolo consente anche di creare nuovi database, non necessariamente tramite il ripristino da un backup.
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Possibilità di clonare un database Cloud Firestore in un nuovo database. Questo ruolo consente anche di creare nuovi database, non necessariamente tramite clonazione.
roles/datastore.statisticsViewer resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.insights.get
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
datastore.statistics.list
datastore.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 da te specificate:

Ruoli richiesti per creare e gestire i tag

Se un tag è rappresentato nelle azioni di creazione o ripristino, sono richiesti alcuni ruoli. Consulta Creazione e gestione dei tag per ulteriori dettagli sulla creazione di coppie chiave-valore dei tag prima di associarle alle risorse del database.

Sono richieste le seguenti autorizzazioni.

Visualizza tag
  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
Gestisci i tag sulle risorse

Per la risorsa di database a cui stai collegando il valore del tag è richiesta la seguente autorizzazione.

  • datastore.databases.createTagBinding

Autorizzazioni

La tabella seguente elenca le autorizzazioni supportate da Cloud Firestore.

Nome autorizzazione database Descrizione
datastore.databases.get Avviare o eseguire il rollback di una transazione.
datastore.databases.import Importare entità in un database.
datastore.databases.export Esporta le entità da un database.
datastore.databases.bulkDelete Eliminare collettivamente le entità da un database.
datastore.databases.getMetadata Leggere i metadati da un database.
datastore.databases.list Elenca i database di un progetto.
datastore.databases.create Crea un database.
datastore.databases.update Aggiornare un database.
datastore.databases.delete Elimina un database.
datastore.databases.clone Clonare 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 Elimina 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 Aggiornare un documento.
Nome autorizzazione indice Descrizione
datastore.schemas.create Crea un indice.
datastore.schemas.delete Elimina un indice.
datastore.schemas.get Leggi i metadati da un indice.
datastore.schemas.list Elenca gli indici di un progetto.
datastore.schemas.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 dell'autorizzazione per il progetto Descrizione
resourcemanager.projects.get Sfoglia le risorse nel progetto.
resourcemanager.projects.list Elenca i progetti di proprietà.
Nome dell'autorizzazione di accesso alla posizione Descrizione
datastore.locations.get Ottieni i dettagli sulla località di un database. Obbligatorio per creare un nuovo database.
datastore.locations.list Elenca le località dei database disponibili. Obbligatorio per creare un nuovo database.
Nome autorizzazione Key Visualizer Descrizione
datastore.keyVisualizerScans.get Scopri i dettagli sulle scansioni di Key Visualizer.
datastore.keyVisualizerScans.list Elenca le scansioni di Key Visualizer disponibili.
Nome autorizzazione per la pianificazione del 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 Insights Descrizione
datastore.insights.get Ottieni insight su una risorsa

Latenza della modifica del ruolo

Cloud Firestore memorizza nella cache le autorizzazioni IAM per 5 minuti, quindi l'applicazione di una modifica del ruolo richiede fino a 5 minuti.

Gestisci IAM Cloud Firestore

Puoi ottenere e impostare le policy 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.

Configura le autorizzazioni di accesso condizionale

Puoi utilizzare le condizioni IAM per definire e applicare il controllo degli accessi 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, consulta Configura l'accesso temporaneo.

Per scoprire come configurare le condizioni IAM per l'accesso a uno o più database, consulta Configura le condizioni di accesso al database.

Dipendenza delle regole di sicurezza da IAM

Cloud Firestore Security Rules per i client web/mobile dipendono dal seguente service account e dalla seguente associazione IAM:

Service account Ruolo IAM
service-project_number@firebase-rules.iam.gserviceaccount.com roles/firebaserules.system

Firebase configura automaticamente questo service account per te. Se rimuovi il ruolo firebaserules.system da questo service account, le regole di sicurezza rifiuteranno 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