Sicurezza per le librerie client server
Quando utilizzi le librerie client server per 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 di Google Cloud Platform e impedisce l'accesso indesiderato ad altre risorse. Questa pagina descrive le autorizzazioni e i ruoli IAM per Firestore. Per una descrizione dettagliata di IAM, leggi la documentazione di IAM.
IAM consente di adottare il principio di sicurezza del privilegio minimo, quindi concedi solo l'accesso necessario alle tue risorse.
IAM consente di controllare chi (utente) ha quale (ruolo) per quali risorse impostando i criteri IAM.
I criteri IAM concedono uno o più ruoli a un utente, concedendo all'utente determinate autorizzazioni. Ad esempio, puoi concedere a un utente il ruolo datastore.indexAdmin
, che consente di creare, modificare, eliminare, elencare o visualizzare gli indici.
Autorizzazioni e ruoli
Questa sezione riepiloga le autorizzazioni e i ruoli supportati da Firestore.
Autorizzazioni obbligatorie per i metodi API
Nella tabella che segue vengono elencate le autorizzazioni che il chiamante deve eseguire per ogni azione:
Metodo | Autorizzazioni obbligatorie |
---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
beginTransaction |
datastore.databases.get |
Aggiornamento o trasformazione di commit con precondizioni esistenti impostato su false |
datastore.entities.create |
Aggiornamento o trasformazione di commit con precondizioni esistenti impostato su true
| datastore.entities.update |
commit aggiornare o trasformare senza precondizioni
| 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 |
Aggiornamento o trasformazione di write (RPC) con precondizioni esistenti impostato su false |
datastore.entities.create |
Aggiornamento o trasformazione di write (RPC) con precondizioni esistenti impostato su true |
datastore.entities.update |
write (RPC) aggiornare o trasformare senza precondizioni |
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 |
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
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 i criteri che assegnano i ruoli a un account utente, gruppo o servizio. Oltre ai ruoli originari, proprietario, editor e visualizzatore, puoi concedere ruoli di Firestore agli utenti del tuo progetto.
La tabella seguente elenca i ruoli IAM di Firestore. 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 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. |
Ruoli personalizzati
Se i ruoli predefiniti non soddisfano i tuoi requisiti aziendali, puoi definire i tuoi ruoli personalizzati con le autorizzazioni specificate:
Autorizzazioni
La tabella seguente elenca le autorizzazioni supportate da Firestore.
Nome autorizzazione database | Descrizione | |
---|---|---|
datastore.databases.get |
Iniziare o eseguire il rollback di una transazione. | |
datastore.databases.import |
Importa le entità in un database. | |
datastore.databases.export |
Esporta le entità da 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. | |
Nome autorizzazione entità | Descrizione | |
datastore.entities.create |
Creare un documento. | |
datastore.entities.delete |
Eliminare un documento. | |
datastore.entities.get |
Leggi 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 di indicizzazione | Descrizione | |
datastore.indexes.create |
Creare 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 operazione | Descrizione | |
datastore.operations.cancel |
Annullare 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 posizione | Descrizione | |
datastore.locations.get |
Visualizza i dettagli relativi alla posizione di un database. Obbligatorio per creare un nuovo database. | |
datastore.locations.list |
Elenca le località dei database disponibili. Obbligatorio per creare un nuovo database. |
Latenza di modifica dei ruoli
Firestore memorizza nella cache le autorizzazioni IAM per 5 minuti, quindi sono necessari fino a 5 minuti prima che una modifica del ruolo diventi effettiva.
Gestione 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
Concedere, modificare e revocare l'accesso ai membri del progetto.
Condizioni IAM
Puoi utilizzare le condizioni IAM per definire e applicare il 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, consulta Configurare l'accesso temporaneo.
Dipendenza della regola di sicurezza su IAM
Le regole di sicurezza di Firestore per i client web o per dispositivi mobili 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 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 le project_id e i 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.
- Concedere ruoli IAM.