Identity and Access Management (IAM)

Google Cloud offre Identity and Access Management (IAM), che ti permette di concedere un accesso più granulare a determinate risorse Google Cloud e impedisce l'accesso indesiderato ad altre risorse. In questa pagina vengono descritti i ruoli IAM di Firestore in modalità Datastore. Per una descrizione dettagliata di IAM, leggi la documentazione di IAM.

IAM consente di adottare il principio di sicurezza del privilegio minimo in modo da concedere solo l'accesso necessario alle tue risorse.

IAM consente di controllare chi (utenti) ha l'autorizzazione cosa (ruoli) per quali risorse impostando i criteri IAM. I criteri IAM concedono uno o più ruoli specifici a un utente, concedendo all'utente determinate autorizzazioni. Ad esempio, puoi concedere il ruolo datastore.indexAdmin a un utente, che potrà creare, modificare, eliminare, elencare o visualizzare gli indici.

Autorizzazioni e ruoli

Questa sezione riassume le autorizzazioni e i ruoli supportati da Firestore in modalità Datastore.

Autorizzazioni

La tabella seguente elenca le autorizzazioni supportate da Firestore in modalità Datastore.

Nome autorizzazione database Descrizione
datastore.databases.export Esporta le entità da un database.
datastore.databases.get Iniziare o eseguire il rollback di una transazione.
datastore.databases.import Importa le entità in un database.
datastore.databases.getMetadata Leggere i metadati da un database.
datastore.databases.list Elencare 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 Creare un'associazione di tag per un database.
datastore.databases.deleteTagBinding Eliminare un'associazione di tag per un database.
datastore.databases.listTagBindings Elenca tutte le associazioni di tag per un database.
datastore.databases.listEffectiveTagBindings Elenca associazioni di tag effettive per un database.
Nome autorizzazione entità Descrizione
datastore.entities.allocateIds Alloca ID per le chiavi con un percorso chiave incompleto.
datastore.entities.create Creare un'entità.
datastore.entities.delete Eliminare un'entità.
datastore.entities.get Lettura di un'entità.
datastore.entities.list Elenca le chiavi delle entità in un progetto.
(Per accedere ai dati delle entità è necessario datastore.entities.get.)
datastore.entities.update Aggiorna un'entità.
Nome autorizzazione indice Descrizione
datastore.indexes.create Crea un indice.
datastore.indexes.delete Eliminare un indice.
datastore.indexes.get Leggere i metadati di un indice.
datastore.indexes.list Elenca gli indici in un progetto.
datastore.indexes.update Aggiornare un indice.
Nome autorizzazione spazio dei nomi Descrizione
datastore.namespaces.get Recupera i metadati da uno spazio dei nomi.
datastore.namespaces.list Elencare gli spazi dei nomi di un progetto.
Nome autorizzazione operazione Descrizione
datastore.operations.cancel Annulla un'operazione a lunga esecuzione.
datastore.operations.delete Eliminare un'operazione a lunga esecuzione.
datastore.operations.get Visualizza 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 statistiche Descrizione
datastore.statistics.get Recupera le entità delle statistiche.
datastore.statistics.list Elenca le chiavi delle entità delle statistiche.
(Per accedere ai dati delle entità delle statistiche, è necessaria la proprietà datastore.statistics.get).
Nome autorizzazione App Engine Descrizione
appengine.applications.get Accesso in sola lettura a tutte le impostazioni e alla configurazione delle applicazioni di App Engine.
Nome autorizzazione posizione Descrizione
datastore.locations.get Visualizza dettagli sulla località del database. necessaria per creare un nuovo database.
datastore.locations.list Elenca le località dei database disponibili. necessaria per creare un nuovo database.
Nome autorizzazione Key Visualizer Descrizione
datastore.keyVisualizerScans.get Visualizza i dettagli delle 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 per il backup.
datastore.backupSchedules.list Elenca le pianificazioni di backup disponibili.
datastore.backupSchedules.create Crea una pianificazione di backup.
datastore.backupSchedules.update Aggiorna una pianificazione di backup.
datastore.backupSchedules.delete Eliminare una pianificazione del backup.
Nome autorizzazione 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.

Ruoli predefiniti

Con IAM, ogni metodo dell'API Datastore richiede che l'account che effettua la richiesta API disponga delle autorizzazioni appropriate per utilizzare la risorsa. Le autorizzazioni vengono concesse impostando criteri che assegnano ruoli a un utente, un gruppo o un account di servizio. Oltre ai ruoli di base, Proprietario, Editor e Visualizzatore, puoi concedere i ruoli Firestore in modalità Datastore agli utenti del progetto.

La tabella seguente elenca i ruoli IAM di Firestore in modalità Datastore. Puoi concedere più ruoli a un account utente, gruppo o servizio.

Ruolo Autorizzazioni Descrizione
roles/datastore.owner appengine.applications.get
datastore.*
resourcemanager.projects.get
resourcemanager.projects.list
Accesso completo all'istanza di database.
Per l'accesso Amministratore Datastore, concedi il ruolo appengine.appAdmin all'entità.
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 in modalità Datastore. Destinati 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 del database in modalità Datastore.
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 di backup in un database in modalità Datastore.
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 di backup in un database in modalità Datastore.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Accesso in lettura alle informazioni di backup in una posizione in modalità Datastore.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Accesso completo ai backup in una posizione in modalità Datastore.
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 in modalità Datastore in un nuovo database. Inoltre, questo ruolo consente di creare nuovi database, non necessariamente ripristinandoli da un backup.

Ruoli personalizzati

Se i ruoli predefiniti non soddisfano i tuoi requisiti aziendali, puoi definire ruoli personalizzati con autorizzazioni specificate:

Autorizzazioni richieste per i metodi API

La tabella seguente elenca le autorizzazioni di cui il chiamante deve disporre per chiamare ciascun metodo:

Metodo Autorizzazioni richieste
allocateIds datastore.entities.allocateIds
beginTransaction datastore.databases.get
commit per un inserto datastore.entities.create
commit per una carica datastore.entities.create
datastore.entities.update
commit per un aggiornamento datastore.entities.update
commit per un eliminazione datastore.entities.delete
commit per una ricerca datastore.entities.get

Per una ricerca correlata a metadati o statistiche, vedi Autorizzazioni richieste per metadati e statistiche.
commit per una query datastore.entities.list
datastore.entities.get (se la query non è una query solo su chiavi)

Per una query relativa ai metadati o alle statistiche, vedi Autorizzazioni richieste per metadati e statistiche.
lookup datastore.entities.get

Per una ricerca correlata a metadati o statistiche, vedi Autorizzazioni richieste per metadati e statistiche.
rollback datastore.databases.get
runQuery datastore.entities.list
datastore.entities.get (se la query non è una query solo su chiavi)

Per una query relativa ai metadati o alle statistiche, vedi Autorizzazioni richieste per metadati e statistiche.
runQuery con una query senza tipo datastore.entities.get
datastore.entities.list
datastore.statistics.get
datastore.statistics.list

Autorizzazioni richieste per metadati e statistiche

Nella tabella seguente sono elencate le autorizzazioni che il chiamante deve chiamare per i metodi su Metadati e Statistiche.

Metodo Autorizzazioni richieste
lookup delle entità con nomi di tipo corrispondenti a __Stat_*__ datastore.statistics.get
runQuery utilizza tipi con nomi corrispondenti a __Stat_*__ datastore.statistics.get
datastore.statistics.list
runQuery utilizzando il tipo __namespace__ datastore.namespaces.get
datastore.namespaces.list

Ruoli obbligatori per creare un'istanza di database in modalità Datastore

Per creare una nuova istanza del database in modalità Datastore, devi disporre del ruolo Proprietario o del ruolo Proprietario Datastore.

I database in modalità Datastore richiedono un'applicazione App Engine attiva. Se il progetto non ha un'applicazione, Firestore in modalità Datastore ne crea una per te. In questo caso, devi disporre dell'autorizzazione appengine.applications.create dal ruolo Proprietario o da un ruolo personalizzato IAM contenente l'autorizzazione.

Latenza del cambio di ruolo

Firestore in modalità Datastore memorizza nella cache le autorizzazioni IAM per 5 minuti, quindi saranno necessari fino a 5 minuti prima che la modifica del ruolo diventi effettiva.

Gestione di IAM

Puoi ottenere e impostare i criteri IAM utilizzando la console Google Cloud, i metodi IAM o Google Cloud CLI.

Condizioni IAM

Puoi utilizzare le condizioni IAM per definire e applicare forzatamente 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.

Passaggi successivi