Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Управление и развертывание правил безопасности Firebase

Используйте интерфейс командной строки Firebase

Отредактируйте и разверните правила с помощью интерфейса командной строки Firebase . Использование интерфейса командной строки позволяет вам держать ваши правила под контролем версий с кодом вашего приложения и развертывать правила как часть существующего процесса развертывания.

Создайте файл конфигурации

Когда вы настраиваете свой проект Firebase с помощью интерфейса командной строки Firebase, вы создаете .rules конфигурации .rules в каталоге проекта. Используйте следующую команду, чтобы начать настройку проекта Firebase:

Cloud Firestore

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

База данных в реальном времени

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

Место хранения

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

Редактируйте и обновляйте свои правила

Редактируйте свои правила прямо в .rules конфигурации .rules . Убедитесь, что любые изменения, которые вы вносите в интерфейс командной строки Firebase, отражаются в консоли Firebase или что вы постоянно вносите обновления с помощью консоли Firebase или интерфейса командной строки Firebase. В противном случае вы можете перезаписать любые обновления, сделанные в консоли Firebase.

Проверьте свои обновления

Используйте эмулятор Firebase для локального тестирования обновлений и подтверждения того, что правила вашего приложения демонстрируют желаемое поведение.

Разверните свои обновления

После того, как вы обновили и протестировали свои правила, разверните их в производственной среде. Используйте следующие команды, чтобы выборочно развернуть свои Правила отдельно или развернуть их как часть обычного процесса развертывания.

Cloud Firestore

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

База данных в реальном времени

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

Место хранения

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

Используйте консоль Firebase

Вы также можете редактировать и развертывать правила из консоли Firebase.

Редактируйте и обновляйте свои правила

  1. Откройте консоль Firebase и выберите свой проект.
  2. Затем выберите « База данных в реальном времени» , « Cloud Firestore» или « Хранилище» на панели навигации продукта, затем щелкните « Правила», чтобы перейти к редактору правил.
  3. Редактируйте свои правила прямо в редакторе.

Проверьте свои обновления

Вы можете протестировать поведение своих правил прямо в консоли Firebase с помощью симулятора правил . Откройте экран Simulator в редакторе правил, измените настройки и нажмите Run . Найдите подтверждающее сообщение вверху редактора.

Разверните свои обновления

Убедившись в том, что ваши обновления соответствуют вашим ожиданиям, нажмите Опубликовать .

Используйте Admin SDK

Вы можете использовать Admin SDK для Node.js для программного создания, управления и развертывания правил безопасности. Благодаря этому программному доступу вы можете:

  • Внедряйте настраиваемые инструменты, сценарии, информационные панели и конвейеры CI / CD для управления правилами.
  • Упростите управление правилами в нескольких проектах Firebase.

При программном обновлении правил очень важно избегать внесения непреднамеренных изменений в контроль доступа для вашего приложения. При написании кода Admin SDK помните о безопасности, особенно при обновлении или развертывании правил.

Еще одна важная вещь, о которой следует помнить, - это то, что правила безопасности Firebase полностью развертываются в течение нескольких минут. При использовании Admin SDK для развертывания правил избегайте условий гонки, в которых ваше приложение немедленно полагается на правила, развертывание которых еще не завершено. Если ваш вариант использования требует частого обновления правил контроля доступа, рассмотрите возможность использования Cloud Firestore, который предназначен для уменьшения условий гонки, несмотря на частые обновления.

Также обратите внимание на эти ограничения:

  • При сериализации правила должны быть меньше 64 КиБ текста в кодировке UTF-8.
  • В проекте может быть не более 2500 развернутых наборов правил. Как только этот предел будет достигнут, вы должны удалить некоторые старые наборы правил перед созданием новых.

Создание и развертывание наборов правил Storage или Cloud Firestore

Типичный рабочий процесс для управления правилами безопасности с помощью Admin SDK может включать три отдельных шага:

  1. Создайте файл правил (необязательно)
  2. Создать набор правил
  3. Выпуск или развертывание нового набора правил

SDK предоставляет способ объединения этих шагов в один вызов API для правил безопасности хранилища и Cloud Firestore. Например:

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

Этот же шаблон работает для правил хранилища с releaseFirestoreRulesetFromSource() .

В качестве альтернативы вы можете создать файл правил как объект в памяти, создать набор правил и развернуть набор правил отдельно для более точного контроля этих событий. Например:

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

Обновить наборы правил базы данных реального времени

Чтобы обновить наборы правил базы данных Realtime с помощью Admin SDK, используйте getRules() и setRules() admin.database . Вы можете получать наборы правил в формате JSON или в виде строки с комментариями.

Чтобы обновить набор правил:

    const source = `{
      "rules": {
        "scores": {
          ".indexOn": "score"
            "$uid": {
            ".read": "$uid == auth.uid",
            ".write": "$uid == auth.uid"
          }
        }
      }
    }`;
    await admin.database().setRules(source);

Управление наборами правил

Чтобы помочь управлять большими наборами правил, Admin SDK позволяет перечислить все существующие правила с помощью admin.securityRules().listRulesetMetadata . Например:

    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;
      }
    }

Для очень больших наборов правил, которые со временем достигают предела в 2500 правил, вы можете создать логику для удаления самых старых правил за фиксированный временной цикл. Например, чтобы удалить ВСЕ наборы правил, развернутые более 30 дней:

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