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
- Otwórz konsolę Firebase i wybierz swój projekt.
- 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ł.
- 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:
- Utwórz plik reguł (opcjonalnie)
- Utwórz zestaw reguł
- 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.`);