Comienza a usar las reglas de seguridad de Cloud Storage

En las apps típicas, los desarrolladores deben crear y mantener varios servidores que realizan tareas de autenticación, autorización y validación de datos, además de la lógica empresarial del desarrollador. Las apps que usan Cloud Storage for Firebase Firebase Authentication y Firebase Security Rules para que Cloud Storage controle la autenticación, la autorización y la validación de datos sin servidores.

Con Cloud Storage y Cloud Storage Security Rules, puedes enfocarte en crear una excelente experiencia del usuario, sin tener que administrar infraestructura ni escribir código complejo de autenticación y autorización del servidor.

Descripción general

Cloud Storage Security Rules se usa para determinar quién tiene acceso de lectura y escritura a los archivos almacenados en Cloud Storage, cómo se estructuran los archivos y qué metadatos contienen. El tipo básico de regla es allow, que permite operaciones read y write, si se cumple una condición que puede especificarse opcionalmente. Estos son algunos ejemplos de reglas:

// Rules can optionally specify a condition
allow write: if <condition>;

Las reglas buscan coincidencias (match) con las rutas de acceso a los archivos que representan referencias de Cloud Storage. Las reglas pueden buscar coincidencias (match) en una o más rutas de acceso de archivos y más de una regla puede buscar coincidencias (match) en la ruta de acceso de un archivo en una solicitud (request) determinada:

// Rules match specific paths
match /images/profilePhoto.png {
  allow write: if <condition>;
}

match /images/croppedProfilePhoto.png {
  allow write: if <other_condition>;
}

El contexto de la evaluación de la regla también se expone mediante los objetos request y resource, que proporcionan información como el contexto de Auth (request.auth) y el tamaño del 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;
}

Obtén más información sobre Cloud Storage Security Rules en la sección Protege archivos.

Reglas de muestra

Cloud Storage Security Rules primero debe especificar el service (en nuestro caso, firebase.storage) y el bucket Cloud Storage (a través de match /b/{bucket}/o) con el que se comparan las reglas. Las reglas predeterminadas requieren Firebase Authentication, pero estas son algunos ejemplos de otras reglas comunes con diferente control de acceso.

Predeterminada

// 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;
    }
  }
}

Usuario

// 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;
    }
  }
}

Privado

// 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 el desarrollo, puedes usar las reglas públicas, en lugar de las predeterminadas, para que cualquier usuario pueda realizar operaciones de lectura y escritura en tus archivos. Esto es muy útil para prototipado, ya que puedes comenzar sin configurar Firebase Authentication. Sin embargo, debido a que Cloud Storage comparte un bucket con tu app App Engine, esta regla también hace públicos los datos que use esa app.

Con las reglas de usuario, puedes darle su propio almacenamiento de archivos personal a cada uno de tus usuarios autenticados. También puedes bloquear por completo tus archivos mediante las reglas privadas, pero ten en cuenta que estas reglas impiden que los usuarios lean o escriban mediante Cloud Storage. Los usuarios que acceden a archivos desde tu app de App Engine o las APIs de Google Cloud Storage aún podría tener acceso.

Edita reglas

Cloud Storage proporciona una forma fácil de editar tu Cloud Storage Security Rules en la pestaña Reglas de la sección Almacenamiento de la consola de Firebase. En la pestaña Reglas, puedes ver y editar tus reglas actuales de manera fácil y rápida. Haz clic en Publicar o guarda el archivo (ctrl/cmd + s) para implementar estas reglas. Las reglas se suben de inmediato a los servidores de Cloud Storage, pero pueden demorar hasta cinco minutos antes de entrar en vigor.

La CLI de Firebase también se puede utilizar para implementar reglas. Si seleccionas Storage cuando ejecutes firebase init, se creará un archivo storage.rules con una copia de las reglas predeterminadas en el directorio del proyecto. Puedes implementar estas reglas mediante el comando firebase deploy. Si tienes varios buckets en tu proyecto, puedes usar destinos de implementación para implementar reglas en todos los buckets a la vez desde la misma carpeta de proyecto.

Obtén más información sobre cómo funciona la seguridad basada en archivos en la sección Aprende a proteger archivos y la seguridad basada en usuarios en la sección Protege los datos del usuario.