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 развернутых наборов правил. Как только этот предел будет достигнут, вы должны удалить некоторые старые наборы правил перед созданием новых.

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

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

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

SDK предоставляет способ объединить эти шаги в один вызов API для правил безопасности Cloud Storage и 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.`);