Em aplicativos típicos, os desenvolvedores precisam criar e manter muitos servidores que executam autenticação, autorização e validação de dados, além da lógica de negócios do desenvolvedor. Os apps que usam o Cloud Storage for Firebase utilizam o Firebase Authentication e Firebase Security Rules para Cloud Storage processar autenticação, autorização e validação de dados sem servidor.
Usar o Cloud Storage e Cloud Storage Security Rules significa que você pode se dedicar à criação de uma excelente experiência do usuário, sem ter de gerenciar a infraestrutura ou escrever códigos complexos de autenticação e de autorização do lado do servidor!
Informações gerais
As Cloud Storage Security Rules são usadas para determinar quem tem acesso de leitura e gravação aos arquivos armazenados no Cloud Storage, além de como os arquivos são estruturados e quais metadados eles contêm. O tipo básico de regra é a regra allow, que permite operações read e write quando uma condição opcional especificada é atendida. Veja alguns exemplos de regras:
// Rules can optionally specify a condition allow write: if <condition>;
As regras correspondem (match) aos caminhos de arquivos que representam as referências do Cloud Storage. As regras podem corresponder (match) a um ou mais caminhos de arquivos, e mais de uma regra pode corresponder (match) ao caminho de arquivo em um determinado request:
// Rules match specific paths match /images/profilePhoto.png { allow write: if <condition>; } match /images/croppedProfilePhoto.png { allow write: if <other_condition>; }
O contexto da avaliação da regra também é exposto por meio dos objetos request e resource, que fornecem informações como o contexto de autenticação (request.auth) e o tamanho do objeto existente (resource.size).
// Rules can specify conditions that consider the request context match /images/profilePhoto.png { allow write: if request.auth != null && request.resource.size < 5 * 1024 * 1024; }
Saiba mais sobre as Cloud Storage Security Rules na seção Proteger arquivos.
Exemplos de regras
As Cloud Storage Security Rules precisam especificar primeiro o service (neste caso, firebase.storage) e o bucket do Cloud Storage (via match /b/{bucket}/o), em que as regras são avaliadas. As regras padrão exigem o Firebase Authentication, mas estes são alguns exemplos de outras regras comuns com controle de acesso diferente.
Padrão
// Only authenticated users can read or write to the folder
service firebase.storage {
match /b/{bucket}/o {
match /someFolder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
Público
// Anyone can read or write to the folder, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
service firebase.storage {
match /b/{bucket}/o {
match /someFolder/{fileName} {
allow read, write;
}
}
}
Usuário
// Grants a user access to a node matching their user ID
service firebase.storage {
match /b/{bucket}/o {
// Files look like: "user/<UID>/file.txt"
match /user/{userId}/{fileName} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
Particular
// Access to files through Cloud Storage for Firebase is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if false;
}
}
}
Durante o desenvolvimento, você pode usar as regras públicas no lugar das padrão para definir seus arquivos que podem ser lidos ou gravados publicamente. Isso é muito útil para a prototipagem porque é possível começar sem configurar o Firebase Authentication. No entanto, como o Cloud Storage compartilha um bucket com o app padrão do App Engine, essa regra também torna públicos todos os dados usados pelo app.
Com as regras de usuário, você dá a cada um dos seus usuários autenticados o próprio armazenamento de arquivos pessoais deles. Também é possível bloquear totalmente seus arquivos usando as regras particulares, mas lembre-se de que os usuários não poderão ler nem gravar nada pelo Cloud Storage com essas regras. Os usuários que acessam arquivos pelo app do App Engine ou pelas APIs do Google Cloud Storage ainda podem ter acesso.
Editar regras
O Cloud Storage oferece uma maneira fácil de editar as Cloud Storage Security Rules pela guia Regras na seção do Storage do console do Firebase.
Na guia Regras, é possível ver e editar suas regras atuais com facilidade e rapidez. Para implantar as regras, clique em Publicar ou salve o arquivo (ctrl/cmd + s). As regras são enviadas imediatamente para os servidores do Cloud Storage, mas podem levar até cinco minutos para serem ativadas.
A CLI do Firebase também pode ser usada para implantar regras. Ao selecionar Storage enquanto executa firebase init, será criado um arquivo storage.rules com uma cópia das regras padrão no diretório do projeto. É possível implantar essas regras usando o comando firebase deploy. Se você tiver vários buckets no seu projeto, será possível usar destinos de implantação para implantar regras em todos eles de uma só vez na mesma pasta do projeto.
Saiba mais sobre como funciona a segurança com base em arquivos na seção Proteger arquivos ou conheça a segurança baseada em usuários na seção Segurança do usuário.