Google is committed to advancing racial equity for Black communities. See how.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Zarządzaj regułami zabezpieczeń Firebase i wdrażaj je

Użyj interfejsu wiersza polecenia Firebase

Edytuj i wdrażaj reguły przy użyciu interfejsu wiersza polecenia Firebase . Korzystanie z interfejsu wiersza polecenia umożliwia zachowanie reguł pod kontrolą wersji za pomocą kodu aplikacji i wdrażanie reguł w ramach istniejącego procesu wdrażania.

Wygeneruj plik konfiguracyjny

Konfigurując projekt Firebase za pomocą interfejsu wiersza polecenia .rules plik konfiguracyjny .rules w katalogu projektu. Użyj tego polecenia, aby rozpocząć konfigurowanie projektu Firebase:

Cloud Firestore

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

Baza danych czasu rzeczywistego

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

Magazyn w chmurze

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

Edytuj i aktualizuj swoje reguły

Edytuj swoje reguły bezpośrednio w pliku konfiguracyjnym .rules . Upewnij się, że wszelkie zmiany wprowadzone w interfejsie wiersza polecenia Firebase są odzwierciedlone w konsoli Firebase lub że konsekwentnie wprowadzasz aktualizacje za pomocą konsoli Firebase lub interfejsu wiersza polecenia Firebase. W przeciwnym razie możesz nadpisać wszelkie aktualizacje wprowadzone w konsoli Firebase.

Przetestuj swoje aktualizacje

Użyj emulatora Firebase, aby przetestować aktualizacje lokalnie i upewnić się, że reguły aplikacji zachowują się tak, jak chcesz.

Wdróż aktualizacje

Po zaktualizowaniu i przetestowaniu reguł wdróż je w środowisku produkcyjnym. Użyj następujących poleceń, aby selektywnie wdrożyć same reguły lub wdrożyć je w ramach normalnego procesu wdrażania.

Cloud Firestore

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

Baza danych czasu rzeczywistego

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

Magazyn w chmurze

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

Użyj konsoli Firebase

Możesz także edytować i wdrażać reguły z konsoli Firebase.

Edytuj i aktualizuj swoje reguły

  1. Otwórz konsolę Firebase i wybierz swój projekt.
  2. Następnie w nawigacji produktu wybierz opcję Baza danych czasu rzeczywistego , Cloud Firestore lub Pamięć masowa, a następnie kliknij opcję Reguły, aby przejść do edytora reguł.
  3. Edytuj swoje reguły bezpośrednio w edytorze.

Przetestuj swoje aktualizacje

Możesz przetestować zachowanie reguł bezpośrednio w konsoli Firebase, korzystając z symulatora reguł . Otwórz ekran symulatora w edytorze reguł, zmodyfikuj ustawienia i kliknij Uruchom . Poszukaj wiadomości z potwierdzeniem u góry edytora.

Wdróż aktualizacje

Gdy upewnisz się, że aktualizacje są zgodne z Twoimi oczekiwaniami, kliknij Opublikuj .

Użyj pakietu Admin SDK

Za pomocą pakietu Admin SDK dla Node.js możesz programowo tworzyć i wdrażać reguły zabezpieczeń oraz zarządzać nimi. Dzięki temu dostępowi programowemu możesz:

  • Wdrażaj niestandardowe narzędzia, skrypty, pulpity nawigacyjne i potoki CI / CD do zarządzania regułami.
  • Łatwiej zarządzaj regułami w wielu projektach Firebase.

Podczas programowego aktualizowania reguł bardzo ważne jest, aby unikać niezamierzonych zmian w kontroli dostępu do aplikacji. Napisz kod pakietu Admin SDK, mając na uwadze przede wszystkim bezpieczeństwo, zwłaszcza podczas aktualizowania lub wdrażania reguł.

Inną ważną rzeczą, o której należy pamiętać, jest to, że pełne wdrożenie reguł zabezpieczeń Firebase zajmuje kilka minut. Korzystając z pakietu Admin SDK do wdrażania reguł, unikaj sytuacji wyścigu, w których Twoja aplikacja natychmiast polega na regułach, których wdrożenie nie zostało jeszcze zakończone. Jeśli Twój przypadek użycia wymaga częstych aktualizacji reguł kontroli dostępu, rozważ rozwiązania korzystające z Cloud Firestore, które ma na celu zmniejszenie warunków wyścigu pomimo częstych aktualizacji.

Zwróć również uwagę na te ograniczenia:

  • Reguły muszą być mniejsze niż 64 KB tekstu zakodowanego w formacie UTF-8 podczas serializacji.
  • Projekt może mieć maksymalnie 2500 wdrożonych zestawów reguł. Po osiągnięciu tego limitu musisz usunąć niektóre stare zestawy reguł przed utworzeniem nowych.

Twórz i wdrażaj zestawy reguł Cloud Storage lub Cloud Firestore

Typowy przepływ pracy dotyczący zarządzania regułami bezpieczeństwa za pomocą pakietu Admin SDK może obejmować trzy oddzielne kroki:

  1. Utwórz plik reguł (opcjonalnie)
  2. Utwórz zestaw reguł
  3. Opublikuj lub wdróż nowy zestaw reguł

Pakiet SDK umożliwia połączenie tych kroków w jedno wywołanie interfejsu API dla reguł bezpieczeństwa Cloud Storage i Cloud Firestore. Na przykład:

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

Ten sam wzorzec działa w przypadku reguł Cloud Storage z releaseFirestoreRulesetFromSource() .

Alternatywnie możesz utworzyć plik reguł jako obiekt w pamięci, utworzyć zestaw reguł i wdrożyć zestaw reguł oddzielnie, aby uzyskać ściślejszą kontrolę nad tymi zdarzeniami. Na przykład:

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

Zaktualizuj zestawy reguł Bazy danych czasu rzeczywistego

Aby zaktualizować zestawy reguł bazy danych czasu rzeczywistego za pomocą getRules() Admin SDK, użyj getRules() i setRules() z admin.database . Możesz pobrać zestawy reguł w formacie JSON lub jako ciąg z dołączonymi komentarzami.

Aby zaktualizować zestaw reguł:

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

Zarządzaj zestawami reguł

Aby ułatwić zarządzanie dużymi zestawami reguł, pakiet Admin SDK umożliwia wyświetlenie listy wszystkich istniejących reguł za pomocą opcji admin.securityRules().listRulesetMetadata . Na przykład:

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

W przypadku bardzo dużych zestawów reguł, które z czasem osiągają limit 2500 reguł, można utworzyć logikę do usuwania najstarszych reguł w ustalonym cyklu czasu. Na przykład, aby usunąć WSZYSTKIE zestawy reguł wdrożone dłużej niż 30 dni:

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