Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Gestisci e distribuisci le regole di sicurezza di Firebase

Usa la Firebase CLI

Modifica e distribuisci le regole utilizzando la CLI di Firebase . L'utilizzo della CLI consente di mantenere le regole sotto il controllo della versione con il codice dell'applicazione e di distribuire le regole come parte del processo di distribuzione esistente.

Genera un file di configurazione

Quando configuri il tuo progetto Firebase utilizzando la Firebase CLI, crei un file di configurazione .rules nella directory del progetto. Utilizza il seguente comando per avviare la configurazione del tuo progetto Firebase:

Cloud Firestore

// Set up Firestore in your project directory, creates a .rules file
firebase init firestore

Database in tempo reale

// Set up Realtime Database in your project directory, creates a .rules file
firebase init database

Archiviazione nel cloud

// Set up Storage in your project directory, creates a .rules file
firebase init storage

Modifica e aggiorna le tue regole

Modifica le tue regole direttamente nel file di configurazione .rules . Assicurati che tutte le modifiche apportate nella CLI di Firebase si riflettano nella console di Firebase o di eseguire costantemente aggiornamenti utilizzando la console di Firebase o la CLI di Firebase. In caso contrario, potresti sovrascrivere eventuali aggiornamenti effettuati nella console Firebase.

Verifica i tuoi aggiornamenti

Usa l' emulatore Firebase per testare i tuoi aggiornamenti in locale e confermare che le regole della tua app mostrino il comportamento desiderato.

Distribuisci i tuoi aggiornamenti

Dopo aver aggiornato e testato le tue regole, distribuiscile nell'ambiente di produzione. Utilizzare i seguenti comandi per distribuire selettivamente le regole da sole o distribuirle come parte del normale processo di distribuzione.

Cloud Firestore

// Deploy your .rules file
firebase deploy --only firestore:rules

Database in tempo reale

// Deploy your .rules file
firebase deploy --only database

Archiviazione nel cloud

// Deploy your .rules file
firebase deploy --only storage

Usa la console Firebase

Puoi anche modificare e distribuire le regole dalla console Firebase.

Modifica e aggiorna le tue regole

  1. Apri la console Firebase e seleziona il tuo progetto.
  2. Quindi, seleziona Database in tempo reale , Cloud Firestore o Archiviazione dalla navigazione del prodotto, quindi fai clic su Regole per accedere all'editor delle regole.
  3. Modifica le tue regole direttamente nell'editor.

Verifica i tuoi aggiornamenti

Puoi testare il comportamento delle regole direttamente nella console Firebase, utilizzando il simulatore di regole . Apri la schermata del simulatore nell'editor delle regole, modifica le impostazioni e fai clic su Esegui . Cerca il messaggio di conferma nella parte superiore dell'editor.

Distribuisci i tuoi aggiornamenti

Quando sei soddisfatto che i tuoi aggiornamenti siano ciò che ti aspetti, fai clic su Pubblica .

Utilizza Admin SDK

Puoi utilizzare Admin SDK per Node.js per creare, gestire e distribuire le regole di sicurezza a livello di codice. Con questo accesso programmatico puoi:

  • Implementa strumenti personalizzati, script, dashboard e pipeline CI / CD per la gestione delle regole.
  • Gestisci le regole più facilmente in più progetti Firebase.

Quando si aggiornano le regole a livello di codice, è molto importante evitare di apportare modifiche involontarie al controllo di accesso per l'app. Scrivi il tuo codice SDK di amministrazione tenendo presente la sicurezza, soprattutto durante l'aggiornamento o la distribuzione delle regole.

Un'altra cosa importante da tenere a mente è che la distribuzione completa delle regole di sicurezza di Firebase richiede diversi minuti. Quando usi Admin SDK per distribuire le regole, assicurati di evitare race condition in cui la tua app si basa immediatamente su regole la cui distribuzione non è ancora completa. Se il tuo caso d'uso richiede aggiornamenti frequenti per le regole di controllo degli accessi, prendi in considerazione soluzioni che utilizzano Cloud Firestore, progettato per ridurre le condizioni di competizione nonostante gli aggiornamenti frequenti.

Notare anche questi limiti:

  • Le regole devono essere inferiori a 64 KiB di testo con codifica UTF-8 quando serializzate.
  • Un progetto può avere al massimo 2500 set di regole distribuite totali. Una volta raggiunto questo limite, è necessario eliminare alcuni vecchi set di regole prima di crearne di nuovi.

Crea e distribuisci set di regole Cloud Storage o Cloud Firestore

Un flusso di lavoro tipico per la gestione delle regole di sicurezza con Admin SDK potrebbe includere tre passaggi distinti:

  1. Crea un file di regole (facoltativo)
  2. Crea un set di regole
  3. Rilascia o distribuisci il nuovo set di regole

L'SDK fornisce un metodo per combinare questi passaggi in una singola chiamata API per le regole di sicurezza di Cloud Storage e Cloud Firestore. Per esempio:

    const source = `service cloud.firestore {
      match /databases/{database}/documents {
        match /carts/{cartID} {
          allow create: if request.auth != null && request.auth.uid == request.resource.data.ownerUID;
          allow read, update, delete: if request.auth != null && request.auth.uid == resource.data.ownerUID;
        }
      }
    }`;
    // Alternatively, load rules from a file
    // const fs = require('fs');
    // const source = fs.readFileSync('path/to/firestore.rules', 'utf8');

    await admin.securityRules().releaseFirestoreRulesetFromSource(source);

Questo stesso modello funziona per le regole di Cloud Storage con releaseFirestoreRulesetFromSource() .

In alternativa, è possibile creare il file delle regole come oggetto in memoria, creare la serie di regole e distribuire la serie di regole separatamente per un controllo più stretto di questi eventi. Per esempio:

    const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
    const rs = await admin.securityRules().createRuleset(rf);
    await admin.securityRules().releaseFirestoreRuleset(rs);

Aggiorna le regole del database in tempo reale

Per aggiornare i getRules() regole del database in tempo reale con Admin SDK, utilizzare i getRules() e setRules() di admin.database . È possibile recuperare set di regole in formato JSON o come stringa con commenti inclusi.

Per aggiornare un set di regole:

    const source = `{
      "rules": {
        "scores": {
          ".indexOn": "score",
          "$uid": {
            ".read": "$uid == auth.uid",
            ".write": "$uid == auth.uid"
          }
        }
      }
    }`;
    await admin.database().setRules(source);

Gestisci set di regole

Per aiutare a gestire set di regole di grandi dimensioni, Admin SDK consente di elencare tutte le regole esistenti con admin.securityRules().listRulesetMetadata . Per esempio:

    const allRulesets = [];
    let pageToken = null;
    while (true) {
      const result = await admin.securityRules().listRulesetMetadata(pageToken: pageToken);
      allRulesets.push(...result.rulesets);
      pageToken = result.nextPageToken;
      if (!pageToken) {
        break;
      }
    }

Per set di regole molto grandi che raggiungono il limite di 2500 regole nel tempo, è possibile creare logica per eliminare le regole più vecchie in un ciclo di tempo fisso. Ad esempio, per eliminare TUTTE le serie di regole distribuite per più di 30 giorni:

    const thirtyDays = new Date(Date.now() - THIRTY_DAYS_IN_MILLIS);
    const promises = [];
    allRulesets.forEach((rs) => {
      if (new Date(rs.crateTime) < thirtyDays) {
        promises.push(admin.securityRules().deleteRuleset(rs.name));
      }
    });
    await Promise.all(promises);
    console.log(`Deleted ${promises.length} rulesets.`);