Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Verwalten und Bereitstellen von Firebase-Sicherheitsregeln

Verwenden Sie die Firebase-CLI

Bearbeiten und Bereitstellen von Regeln mithilfe der Firebase-CLI . Durch die Verwendung der CLI können Sie Ihre Regeln mit Ihrem Anwendungscode unter Versionskontrolle halten und Regeln als Teil Ihres vorhandenen Bereitstellungsprozesses bereitstellen.

Generieren Sie eine Konfigurationsdatei

Wenn Sie Ihr Firebase-Projekt mithilfe der Firebase-CLI konfigurieren, erstellen Sie eine .rules in Ihrem Projektverzeichnis. Verwenden Sie den folgenden Befehl, um die Konfiguration Ihres Firebase-Projekts zu starten:

Cloud Firestore

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

Echtzeitdatenbank

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

Cloud-Speicher

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

Bearbeiten und aktualisieren Sie Ihre Regeln

Bearbeiten Sie Ihre Regeln direkt in der Konfigurationsdatei .rules . Stellen Sie sicher, dass alle Änderungen, die Sie an der Firebase-CLI vornehmen, in der Firebase-Konsole angezeigt werden oder dass Sie regelmäßig Aktualisierungen entweder über die Firebase-Konsole oder die Firebase-CLI vornehmen. Andernfalls können Sie alle in der Firebase-Konsole vorgenommenen Aktualisierungen überschreiben.

Testen Sie Ihre Updates

Verwenden Sie den Firebase-Emulator , um Ihre Updates lokal zu testen und zu bestätigen, dass die Regeln Ihrer App das gewünschte Verhalten aufweisen.

Stellen Sie Ihre Updates bereit

Sobald Sie Ihre Regeln aktualisiert und getestet haben, stellen Sie sie für die Produktion bereit. Verwenden Sie die folgenden Befehle, um Ihre Regeln selektiv allein oder als Teil Ihres normalen Bereitstellungsprozesses bereitzustellen.

Cloud Firestore

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

Echtzeitdatenbank

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

Cloud-Speicher

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

Verwenden Sie die Firebase-Konsole

Sie können Regeln auch über die Firebase-Konsole bearbeiten und bereitstellen.

Bearbeiten und aktualisieren Sie Ihre Regeln

  1. Öffnen Sie die Firebase-Konsole und wählen Sie Ihr Projekt aus.
  2. Wählen Sie dann in der Produktnavigation Echtzeitdatenbank , Cloud-Firestore oder Speicher aus und klicken Sie auf Regeln , um zum Regeleditor zu navigieren.
  3. Bearbeiten Sie Ihre Regeln direkt im Editor.

Testen Sie Ihre Updates

Sie können Ihre Regeln Verhalten direkt in der Konsole testen Firebase, die unter Verwendung von Regeln Simulator . Öffnen Sie den Simulator- Bildschirm im Regeleditor, ändern Sie die Einstellungen und klicken Sie auf Ausführen . Suchen Sie oben im Editor nach der Bestätigungsmeldung.

Stellen Sie Ihre Updates bereit

Wenn Sie zufrieden sind, dass Ihre Updates Ihren Erwartungen entsprechen, klicken Sie auf Veröffentlichen .

Verwenden Sie das Admin SDK

Mit dem Admin SDK für Node.js können Sie programmgesteuert Sicherheitsregeln erstellen, verwalten und bereitstellen. Mit diesem programmatischen Zugriff können Sie:

  • Implementieren Sie benutzerdefinierte Tools, Skripte, Dashboards und CI / CD-Pipelines zum Verwalten von Regeln.
  • Verwalten Sie Regeln einfacher über mehrere Firebase-Projekte hinweg.

Wenn Sie Regeln programmgesteuert aktualisieren, ist es sehr wichtig, unbeabsichtigte Änderungen an der Zugriffssteuerung für Ihre App zu vermeiden. Schreiben Sie Ihren Admin-SDK-Code unter Berücksichtigung der Sicherheit, insbesondere beim Aktualisieren oder Bereitstellen von Regeln.

Ein weiterer wichtiger Punkt ist, dass die vollständige Bereitstellung der Firebase-Sicherheitsregeln einige Minuten dauert. Vermeiden Sie bei der Verwendung des Admin SDK zum Bereitstellen von Regeln Rennbedingungen, unter denen Ihre App sofort auf Regeln angewiesen ist, deren Bereitstellung noch nicht abgeschlossen ist. Wenn für Ihren Anwendungsfall häufige Aktualisierungen erforderlich sind, um Zugriffssteuerungsregeln zu erhalten, sollten Sie Lösungen mit Cloud Firestore in Betracht ziehen, mit denen die Rennbedingungen trotz häufiger Aktualisierungen reduziert werden sollen.

Beachten Sie auch diese Grenzwerte:

  • Bei der Serialisierung müssen die Regeln kleiner als 64 KB UTF-8-codierter Text sein.
  • Ein Projekt kann höchstens 2500 bereitgestellte Regelsätze enthalten. Sobald dieses Limit erreicht ist, müssen Sie einige alte Regelsätze löschen, bevor Sie neue erstellen.

Erstellen und Bereitstellen von Cloud Storage- oder Cloud Firestore-Regelsätzen

Ein typischer Workflow zum Verwalten von Sicherheitsregeln mit dem Admin SDK kann drei diskrete Schritte umfassen:

  1. Erstellen Sie eine Regeldatei (optional)
  2. Erstellen Sie einen Regelsatz
  3. Geben Sie den neuen Regelsatz frei oder stellen Sie ihn bereit

Das SDK bietet eine Methode, um diese Schritte in einem einzigen API-Aufruf für Cloud Storage- und Cloud Firestore-Sicherheitsregeln zu kombinieren. Beispielsweise:

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

Das gleiche Muster funktioniert für Cloud-Speicherregeln mit releaseFirestoreRulesetFromSource() .

Alternativ können Sie die Regeldatei als speicherinternes Objekt erstellen, den Regelsatz erstellen und den Regelsatz separat bereitstellen, um diese Ereignisse genauer steuern zu können. Beispielsweise:

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

Aktualisieren Sie Regelsätze für Echtzeitdatenbanken

Verwenden Sie die getRules() und setRules() von admin.database , um getRules() Echtzeitdatenbanken mit dem Admin SDK zu admin.database . Sie können Regelsätze im JSON-Format oder als Zeichenfolge mit Kommentaren abrufen.

So aktualisieren Sie einen Regelsatz:

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

Regelsätze verwalten

Um die Verwaltung großer Regelsätze zu erleichtern, können Sie mit dem Admin SDK alle vorhandenen Regeln mit admin.securityRules().listRulesetMetadata . Beispielsweise:

    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;
      }
    }

Für sehr große Regelsätze, die im Laufe der Zeit das 2500-Regel-Limit erreichen, können Sie eine Logik erstellen, um die ältesten Regeln in einem festen Zeitzyklus zu löschen. So löschen Sie beispielsweise ALLE Regelsätze, die länger als 30 Tage bereitgestellt wurden:

    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.`);