Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Firebase Güvenlik Kurallarını yönetin ve dağıtın

Firebase CLI kullanın

Firebase CLI'yı kullanarak Kuralları düzenleyin ve dağıtın. CLI'yi kullanmak, kurallarınızı uygulama kodunuzla sürüm kontrolü altında tutmanıza ve mevcut dağıtım sürecinizin bir parçası olarak kuralları dağıtmanıza olanak tanır.

Bir konfigürasyon dosyası oluşturun

Firebase projenizi Firebase CLI kullanarak yapılandırdığınızda, proje dizininizde bir .rules yapılandırma dosyası oluşturursunuz. Firebase projenizi yapılandırmaya başlamak için aşağıdaki komutu kullanın:

Cloud Firestore

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

Gerçek Zamanlı Veritabanı

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

Depolama

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

Kurallarınızı düzenleyin ve güncelleyin

Kurallarınızı doğrudan .rules yapılandırma dosyasında düzenleyin. Firebase CLI'da yaptığınız tüm düzenlemelerin Firebase konsoluna yansıtıldığından veya Firebase konsolunu ya da Firebase CLI'yı kullanarak sürekli olarak güncelleme yaptığınızdan emin olun. Aksi takdirde, Firebase konsolunda yapılan güncellemelerin üzerine yazabilirsiniz.

Güncellemelerinizi test edin

Güncellemelerinizi yerel olarak test etmek ve uygulamanızın Kurallarının istediğiniz davranışı sergilediğini onaylamak için Firebase emülatörünü kullanın.

Güncellemelerinizi dağıtın

Kurallarınızı güncelledikten ve test ettikten sonra, bunları üretime dağıtın. Kurallarınızı tek başına seçerek dağıtmak veya normal dağıtım sürecinizin bir parçası olarak dağıtmak için aşağıdaki komutları kullanın.

Cloud Firestore

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

Gerçek Zamanlı Veritabanı

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

Depolama

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

Firebase konsolunu kullanın

Kuralları Firebase konsolundan da düzenleyebilir ve dağıtabilirsiniz.

Kurallarınızı düzenleyin ve güncelleyin

  1. Firebase konsolunu açın ve projenizi seçin.
  2. Ardından, Kurallar editörü gitmek için Kurallar 'ı, ürün gezinmesinde Gerçek Zamanlı Veritabanı, Bulut FireStore veya Depolama seçin.
  3. Kurallarınızı doğrudan düzenleyicide düzenleyin.

Güncellemelerinizi test edin

Kural davranışınızı Kural simülatörünü kullanarak doğrudan Firebase konsolunda test edebilirsiniz. Simülatör ekranını Kural düzenleyicide açın, ayarları değiştirin ve Çalıştır'a tıklayın. Düzenleyicinin üst kısmındaki onay mesajına bakın.

Güncellemelerinizi dağıtın

Güncellemelerinizin beklediğiniz gibi olduğundan emin olduğunuzda Yayınla'yı tıklayın.

Admin SDK'yı kullanın

Güvenlik kurallarını programlı bir şekilde oluşturmak, yönetmek ve dağıtmak için Node.js için Yönetici SDK'sını kullanabilirsiniz. Bu programlı 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 çok Firebase projesinde kuralları daha kolay yönetin.

Kuralları programlı olarak güncellerken, uygulamanızın erişim kontrolünde istenmeyen değişiklikler yapmaktan kaçınmak çok önemlidir. Yönetici SDK kodunuzu, özellikle kuralları güncellerken veya dağıtırken güvenliği en başta göz önünde bulundurarak yazın.

Unutulmaması gereken bir diğer önemli nokta, Firebase güvenlik kurallarının tam olarak dağıtılmasının birkaç dakika sürmesidir. Kuralları dağıtmak için Admin SDK'yı kullanırken, uygulamanızın dağıtımı henüz tamamlanmayan kurallara hemen dayandığı yarış koşullarından kaçındığınızdan emin olun. Kullanım durumunuz kontrol kurallarına erişim için sık güncelleme gerektiriyorsa, sık güncellemelere rağmen yarış koşullarını azaltmak için tasarlanmış Cloud Firestore kullanan çözümleri düşünün.

Ayrıca şu sınırlara dikkat edin:

  • Kurallar, serileştirildiğinde 64 KiB UTF-8 kodlu metinden küçük olmalıdır.
  • Bir proje toplamda en fazla 2500 dağıtılmış kural kümesine sahip olabilir. Bu sınıra ulaşıldığında, yenilerini oluşturmadan önce bazı eski kural kümelerini silmeniz gerekir.

Storage veya Cloud Firestore kural kümeleri oluşturun ve dağıtın

Yönetici SDK ile güvenlik kurallarını yönetmek için tipik bir iş akışı, üç ayrı adım içerebilir:

  1. Kural dosyası oluşturun (isteğe bağlı)
  2. Kural seti oluşturun
  3. Yeni kural kümesini yayınlayın veya dağıtın

SDK, bu adımları Storage ve Cloud Firestore güvenlik kuralları için tek bir API çağrısında birleştirmek için bir yöntem sağlar. Ö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ı model, releaseFirestoreRulesetFromSource() ile Depolama kuralları için de çalışır.

Alternatif olarak, kural dosyasını bellek içi nesne olarak oluşturabilir, kural kümesini oluşturabilir ve bu olayların daha yakından kontrolü için kural kümesini ayrı olarak dağıtabilirsiniz. Örneğin:

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

Gerçek Zamanlı Veritabanı kural kümelerini güncelleme

Gerçek Zamanlı Veritabanı kural getRules() Admin SDK ile güncellemek için getRules() ve setRules() yöntemlerini admin.database . Kural kümelerini JSON biçiminde veya yorumların dahil olduğu bir dize olarak alabilirsiniz.

Bir kural setini 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önetin

Büyük kural admin.securityRules().listRulesetMetadata yönetmeye yardımcı olmak için Admin SDK, mevcut tüm kuralları admin.securityRules().listRulesetMetadata . Ö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 2500 kural sınırına ulaşan çok büyük kural kümeleri için, sabit bir zaman döngüsündeki en eski kuralları silmek için mantık oluşturabilirsiniz. Örneğin, 30 günden daha uzun süredir kullanılan TÜM kural kümelerini silmek için:

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