Premiers pas avec les règles de sécurité Cloud Storage

Dans les applications classiques, les développeurs doivent créer et gérer de nombreux serveurs qui fonctionnent l'authentification, l'autorisation et la validation des données, ainsi que la logique métier. Les applications qui utilisent Cloud Storage for Firebase utilisent Firebase Authentication et Firebase Security Rules pour Cloud Storage afin de gérer les environnements sans serveur l'authentification, l'autorisation et la validation des données.

L'utilisation de Cloud Storage et Cloud Storage Security Rules vous permet de vous concentrer sur la création d'une expérience utilisateur de qualité, sans avoir à gérer l'infrastructure ni à écrire de code d'authentification et d'autorisation côté serveur complexe.

Présentation

Les Cloud Storage Security Rules permettent de déterminer qui dispose d'un accès en lecture et en écriture à les fichiers stockés dans Cloud Storage, ainsi que leur structure et leur quelles métadonnées elles contiennent. Le type de règle de base est la règle allow, qui autorise les opérations read et write si une condition facultative spécifiée est est satisfaite. Voici quelques exemples de règles:

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

Chemins d'accès des fichiers match de règles représentant des références Cloud Storage. Règles peut match un ou plusieurs chemins de fichier, et plusieurs règles peuvent match le fichier chemin d'accès dans un request donné:

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

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

Le contexte de l'évaluation de la règle est également exposé via request et Des objets resource, qui fournissent des informations telles que le contexte d'authentification (request.auth) et la taille de l'objet existant (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;
}

Pour en savoir plus sur Cloud Storage Security Rules, consultez le Section Fichiers sécurisés.

Exemples de règles

Cloud Storage Security Rules doit d'abord spécifier le service (dans notre cas firebase.storage) et le bucket Cloud Storage (via match /b/{bucket}/o) par rapport auquel les règles sont évaluées. Les règles par défaut nécessitent Firebase Authentication, mais voici quelques exemples d'autres règles courantes avec un contrôle des accès différent.

Par défaut

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

Public

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

Utilisateur

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

Privé

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

Pendant le développement, vous pouvez utiliser les règles publiques à la place des règles par défaut pour rendre vos fichiers lisibles publiquement et accessibles en écriture. Ceci est très utile pour prototypage, car vous pouvez commencer sans configurer Firebase Authentication. Toutefois, comme Cloud Storage partage un bucket avec le bucket App Engine, cette règle rend aussi toutes les données qu'elle utilise sont également publics.

Les règles utilisateur vous permettent d'attribuer à chacun de vos utilisateurs stockage de fichiers. Vous pouvez également verrouiller entièrement vos fichiers en utilisant mais n'oubliez pas que vos utilisateurs ne peuvent ni lire, ni écrire via Cloud Storage avec ces règles. Utilisateurs accédant aux fichiers depuis votre application App Engine ou le Google Cloud Storage API peut encore y avoir accès.

Modifier les règles

Cloud Storage vous permet de modifier facilement vos Cloud Storage Security Rules via l'onglet Règles de la section "Stockage" de la console Firebase. Dans l'onglet Rules (Règles), vous pouvez afficher et modifier rapidement et facilement vos règles actuelles. Pour déployer ces règles, cliquez sur Publier ou enregistrez le fichier. (ctrl/cmd + s). Les règles sont immédiatement importées dans Cloud Storage mais il peut s'écouler jusqu'à cinq minutes avant qu'il soit mis en ligne.

La CLI Firebase permet également de déployer des règles. Si vous sélectionnez Storage lors de l'exécution de firebase init, un fichier storage.rules avec une copie de les règles par défaut sont créées dans le répertoire de votre projet. Vous pouvez déployer ces règles à l'aide du firebase deploy. Si votre projet comporte plusieurs buckets, Utilisez des cibles de déploiement pour déployer des règles sur l'ensemble de vos à partir du même dossier de projet.

Pour en savoir plus sur le fonctionnement de la sécurité basée sur les fichiers, consultez les Fichiers sécurisés ou à comprendre dans la section Sécurité de l'utilisateur .