Firebase, Rules hesabınızı yönetmek için kullanabileceğiniz çeşitli araçlar sunar. Bu araçların her biri her biri aynı arka uç Firebase'i kullanarak kullanılabilir. Güvenlik Kuralları yönetim API'si.
Çağırmak için hangi aracın kullanıldığına bakılmaksızın yönetim API'si:
- Kural kaynağı besler: Kural grubu, genellikle Firebase Security Rules ekstre.
- Kaynağı sabit kural olarak beslenen mağazalar.
- Bir sürümdeki her kural grubunun dağıtımını izler. Firebase Güvenliği Kuralların etkin olduğu hizmetler, her isteği değerlendirmek için sürümü arar. güvenli bir kaynak olmasını istiyorsunuz.
- Bir kural grubunun söz dizimsel ve anlamsal testlerini çalıştırma olanağı sağlar.
Firebase KSA'yı kullan
Firebase KSA ile şunları yapabilirsiniz: Yerel kaynaklar yükleyin ve sürümleri dağıtın. KSA'lar Firebase Local Emulator Suite, kaynaklar için tam yerel test yapmanıza olanak tanır.
KSA'yı kullanmak, kurallarınızı mevcut dağıtım sürecinizin bir parçası olarak uygulama kodu dağıtma ve kural dağıtma gibi konulardan bahsetmek istiyorum.
Yapılandırma dosyası oluşturma
Firebase projenizi Firebase KSA'yı kullanarak yapılandırdığınızda,
proje dizininizde bir .rules
yapılandırma dosyası oluşturun. Şunları kullanın:
komutuna ekleyerek Firebase projenizi yapılandırmaya başlayın:
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
Kurallarınızı düzenleme ve güncelleme
Kural kaynağınızı doğrudan .rules
yapılandırma dosyasında düzenleyin.
Firebase KSA'da yaptığınız düzenlemelerin Firebase konsolu veya Firebase konsolunuza veya Firebase CLI'a gidin. Aksi takdirde, Firebase konsolunda yapılan güncellemeler.
Güncellemelerinizi test etme
Local Emulator Suite, Güvenlik Kurallarının etkinleştirildiği tüm uygulamalar için emülatörler sağlar ürünler. Her emülatör için Güvenlik Kuralları motoru, ve anlamsal değerlendirmede bulunup bu testin Security Rules management API teklifleri
KSA ile çalışıyorsanız Suite, Firebase Security Rules için mükemmel bir araçtır teşvik etmek anlamına gelir. Güncellemelerinizi test etmek için Local Emulator Suite aracını kullanın yerel olarak ve uygulamanızdaki Rules öğesinin bu davranışı sergilediğini doğrulayın gerekir.
Güncellemelerinizi dağıtın
Rules öğenizi güncelleyip test ettikten sonra kaynakları şuraya dağıtın: çok önemlidir.
Cloud Firestore Security Rules için .rules
dosyayı varsayılan ve
gözden geçirip güncelleyerek ek adlandırılmış veritabanları
firebase.json
dosyası.
Rules öğenizi tek başına seçerek dağıtmak için aşağıdaki komutları kullanın: normal dağıtım sürecinizin bir parçası olarak dağıtabilirsiniz.
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
Firebase konsolunu kullan
Ayrıca Rules kaynağı düzenleyebilir ve bunları şuradan sürümler olarak dağıtabilirsiniz: Firebase konsolunda gösterilir. Sözdizimsel test, siz Firebase konsolunun kullanıcı arayüzü ve semantik testi için Rules Oyun Alanı.
Kurallarınızı düzenleme ve güncelleme
- Firebase konsolunu açın ve projenizi seçin.
- Ardından, Realtime Database, Cloud Firestore veya Depolama alanı'nı seçin. Gezinme menüsünü, ardından Kurallar'ı tıklayarak Rules düzenleyici.
- Kurallarınızı doğrudan düzenleyicide düzenleyin.
Güncellemelerinizi test etme
Düzenleyici kullanıcı arayüzünde söz dizimini test etmenin yanı sıra anlamsal Rules davranışı ile projenizin veritabanı ve depolama kaynakları, Firebase konsolunda Rules Playground. Kurallar Oyun Alanı'nı açın. ekranında Rules ayarları değiştirin ve Çalıştır'i tıklayın. Düzenleyicinin üst kısmında onay mesajını bulun.
Güncellemelerinizi dağıtın
Güncellemelerinizin beklediğiniz gibi olduğundan emin olduğunuzda Yayınla'yı tıklayın.
Admin SDK'yı kullanma
Node.js için Admin SDK kullanabilirsiniz kuralları içerir. Bu programatik erişimle şunları yapabilirsiniz:
- Kuralları yönetmek için özel araçlar, komut dosyaları, kontrol panelleri ve CI/CD ardışık düzenleri uygulayın.
- Birden fazla Firebase projesinde kuralları daha kolay yönetin.
Kuralları programlı bir şekilde güncellerken, uygulamanızın erişim denetiminde istenmeyen değişiklikler. Admin SDK kod özellikle de kuralları güncellerken veya dağıtırken güvenliği ön planda tutun.
Unutulmaması gereken bir diğer önemli nokta da Firebase Security Rules yayınlarının bir kaç dakika sürecektir. Dağıtım için Admin SDK kullanılırken uygulamanızın hemen bağımlı olduğu yarış koşullarından kaçının. kuralları üzerinde denetimi yoktur. Kullanım alanınız erişim denetimi kurallarında sık sık güncelleme yapılmasını istiyorsanız Cloud Firestore, Bu kampanya, sık sık güncellenmesine rağmen yarış koşullarını azaltmak için tasarlanmıştır.
Şu sınırları da unutmayın:
- Kurallar, seri haline getirildiğinde 256 KiB, UTF-8 kodlamalı metinden küçük olmalıdır.
- Bir projenin toplamda en fazla 2.500 dağıtılmış kural kümesi olabilir. Bu sınır yeni kural kümeleri oluşturmadan önce bazı eski kural kümelerini silmeniz gerekir.
Cloud Storage veya Cloud Firestore kural kümeleri oluşturup dağıtma
Güvenlik kurallarını Admin SDK ile yönetmeye yönelik tipik bir iş akışı şunları içerebilir: adımları uygulayın:
- Kural dosyası kaynağı oluşturma (isteğe bağlı)
- Kural kümesi oluşturma
- Yeni kural kümesini yayınlama veya dağıtma
SDK, bu adımların tek bir API çağrısında birleştirilmesini sağlayan bir yöntem sunar: Cloud Storage ve Cloud Firestore güvenlik kuralı. Örneğin:
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);
Aynı kalıp, releaseFirestoreRulesetFromSource()
içeren Cloud Storage kuralları için de geçerlidir.
Alternatif olarak, kural dosyasını bellek içi nesne olarak oluşturup kontrol edebilir ve kural grubunu ayrı ayrı dağıtabilirsiniz. Örneğin:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
Realtime Database kural kümesini güncelle
Realtime Database kural kümesini Admin SDK ile güncellemek için getRules()
ve
admin.database
için setRules()
yöntemler. Kural kümelerini JSON biçiminde alabilirsiniz
biçiminde veya yorumların yer aldığı bir dize olarak gösterilir.
Bir kural kümesini güncellemek için:
const source = `{
"rules": {
"scores": {
".indexOn": "score",
"$uid": {
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
}
}
}`;
await admin.database().setRules(source);
Kural kümelerini yönetme
Admin SDK, büyük kural kümelerinin yönetilmesine yardımcı olmak için mevcut tüm kuralları listelemenize olanak tanır.
admin.securityRules().listRulesetMetadata
ile. Örneğin:
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;
}
}
Zaman içinde 2.500 kural kümesi sınırına ulaşan çok büyük dağıtımlar için sabit bir zaman döngüsündeki en eski kuralları silmek için mantık oluşturur. Örneğin, 30 günden daha uzun süre dağıtılan tüm kural kümelerini silin:
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.`);
REST API'yi kullanma
Yukarıda açıklanan araçlar, şunlar da dahil olmak üzere çeşitli iş akışları için uygundur: Projenizde birden fazla Cloud Firestore veritabanı için Firebase Security Rules yönetimi, ancak Management API'yi kullanarak Firebase Security Rules hizmetini yönetmek ve dağıtmak isteyebilirsiniz. Management API size en yüksek esnekliği sağlar.
Ayrıca şu sınırları da unutmayın:
- Kurallar, seri haline getirildiğinde 256 KiB, UTF-8 kodlamalı metinden küçük olmalıdır.
- Bir projede toplam en fazla 2.500 dağıtılmış kural kümesi olabilir. Bu sınır yeni kural kümeleri oluşturmadan önce bazı eski kural kümelerini silmeniz gerekir.
REST ile Cloud Firestore veya Cloud Storage kural kümeleri oluşturup dağıtma
Bu bölümdeki örnekler Firestore Rules kullanır ancak bu örnekler Cloud Storage Rules.
Örnekler, API çağrıları yapmak için cURL'yi de kullanır. Ayarlama ve geçiş adımları Kimlik doğrulama jetonları atlanır. Şu API'yi kullanarak bu API ile deneme yapabilirsiniz: API Explorer, referans belgeler.
Yönetim API'sini kullanarak kural kümesi oluşturmaya ve dağıtmaya ilişkin tipik adımlar şunlardır:
- Kural dosyası kaynakları oluşturma
- Kural kümesi oluşturma
- Yeni kural kümesini yayınlayın (dağıtın).
Kaynak oluştur
secure_commerce
Firebase projeniz üzerinde çalıştığınızı ve
kilitli Cloud Firestore Rules uygulamasını hesabınızdaki bir veritabanına dağıtmak için
east_store
adlı proje.
Bu kuralları bir firestore.rules
içinde uygulayabilirsiniz
dosyası olarak kaydedebilirsiniz.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Kural kümesi oluşturma
Şimdi, bu dosya için base64 kodlu bir parmak izi oluşturun. Daha sonra
iki kaynak kullanarak bir kural kümesi oluşturmak için gereken yükü doldurmak
projects.rulesets.create
REST araması. Buraya eklemek için cat
komutunu kullanın.
firestore.rules
içeriğini REST yüküne ekleyin.
İzleme amacıyla, bunu east_store
veritabanınızla ilişkilendirmek için attachment_point
değerini east_store
olarak ayarlayın.
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'
API, bir doğrulama yanıtı ve bir kural kümesi adı döndürür. Örneğin,
projects/secure_commerce/rulesets/uuid123
Kural kümesi yayınlama (dağıtma)
Kural grubu geçerliyse son adım, yeni kural kümesini adlandırılmış bir kullanabilirsiniz.
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'
Firebase Security Rules sürümlerinin tamamen kullanıma sunulmasının birkaç dakika sürebileceğini unutmayın yayılır. Dağıtım yapmak için yönetim REST API'sini kullanırken uygulamanızın, dağıtımının tam olarak yapılmadığı kurallara hemen dayandığı koşullar henüz tamamlanmamıştır.
Realtime Database kural kümesini REST ile güncelleme
Realtime Database, Rules yönetimi için kendi REST arayüzünü sunar. Görüntüleyin REST aracılığıyla Firebase Realtime Database Rules yönetimi.
Kural kümelerini REST ile yönetme
Büyük kural dağıtımlarını yönetmek için REST yönteminin yanı sıra yönetim API'si şu işlemleri yapmaya yönelik yöntemler sağlar:
- kuralları listeleme, alma ve silme
- kural yayınlarını listeleme, alma ve silme
Zaman içinde 2.500 kural kümesi sınırına ulaşan çok büyük dağıtımlar için
sabit bir zaman döngüsündeki en eski kuralları silmek için mantık oluşturur. Örneğin,
30 günden daha uzun süre dağıtılan tüm kural kümelerini silerseniz
projects.rulesets.list
yönteminde Ruleset
nesnelerin JSON listesini ayrıştır
createTime
tuşlarını, ardından project.rulesets.delete
ilgili kural kümelerini ruleset_id
tarihine kadar tıklayın.
Güncellemelerinizi REST ile test edin
Son olarak, management API'yi kullanarak Üretiminizde Cloud Firestore ve Cloud Storage kaynak bilgi edinmenizi sağlar.
ile ilgili kılavuzumuza göz atın.API'nin bu bileşeniyle yapılan testler şunlardan oluşur:
TestCase
nesne grubunu temsil edecek birTestSuite
JSON nesnesi tanımlamaTestSuite
gönderiliyor- Ayrıştırma işlemi
TestResult
nesne döndürdü
Şimdi, aşağıdaki tabloda tek bir TestCase
içeren TestSuite
nesnesi tanımlayalım:
testcase.json
dosyası. Bu örnekte Rules
çalıştırılacak test paketiyle birlikte REST yüküyle satır içi dil kaynağı
bu kurallara uymalısınız. Bir Kurallar değerlendirme beklentisi belirleriz ve müşteri de
kural grubunun test edileceği istektir. Ayrıca, reklamlarınızın
test raporunu tamamlamak için "FULL" değerini tüm anahtar kelimeler için sonuçları
Rapora şu Rules dildeki ifadeler dahil edilmelidir:
istekle eşleşmeyen ifadeler.
{ "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"}}} } ] } ] } }
Ardından bu TestSuite
öğesini, projects.test
ile birlikte değerlendirilmek üzere gönderebiliriz
yöntemidir.
curl -X POST -d '{
' $(cat testcase.json) '
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets/uuid123:test'
Döndürülen TestReport
(test BAŞARI/FAILURE) durumunu,
hata ayıklama mesajları, ziyaret edilen kural ifadelerinin listeleri ve değerlendirme raporları)
erişimi BAŞARILI durumuna getirir ve erişime uygun şekilde izin verildiğini onaylar.
Cloud Storage Security Rules hizmetleri arası izinleri yönetin
Cloud Firestore doküman içeriğini kullanan Cloud Storage Security Rules oluşturursanız güvenlik koşullarını nasıl değerlendirebileceğinizi, Firebase konsolunda veya Firebase CLI'de şunu etkinleştirmeniz istenir: iki ürünü birbirine bağlamak için gerekli izinleri almış olur.
Bu tür hizmetler arası güvenliği devre dışı bırakmaya karar verirseniz:
İlk olarak, özelliği devre dışı bırakmadan önce kurallarınızı düzenleyin ve tüm Cloud Firestore öğesine erişmek için Rules işlevlerini kullanan ifadeler. Aksi takdirde, özellik devre dışı bırakıldıktan sonra Rules değerlendirme Storage isteklerinizin başarısız olmasına neden olabilir.
Google Cloud Console'daki IAM sayfasını kullanarak "Firebase Kurallar Firestore Hizmet Aracısı" rolünü üstlenmek için rolleri iptal edebilir.
Bir sonraki sefer kaydettiğinizde bu özelliği yeniden etkinleştirmeniz istenir Firebase KSA veya Firebase konsolundan hizmetler arası kurallar oluşturun.