Primeiros passos com as Storage Security Rules

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 aplicativos que usam o Cloud Storage processam a autenticação, a autorização e a validação de dados sem servidor com o Firebase Authentication e as regras de segurança do Firebase para Cloud Storage.

Usar o Cloud Storage e as as regras de segurança do Storage significa que você pode se dedicar à criação de uma experiência excelente do usuário, sem ter de gerenciar a infraestrutura ou escrever código complexo de autenticação e de autorização de servidor.

Visão geral

As regras de segurança do Storage são usadas para determinar quem tem acesso para leitura e gravação de arquivos armazenados no Cloud Storage, 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 se uma condição especificada for 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 arquivo, 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 regras de segurança do Storage na seção Proteger arquivos.

Exemplos de regras

As Regras de segurança do Storage precisam especificar primeiro o service (no nosso 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 bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Público

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with Google App Engine, this will also make
// files uploaded via GAE public.
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      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>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

Privado

// Access to files through Firebase Storage is completely disallowed.
// Files may still be accessible through Google App Engine or GCS 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, pois você pode começar sem configurar o Firebase Authentication. No entanto, como o Cloud Storage compartilha um intervalo com seu aplicativo padrão do Google App Engine, essa regra também torna públicos todos os dados usados por esse aplicativo.

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 seus arquivos totalmente usando as regras privadas, mas esteja ciente de que seus usuários não poderão ler nem gravar nada por meio do Cloud Storage com essas regras. Os usuários que acessam arquivos por meio do aplicativo do Google App Engine ou das APIs do GCS ainda podem ter acesso.

Editar regras

O Cloud Storage oferece uma maneira fácil de editar as regras de segurança do Storage por meio da guia Regras na seção Armazenamento do Console do Firebase. Na guia Regras, você visualiza e edita suas regras atuais de modo fácil e rápido. Para implantar as regras, clique em Publicar ou salvando 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 Firebase CLI também pode ser usada para implantar regras. Se você selecionar Armazenamento ao executar 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, pode usar destinos de implantação para implantar regras em todos os seus buckets de uma só vez a partir da 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.