Introduzione alle regole di sicurezza
Con le regole di sicurezza di Firestore, puoi concentrarti sulla creazione di un'esperienza utente ottimale senza dover gestire l'infrastruttura o scrivere codice di autenticazione e autorizzazione lato server.
Le regole di sicurezza forniscono controllo dell'accesso e la convalida dei dati in un formato semplice ma espressivo. Per creare sistemi di accesso basati su utenti e ruoli che mantengano al sicuro i dati degli utenti, devi utilizzare Firebase Authentication con le regole di sicurezza di Firestore.
Regole di sicurezza versione 2
A partire da maggio 2019, è disponibile la versione 2 delle regole di sicurezza di Firestore. La versione 2 delle regole modifica il comportamento dei caratteri jolly
ricorsivi {name=**}. Devi utilizzare la versione 2 se prevedi di utilizzare le query sui gruppi di raccolte. Devi attivare la versione 2 inserendo rules_version = '2'; come prima riga delle regole di sicurezza:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
Regole di scrittura
Scriverai e gestirai regole di sicurezza Firestore personalizzate in base al modello dei dati che crei per il database predefinito e per ogni database aggiuntivo nel tuo progetto.
Tutte le regole di sicurezza Firestore sono costituite da istruzioni match, che identificano i documenti nel tuo database, e da espressioni allow, che controllano l'accesso a questi documenti:
service cloud.firestore {
match /databases/{database}/documents {
match /<some_path>/ {
allow read, write: if <some_condition>;
}
}
}
Ogni richiesta di database da una libreria client mobile/web Firestore viene valutata in base alle regole di sicurezza prima di leggere o scrivere dati. Se le regole negano l'accesso a uno dei percorsi dei documenti specificati, l'intera richiesta non va a buon fine.
Di seguito sono riportati alcuni esempi di insiemi di regole di base. Sebbene queste regole siano valide, non sono consigliate per le applicazioni di produzione:
Autorizzazione richiesta
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Nega tutto
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Consenti tutto
// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
Il percorso {document=**} utilizzato negli esempi precedenti corrisponde a qualsiasi documento dell'intero database. Continua a leggere la guida per strutturare le regole di sicurezza per
scoprire come abbinare percorsi di dati specifici e lavorare con dati gerarchici.
Regole di test
Firestore fornisce un simulatore di regole che puoi utilizzare per testare il tuo set di regole. Puoi accedere al simulatore sia nella Google Cloud console sia nella Console Firebase.
Il simulatore di regole consente di simulare letture, scritture ed eliminazioni autenticate e non autenticate. Quando simuli una richiesta autenticata, puoi creare e visualizzare l'anteprima dei token di autenticazione di vari fornitori. Le richieste simulate vengono eseguite in base al set di regole nell'editor, non a quello di cui è stato eseguito il deployment.
Testare le regole nella console Google Cloud
Il simulatore di regole nella console Google Cloud è disponibile per Firestore in modalità Native nelle versioni Standard ed Enterprise.
Autorizzazioni obbligatorie
Per testare le regole di sicurezza nella console Google Cloud , devi disporre della seguente autorizzazione IAM:
firebaserules.rulesets.test
Per simulare una richiesta di database nella console Google Cloud :
- Nella console Google Cloud , vai alla pagina Database.
- Fai clic sull'ID del database che vuoi testare.
- Nel menu di navigazione, fai clic su Sicurezza.
- Fai clic sulla scheda Simulatore.
- Nell'elenco a discesa Tipo di simulazione, seleziona un tipo di operazione: get, create, update o delete.
- Nel campo Location (Posizione), inserisci il percorso del documento che vuoi testare (ad esempio
users/user_123). - (Facoltativo) Per le richieste create e update, fai clic su Crea documento per configurare il payload del documento simulato.
- (Facoltativo) Per simulare una richiesta autenticata, attiva Autenticazione, seleziona un provider di autenticazione (ad esempio google.com o Anonimo) e configura i campi del payload del token.
- Fai clic su Esegui.
Il riquadro di valutazione mostra se la richiesta è stata consentita o negata, gli elementi del report dettagliato per ogni condizione valutata e gli evidenziatori a livello di riga nell'editor di codice.
Testare le regole nella console Firebase
Per testare le regole nella console Firebase, vai a Database e storage > Firestore > scheda Regole. Fai clic su Sandbox delle regole per aprire le impostazioni del simulatore, seleziona le opzioni di simulazione e poi fai clic su Esegui.
Deployment delle regole
Prima di poter iniziare a utilizzare Firestore dalla tua app mobile, devi eseguire il deployment delle regole di sicurezza. Puoi eseguire il deployment delle regole nella console Firebase, nella console Google Cloud , utilizzando l'interfaccia a riga di comando di Firebase o con l'API REST di gestione di Firestore.
L'aggiornamento delle regole di sicurezza di Firestore può richiedere fino a un minuto per influire su nuove query e listener. Tuttavia, potrebbero essere necessari fino a 10 minuti per propagare completamente le modifiche e interessare gli ascoltatori attivi.
Utilizzare la console Firebase
Per configurare e implementare il primo insieme di regole per il database predefinito nel tuo progetto, vai alla scheda Database e spazio di archiviazione > Firestore > Regole nella console Firebase.
Se crei più database per il tuo progetto, puoi eseguire il deployment delle regole di sicurezza di Firestore per ogni database. Nella console Firebase, utilizza il selettore del database per passare dal database predefinito a eventuali database aggiuntivi.
Scrivi le regole nell'editor online, poi fai clic su Pubblica.
Utilizzare la Google Cloud console
Puoi gestire e implementare le regole di sicurezza di Firestore direttamente nella consoleGoogle Cloud . L'editor delle regole è disponibile per Firestore in modalità Native nelle versioni Standard ed Enterprise.
Autorizzazioni obbligatorie
Per gestire ed eseguire il deployment delle regole di sicurezza nella console Google Cloud , devi disporre delle seguenti autorizzazioni IAM:
firebaserules.releases.createfirebaserules.releases.deletefirebaserules.releases.updatefirebaserules.rulesets.createfirebaserules.rulesets.deletefirebaserules.rulesets.listfirebaserules.rulesets.test(obbligatorio per utilizzare il simulatore di regole)
Per eseguire il deployment delle regole nella console Google Cloud :
- Nella console Google Cloud , vai alla pagina Database.
- Fai clic sull'ID del database che vuoi gestire.
- Nel menu di navigazione, fai clic su Sicurezza.
- Fai clic sulla scheda Regole Firestore.
- Nell'editor delle regole, visualizza le tue regole. Per modificare, fai clic su Nuovo insieme di regole o Clona insieme di regole, quindi modifica le regole.
- Fai clic su Pubblica per implementare le modifiche.
Puoi anche visualizzare i ruleset precedenti nella sequenza temporale e clonarli o ripristinarli.
Utilizza l'interfaccia a riga di comando di Firebase
Puoi anche eseguire il deployment delle regole utilizzando la Firebase CLI. L'utilizzo della CLI ti consente di mantenere le regole sotto il controllo della versione con il codice dell'applicazione e di eseguire il deployment delle regole nell'ambito del processo di deployment esistente.
// Set up Firestore in your project directory, creates a .rules file
firebase init firestore
// Edit the generated .rules file to your desired security rules
// ...
// Deploy rules for all configured databases
firebase deploy --only firestore
Passaggi successivi
- Scopri come strutturare le regole di sicurezza.
- Scrivi condizioni per le regole di sicurezza personalizzate.
- Leggi il riferimento alle regole di sicurezza.