Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Gestisci e distribuisci le regole di sicurezza 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 CLI di Firebase, 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

Cloud Storage

// 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 che desideri.

Distribuisci i tuoi aggiornamenti

Dopo aver aggiornato e testato le 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

Cloud Storage

// 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 Realtime Database , Cloud Firestore o Storage dalla navigazione del prodotto, quindi fai clic su Rules 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 sicuro 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 utilizzi Admin SDK per distribuire le regole, assicurati di evitare condizioni di competizione 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.

Nota 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);

Lo 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 di Realtime Database con Admin SDK, utilizzare i getRules() e setRules() di admin.database . Puoi recuperare le serie 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.`);