Правила безопасности Firestore, разрешающие доступ из nodejs API

#node.js #firebase #heroku #google-cloud-firestore #firebase-security

#node.js #firebase #heroku #google-облако-firestore #firebase-безопасность

Вопрос:

Я использую Firestore в качестве базы данных MVP для API, который мы разместили на Heroku. API не использует никакой аутентификации за пределами OAuth, предоставляемой такими платформами, как Slack и Google, и мы также не используем никакой аутентификации Firebase

Я хотел бы изменить наши правила безопасности с небезопасных allow read, write: if true; но я не уверен, как написать эти правила в моем контексте, учитывая, что большинство документов показывают правила безопасности с использованием аутентификации Firebase или видимости коллекции

Итак, пара вопросов:

  • Достаточно ли безопасно, что я использую Firebase admin SDK на сервере Heroku для доступа к Firestore, но мои правила безопасности в основном разрешают доступ любому?
  • Если нет, то как я могу написать правила, разрешающие доступ только к определенной конечной точке API Heroku?
  • В качестве альтернативы, существуют ли более эффективные методы, которые я должен использовать для защиты данных?

Большое спасибо

Ответ №1:

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

 service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}
  

Ответ №2:

Для MVP, я думаю allow read: if True , на самом деле это не проблема, в зависимости от данных, которые вы предоставляете. Однако при записи вы можете легко реализовать правило с входящими данными, например, так :

allow write: if request.resource.data.securityKey === 'custom key shared between firebase and heroku'

Лучшим вариантом было бы использовать модуль аутентификации firebase.auth().signInWithEmailAndPassword(email, password) , сохранить адрес электронной почты и пароль в переменной env вашего приложения heroku и авторизоваться оттуда.