Firebase udostępnia kilka narzędzi do zarządzania Rules, każde przydatne w konkretnych przypadkach, a każdy korzysta z tego samego backendu Firebase. Interfejs API do zarządzania regułami zabezpieczeń.
Niezależnie od tego, jakie narzędzie zostanie użyte do jego wywołania, interfejs API zarządzania:
- Przetwarza źródło reguł: zbiór reguł, zwykle plik kodu zawierający Wyciągi: Firebase Security Rules.
- Zapisuje źródło pozyskane jako stałą regułę.
- Śledzi wdrożenie każdego zestawu reguł w wersji. Bezpieczeństwo Firebase Usługi z włączoną regułą sprawdzają wersję dla projektu w celu oceny każdego żądania dla zabezpieczonego zasobu.
- Umożliwia przeprowadzanie składniowych i semantycznych testów zestawu reguł.
Użyj interfejsu wiersza poleceń Firebase
Za pomocą interfejsu wiersza poleceń Firebase możesz: przesyłać lokalne źródła i wdrażać wersje. Metoda wiersza poleceń Firebase Local Emulator Suite umożliwia przeprowadzenie pełnego lokalnego testowania źródeł.
Użycie interfejsu wiersza poleceń pozwala kontrolować wersję reguł za pomocą kodu aplikacji i reguł wdrażania.
Generowanie pliku konfiguracji
Podczas konfigurowania projektu Firebase za pomocą interfejsu wiersza poleceń Firebase
plik konfiguracji .rules
w katalogu projektu. Użyj następujących
aby rozpocząć konfigurowanie projektu Firebase:
Cloud Firestore
// Set up Firestore in your project directory, creates a .rules file firebase init firestore
Realtime Database
// 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
Edytowanie i aktualizowanie reguł
Edytuj źródło reguł bezpośrednio w pliku konfiguracji .rules
.
Upewnij się, że wszystkie zmiany wprowadzone w interfejsie wiersza poleceń Firebase zostały odzwierciedlone w Firebase lub regularnie wprowadzasz aktualizacje za pomocą Firebase lub interfejsu wiersza poleceń Firebase. W przeciwnym razie możesz zastąpić dowolną Aktualizacje wprowadzone w konsoli Firebase.
Testowanie aktualizacji
Local Emulator Suite udostępnia emulatory wszystkich reguł zabezpieczeń z włączonymi regułami zabezpieczeń usług. Mechanizm reguł zabezpieczeń każdego emulatora obsługuje zarówno składnię, i semantycznej oceny reguł, przez co sprawdzanie składniowe jest większe Oferty interfejsu Security Rules Management API.
Jeśli używasz interfejsu wiersza poleceń, ten pakiet jest doskonałym narzędziem do Firebase Security Rules i testowania. Aby przetestować aktualizacje, użyj narzędzia Local Emulator Suite lokalnie i upewnij się, że Rules działa w pobliżu.
Wdrażanie aktualizacji
Po zaktualizowaniu i przetestowaniu Rules wdróż źródła w produkcji.
W przypadku Cloud Firestore Security Rules powiąż pliki (.rules
) z plikami domyślnymi i
dodatkowych nazwanych baz danych, sprawdzając i aktualizując
firebase.json
plik.
Za pomocą tych poleceń możesz selektywnie wdrożyć model Rules samodzielnie lub wdrożyć je w ramach standardowego procesu wdrażania.
Cloud Firestore
// Deploy rules for all databases configured in your firebase.json firebase deploy --only firestore:rules
// Deploy rules for the specified database configured in your firebase.json firebase deploy --only firestore:<databaseId>
Realtime Database
// Deploy your .rules file firebase deploy --only database
Cloud Storage
// Deploy your .rules file firebase deploy --only storage
Korzystanie z konsoli Firebase
Możesz też edytować źródła Rules i wdrażać je jako wersje z w konsoli Firebase. Testowanie składniowe jest wykonywane podczas edytowania Interfejs użytkownika konsoli Firebase oraz testy semantyczne są dostępne przy użyciu Rules Playground.
Edytowanie i aktualizowanie reguł
- Otwórz konsolę Firebase i wybierz projekt.
- Następnie wybierz Realtime Database, Cloud Firestore lub Miejsce na dane z nawigacji po usługach, a następnie kliknij Reguły, aby przejść do Edytujący: Rules.
- Edytuj reguły bezpośrednio w edytorze.
Testowanie aktualizacji
Oprócz testowania składni w interfejsie edytora możesz testować semantykę Działanie Rules z wykorzystaniem bazy danych i zasobów pamięci masowej projektu bezpośrednio w konsoli Firebase przy użyciu Rules Playground. Otwórz stronę zasad. w edytorze Rules, zmień ustawienia i kliknij Uruchom. Poszukaj komunikatu z potwierdzeniem u góry edytora.
Wdrażanie aktualizacji
Jeśli zmiany są zgodne z Twoimi oczekiwaniami, kliknij Opublikuj.
Korzystanie z pakietu Admin SDK
Możesz użyć interfejsu Admin SDK w Node.js reguł. Program ten umożliwia:
- Wdrażanie niestandardowych narzędzi, skryptów, paneli i potoków CI/CD do zarządzania regułami.
- Łatwiejsze zarządzanie regułami w wielu projektach Firebase.
Przy automatycznym aktualizowaniu reguł należy unikać niezamierzone zmiany w kontroli dostępu aplikacji. Wpisz Admin SDK kod mając na uwadze bezpieczeństwo, zwłaszcza podczas aktualizowania i wdrażania reguł.
Inną ważną rzeczą, o której warto pamiętać, jest to, że wersje Firebase Security Rules przyjmują może potrwać kilka minut. Podczas wdrażania przy użyciu: Admin SDK reguł, unikaj sytuacji podczas wyścigu, w których aplikacja w przypadku reguł, których wdrożenie nie zostało jeszcze ukończone. Jeśli Twój przypadek użycia wymaga częste aktualizacje reguł kontroli dostępu, rozważ rozwiązania za pomocą Cloud Firestore, który ma ograniczać warunki w wyścigach pomimo częstych aktualizacji.
Pamiętaj też o tych ograniczeniach:
- W przypadku serializacji reguły nie mogą mieć więcej niż 256 KB tekstu zakodowanego w formacie UTF-8.
- Projekt może mieć łącznie maksymalnie 2500 wdrożonych zestawów reguł. Gdy ten limit wynosi musisz usunąć stare zestawy reguł, zanim utworzysz nowe.
Utwórz i wdróż zbiory reguł Cloud Storage lub Cloud Firestore
Typowy przepływ pracy zarządzania regułami zabezpieczeń za pomocą Admin SDK może obejmować: 3 konkretne kroki:
- Utwórz źródło pliku reguł (opcjonalnie)
- Tworzenie zestawu reguł
- Opublikuj lub wdróż nowy zestaw reguł
Pakiet SDK udostępnia metodę łączenia tych kroków w jedno wywołanie interfejsu API dla Cloud Storage i Cloud Firestore reguł zabezpieczeń. 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 parametrem releaseFirestoreRulesetFromSource()
.
Można też utworzyć plik reguł jako obiekt w pamięci, i wdrożyć go oddzielnie, aby mieć ściślejszą kontrolę nad tymi zdarzeniami. Przykład:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
Zaktualizuj Realtime Database zbioru reguł
Aby zaktualizować zestawy reguł Realtime Database za pomocą zasad Admin SDK, użyj reguł getRules()
i
setRules()
metod (admin.database
). Zestawy reguł możesz pobrać w formacie JSON
lub w postaci ciągu z 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 zbiorami reguł, Admin SDK umożliwia wyświetlenie listy wszystkich istniejących reguł
dzięki admin.securityRules().listRulesetMetadata
. 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 wdrożeń, które po pewnym czasie osiągną limit 2500 zestawów reguł, możesz: utworzyć logikę usuwania najstarszych reguł w ustalonym cyklu czasowym. Aby na przykład: usuń wszystkie zbiory 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.createTime) < thirtyDays) {
promises.push(admin.securityRules().deleteRuleset(rs.name));
}
});
await Promise.all(promises);
console.log(`Deleted ${promises.length} rulesets.`);
Używanie interfejsu API REST
Opisane powyżej narzędzia dobrze sprawdzają się w różnych przepływach pracy, takich jak: zarządzanie Firebase Security Rules dla wielu baz danych Cloud Firestore w projekcie, Być może warto jednak wdrożyć usługę Firebase Security Rules i nią zarządzać za pomocą interfejsu API do zarządzania. Interfejs API do zarządzania zapewnia największą elastyczność.
Pamiętaj też o tych ograniczeniach:
- W przypadku serializacji reguły nie mogą mieć więcej niż 256 KB tekstu zakodowanego w formacie UTF-8.
- Projekt może mieć łącznie maksymalnie 2500 wdrożonych zestawów reguł. Gdy ten limit wynosi musisz usunąć stare zestawy reguł, zanim utworzysz nowe.
Utwórz i wdróż zbiory reguł Cloud Firestore lub Cloud Storage za pomocą REST
W przykładach w tej sekcji używana jest usługa Firestore Rules, ale mają one zastosowanie Cloud Storage Rules.
W przykładach cURL jest również używany do wywołań interfejsu API. Etapy konfiguracji i zaliczania są pomijane. Możesz eksperymentować z tym interfejsem API za pomocą Interfejs API Explorer zintegrowany z dokumentacji referencyjnej.
Typowe kroki tworzenia i wdrażania zestawu reguł za pomocą interfejsu API do zarządzania:
- Tworzenie źródeł plików reguł
- Tworzenie zestawu reguł
- Opublikuj (wdróż) nowy zestaw reguł.
Utwórz źródło
Załóżmy, że pracujesz nad projektem Firebase w secure_commerce
i chcesz
aby wdrożyć zablokowane działanie Cloud Firestore Rules w bazie danych w
projekt o nazwie east_store
.
Możesz zastosować te reguły w firestore.rules
.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Tworzenie zestawu reguł
Teraz wygeneruj odcisk cyfrowy zakodowany w standardzie base64. Następnie możesz użyć funkcji
source w tym pliku, aby wypełnić ładunek potrzebny do utworzenia zestawu reguł z
projects.rulesets.create
wywołanie REST. W tym miejscu użyj polecenia cat
, aby wstawić
zawartość firestore.rules
do ładunku REST.
Aby na potrzeby śledzenia powiązać go z bazą danych east_store
, ustaw attachment_point
na east_store
.
curl -X POST -d '{
"source": {
"files": [
{
"content": "' $(cat storage.rules) '",
"name": "firestore.rules",
"fingerprint": <sha fingerprint>
},
"attachment_point": "firestore.googleapis.com/databases/east_store"
]
}
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets'
Interfejs API zwraca odpowiedź weryfikacji i nazwę zestawu reguł, na przykład
projects/secure_commerce/rulesets/uuid123
Tworzenie (wdrażanie) zestawu reguł
Jeśli zestaw reguł jest prawidłowy, ostatnim krokiem jest wdrożenie nowego zestawu w wersji.
curl -X POST -d '{
"name": "projects/secure_commerce/releases/cloud.firestore/east_store" ,
"rulesetName": "projects/secure_commerce/rulesets/uuid123"
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/releases'
Pamiętaj, że pełne udostępnienie wersji Firebase Security Rules może potrwać kilka minut propagować. Podczas wdrażania interfejsu API typu REST do zarządzania pamiętaj, aby unikać wyścigu w których aplikacja podlega regułom, których wdrożenie nie jest jeszcze zakończone.
Zaktualizuj zbiory reguł (Realtime Database) za pomocą REST
Realtime Database udostępnia własny interfejs REST do zarządzania Rules. Zobacz Zarządzanie Firebase Realtime Database Rules za pomocą REST.
Zarządzanie zestawami reguł za pomocą REST
Do zarządzania wdrożeniami dużych reguł oprócz metody REST dla tworzenia zestawów reguł i wersji, interfejs API zarządzania zapewnia metody:
- tworzyć, pobierać i usuwać reguły;
- wyświetlanie, pobieranie i usuwanie wersji reguł
W przypadku bardzo dużych wdrożeń, które po pewnym czasie osiągną limit 2500 zestawów reguł, możesz:
utworzyć logikę usuwania najstarszych reguł w ustalonym cyklu czasowym. Aby na przykład:
usuń wszystkie zbiory reguł wdrożone przez ponad 30 dni, możesz wywołać metodę
projects.rulesets.list
, przeanalizuj listę JSON obiektów Ruleset
jego kluczy createTime
, a następnie zadzwoń pod numer project.rulesets.delete
odpowiednie zestawy reguł według zbioru ruleset_id
.
Testowanie aktualizacji za pomocą REST
Dodatkowo interfejs API zarządzania umożliwia przeprowadzanie testów składniowych i semantycznych Cloud Firestore i Cloud Storage zasobu w środowisku produkcyjnym w projektach AI.
Testowanie za pomocą tego komponentu interfejsu API obejmuje:
- Definiowanie obiektu JSON
TestSuite
tak, aby reprezentował zbiór obiektówTestCase
- Przesyłam:
TestSuite
- Analizowanie zwróciło
TestResult
obiektów
Zdefiniujmy obiekt TestSuite
z pojedynczym elementem TestCase
w
testcase.json
. W tym przykładzie przekazujemy Rules
źródła języka wbudowanego w ładunek REST, wraz z pakietem testowym do uruchomienia
tych zasad. Określamy oczekiwania związane z oceną reguł, a klient
żądanie, pod kątem którego ma zostać przetestowany zestaw reguł. Możesz też określić,
Wypełnij raport testowy, używając wartości „FULL” aby wskazać wyniki dla wszystkich
Raport powinien zawierać wyrażenia określające język Rules, w tym:
wyrażenia, które nie zostały dopasowane do żądania.
{ "source": { "files": [ { "name": "firestore.rules", "content": "service cloud.firestore { match /databases/{database}/documents { match /users/{userId}{ allow read: if (request.auth.uid == userId); } function doc(subpath) { return get(/databases/$(database)/documents/$(subpath)).data; } function isAccountOwner(accountId) { return request.auth.uid == accountId || doc(/users/$(request.auth.uid)).accountId == accountId; } match /licenses/{accountId} { allow read: if isAccountOwner(accountId); } } }" } ] }, "testSuite": { "testCases": [ { "expectation": "ALLOW", "request": { "auth": {"uid": "123"}, "path": "/databases/(default)/documents/licenses/abcd", "method": "get"}, "functionMocks": [ { "function": "get", "args": [{"exact_value": "/databases/(default)/documents/users/123"}], "result": {"value": {"data": {"accountId": "abcd"}}} } ] } ] } }
Możemy następnie przesłać ten element (TestSuite
) do oceny w projects.test
.
curl -X POST -d '{
' $(cat testcase.json) '
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets/uuid123:test'
Zwrócona wartość TestReport
(zawierająca stan testu UDAŁO SIĘ/NIEPOWODZENIE, listy
komunikaty o debugowaniu, listy odwiedzonych wyrażeń reguł i ich raporty oceny).
potwierdzi stan SUKCES, że dostęp jest dozwolony.
Zarządzanie uprawnieniami do korzystania z różnych usług w Cloud Storage Security Rules
Jeśli utworzysz instancję Cloud Storage Security Rules, która będzie korzystać z Cloud Firestore zawartości dokumentu do oceny warunków bezpieczeństwa, w konsoli Firebase lub w interfejsie wiersza poleceń Firebase pojawi się prośba o włączenie do połączenia tych dwóch usług.
Jeśli zdecydujesz się wyłączyć takie zabezpieczenia obejmujące wiele usług:
Przed wyłączeniem funkcji edytuj reguły, usuwając wszystkie które uzyskują dostęp do Cloud Firestore za pomocą funkcji Rules. W przeciwnym razie po wyłączeniu funkcji oceny Rules będą mogą powodować niepowodzenie żądań dotyczących miejsca na dane.
Na stronie Uprawnienia w konsoli Google Cloud możesz usunąć „Firebase”. Agent usługi reguł Firestore zgodnie z przewodnikiem Cloud dla dotyczące ich utraty.
Przy następnym zapisywaniu pojawi się prośba o ponowne włączenie tej funkcji reguł dotyczących różnych usług z interfejsu wiersza poleceń Firebase lub konsoli Firebase.