Google, Siyah topluluklar için ırksal eşitliği ilerletmeye kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Firebase Güvenlik Kurallarını yönetme ve dağıtma

Firebase CLI'sini kullanma

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

Bir yapılandırma 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'de yaptığınız tüm düzenlemelerin Firebase konsoluna yansıtıldığından veya Firebase konsolunu veya Firebase CLI'sını 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ışı gösterdiğini onaylamak için Firebase öykünücüsü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ı seçerek ya da normal dağıtım işleminizin 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 kullanma

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, ürün gezinme bölmesinden Veritabanı veya Depolama'yı seçin.
    • Veritabanı: Bir veritabanı seçin ve ardından Kurallar Kurallar editörü gitmek için tıklayın.
    • Depolama: Kurallar editörü gitmek için Kurallar tıklayın.
  3. Kurallarınızı doğrudan düzenleyicide düzenleyin.

Güncellemelerinizi test edin

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

Güncellemelerinizi dağıtın

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

Yönetici SDK'sını kullanma

Güvenlik kurallarını programlı olarak oluşturmak, yönetmek ve dağıtmak için Node.js için Yönetici SDK'sını kullanabilirsiniz. Bu programlı erişim ile şunları yapabilirsiniz:

  • Kuralları yönetmek için özel araçlar, komut dosyaları, gösterge tabloları ve CI / CD boru hatları 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. Özellikle kuralları güncellerken veya dağıtırken Yönetici SDK kodunuzu en başta güvenlikle düşünün.

Akılda tutulması gereken bir başka önemli nokta, Firebase güvenlik kurallarının tam olarak dağıtılması için birkaç dakika sürmesidir. Kuralları dağıtmak için Yönetici SDK'sını kullanırken, uygulamanızın dağıtımı henüz tamamlanmamış kurallara derhal bağlı olduğu yarış koşullarından kaçının. Kullanım durumunuz, kontrol kurallarına erişmek için sık güncellemeler 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:

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

Depolama veya Cloud Firestore kural kümeleri oluşturma ve dağıtma

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

  1. Kural dosyası oluşturma (isteğe bağlı)
  2. Kural kümesi oluşturma
  3. Yeni kural kümesini serbest bırakın veya dağıtın

SDK, bu adımları Depolama ve Bulut 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ı kalıp releaseFirestoreRulesetFromSource() ile birlikte Depolama kuralları için de kullanılabilir.

Alternatif olarak, kurallar dosyasını bellek içi bir 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() Yönetici getRules() 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 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önet

Büyük kural admin.securityRules().listRulesetMetadata yönetilmesine yardımcı olmak için Yönetici SDK'sı, admin.securityRules().listRulesetMetadata ile mevcut tüm kuralları listelemenize olanak tanır. Ö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 uzun süredir dağıtı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.`);