Primeros pasos con las reglas de seguridad de 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 para Firebase usan Firebase Authentication y reglas de seguridad de Firebase para Cloud Storage a fin de administrar la autorización, la validación de datos y la autenticación sin servidor.

Puedes usar Cloud Storage y las reglas de seguridad de Storage para enfocarte en ofrecer una excelente experiencia a los usuarios sin preocuparte por administrar una infraestructura o escribir un código complejo de autenticación y autorización del servidor.

Información general

Las reglas de seguridad de Storage se usan para determinar quién tiene acceso de lectura y escritura a los archivos almacenados en Cloud Storage, además de 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 y más de una regla puede buscar coincidencias (match) en la ruta de acceso 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;
}

Para obtener más información sobre las reglas de seguridad de Storage, consulta la sección sobre cómo proteger archivos.

Reglas de muestra

Las reglas de seguridad de Storage deben especificar en primer lugar el service (en nuestro caso, firebase.storage) y el depósito de Cloud Storage (a través de match /b/{bucket}/o) con el que se comparan las reglas. Las reglas predeterminadas requieren Firebase Authentication. Sin embargo, a continuación tenemos algunos ejemplos de otras reglas comunes con diferente control de acceso.

Predeterminado

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

Usuario

// 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.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 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 la creación de prototipos, ya que puedes comenzar sin configurar Firebase Authentication. Sin embargo, debido a que Cloud Storage comparte un depósito con tu app predeterminada de Google App Engine, esta regla también hace que los datos de esa app sean públicos.

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 debes tener en cuenta que estas reglas impiden que los usuarios lean o escriban mediante Cloud Storage. Es posible que los usuarios que acceden a archivos desde tu app de Google App Engine o las API de GCS sí tengan acceso.

Edita reglas

Cloud Storage proporciona una manera fácil de editar las reglas de seguridad de Storage en la pestaña Reglas de la sección “Storage” de Firebase console. 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 las reglas. Las reglas se suben de inmediato a los servidores de Cloud Storage, pero pueden tardar hasta cinco minutos antes de entrar en vigencia.

Firebase CLI 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 depósitos en tu proyecto, puedes usar destinos de implementación para implementar reglas en todos los depósitos 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.

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.