Primeiros passos com as regras de segurança do Cloud Firestore

Com o Cloud Firestore Security Rules, você pode se concentrar em criar uma ótima experiência do usuário, sem se preocupar em gerenciar a infraestrutura nem escrever um código de autenticação e autorização no servidor.

As regras de segurança oferecem controle de acesso e validação de dados em um formato simples, mas expressivo. Para criar sistemas de acesso baseados em usuários e em papéis que protegem os dados dos usuários, é necessário usar o Firebase Authentication com o Cloud Firestore Security Rules.

Versão 2 das regras de segurança

A partir de maio de 2019, a versão 2 das regras de segurança do Cloud Firestore já está disponível. A versão 2 das regras muda o comportamento dos caracteres curingas recorrentes {name=**}. Escolha essa versão se pretende usar consultas do grupo de coleções. Para ativar a versão 2, é preciso tornar rules_version = '2'; a primeira linha nas regras de segurança:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

Como escrever regras

Você vai gravar e gerenciar o Cloud Firestore Security Rules de acordo com o modelo de dados que criar para o banco de dados padrão e para cada banco de dados adicional em seu projeto.

Todos os Cloud Firestore Security Rules consistem em instruções match, que identificam documentos em banco de dados e expressões allow, que controlam o acesso a esses documentos:

service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

Todas as solicitações de bibliotecas de cliente da Web ou dispositivos móveis do Cloud Firestore ao seu banco de dados são avaliadas em relação às regras de segurança antes da leitura ou gravação de dados. Se as regras negarem o acesso a qualquer um dos caminhos de documento especificados, toda a solicitação falhará.

Veja abaixo alguns exemplos de conjuntos de regras básicos. Embora essas regras sejam válidas, elas não são recomendadas para aplicativos de produção:

Autenticação obrigatória

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Negar todos

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Permitir todos

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

O caminho {document=**} usado nos exemplos acima corresponde a qualquer documento em todo o banco de dados. Para aprender a combinar caminhos de dados específicos e trabalhar com dados hierárquicos, acesse o guia sobre Como estruturar regras de segurança.

Como testar regras

O Cloud Firestore oferece um simulador de regras que pode ser usado para testar seu grupo de regras. Para acessá-lo, vá até a guia Regras na seção do Cloud Firestore, no console do Firebase.

Com essa ferramenta, você simula leituras, gravações e exclusões autenticadas e não autenticadas. Ao simular uma solicitação autenticada, é possível criar e visualizar tokens de autenticação de vários fornecedores. As solicitações simuladas são executadas no conjunto de regras do seu editor, e não no conjunto de regras implantando atualmente.

Como implantar regras

Antes de começar a usar o Cloud Firestore a partir do seu aplicativo para dispositivos móveis, você precisará implantar regras de segurança. É possível implantar regras no console do Firebase usando a CLI do Firebase ou com a API REST de gerenciamento do Cloud Firestore.

As atualizações em Cloud Firestore Security Rules podem levar até um minuto para fazer efeito nas novas consultas e nos listeners. No entanto, pode levar até 10 minutos para que as alterações sejam propagadas totalmente e afetem os listeners ativos.

Usar o Console do Firebase

Para configurar e implantar seu primeiro conjunto de regras, para o banco de dados padrão no projeto, abra a guia Regras na seção do Cloud Firestore do console do Firebase.

Escreva suas regras no editor on-line e clique em Publicar.

Usar a CLI do Firebase

Você também pode implantar regras usando a CLI do Firebase. Assim, é possível manter as regras sob controle de versão com o código do aplicativo e implementar regras como parte do processo de implantação atual.

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

// Edit the generated .rules file to your desired security rules
// ...

// Deploy rules for all configured databases
firebase deploy --only firestore

Melhorar a segurança do Cloud Storage

Os apps vão se beneficiar dos recursos robustos do Cloud Firestore para bancos de dados e dos recursos de armazenamento e gerenciamento de arquivos do Cloud Storage. Usados juntos, esses produtos também reforçam a segurança do app, já que o Cloud Firestore pode capturar requisitos de autorização que podem ser usados pelas regras de segurança do Firebase em ambos os produtos. Para mais informações, consulte o guia de Cloud Storage.

Próximas etapas