Pour qu'une extension effectue les actions spécifiées, Firebase accorde à chaque instance d'une extension installée a limité l'accès au projet et à ses données via un compte de service.
Qu'est-ce qu'un compte de service ?
Un compte de service est un type particulier de compte utilisateur Google. Il représente un utilisateur non humain pouvant effectuer des appels d'API autorisés aux services Google.
Lors de l'installation d'une extension, Firebase crée un compte de service pour l'extension dans le projet. Chaque instance installée d'une extension possède sa propre de service géré. Si une instance d'extension est désinstallée, Firebase supprime le compte de service de l'extension.
Les comptes de service créés pour les extensions sont au format suivant:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase limite l'accès d'une extension à un projet et à ses données en attribuant
des rôles (groupes d'autorisations) spécifiques ;
au compte de service de l'extension. Lorsque vous créez une extension,
déterminez les rôles requis pour que votre extension fonctionne, puis répertoriez-les
rôles et la raison pour laquelle votre extension a besoin de ces rôles dans votre extension.yaml
(voir l'exemple en bas de cette page).
Déterminer les rôles requis par votre extension
Lorsque vous créez votre extension, vous déterminez le niveau d'accès dont elle a besoin pour fonctionner.
Lors de l'installation, la CLI Firebase invite l'utilisateur à accepter les niveau d'accès accordé par chaque rôle. Si votre extension demande plus de rôles qu'elle n'en a réellement besoin, les utilisateurs seront peut-être moins enclins à l'installer.
Déterminez si votre extension interagit avec un produit:
Si votre extension interagit avec un produit, vous devez lui accorder l'accès à ce produit.
Par exemple, si votre extension écrit des données dans une instance Realtime Database, votre extension a besoin d'un rôle Realtime Database (plus précisément,
firebasedatabase.admin
).Si votre extension écoute simplement l'événement déclencheur d'une produit, votre extension ne nécessite pas qu'un rôle soit associé avec ce produit.
Par exemple, si votre extension se déclenche lors d'une écriture dans une instance Realtime Database (mais n'écrit rien dans la base de données), elle n'a pas besoin d'un rôle Realtime Database.
Une fois que vous avez déterminé avec quels produits votre extension interagit, déterminer quel rôle est requis pour cette interaction spécifique. Un peu Les produits ont des rôles différents selon l'action ou l'ensemble d'actions d'exécution.
Par exemple, imaginons que votre extension interagisse avec un bucket Cloud Storage. Le rôle
storage.objectCreator
permettrait à l'extension de créer un objet dans un bucket Cloud Storage, mais pas de l'afficher, de le supprimer ni de l'écraser. Pour permettre à l'extension d'effectuer ces actions supplémentaires, vous devez attribuer le rôlestorage.objectAdmin
à la place.
Consultez la section située en bas de cette page pour afficher tous les rôles compatibles que vous pouvez attribuer au compte de service de votre extension. Pour en savoir plus sur la description de chaque rôle et les autorisations accordées, consultez la page la documentation Firebase ou Documentation Google Cloud Vous pouvez également rechercher des rôles dans la console Google Cloud IAM et Panneau d'administration.
Attribuer des rôles à une extension
Indiquez les rôles IAM requis pour que votre extension fonctionne dans la section roles
de votre fichier extension.yaml
.
Voici un exemple d'extension qui écoute Chemin d'accès Firebase Realtime Database. Lorsqu'elle est déclenchée, l'extension met à jour un compte utilisateur e-mail (interaction avec Firebase Authentication) et envoie une notification (interaction avec Firebase Cloud Messaging). Notez les points suivants:
- Même si l'extension se déclenche à partir d'un événement Realtime Database, le rôle
firebasedatabase.admin
n'est pas listé (l'écoute n'est pas considérée comme une interaction). - Étant donné que l'extension interagit avec Authentication et Cloud Messaging, elle nécessite des rôles pour accéder à ces produits (
firebaseauth.admin
etfirebasenotifications.admin
, respectivement).
# extension.yaml
...
# Roles assigned to the extension's service account by Firebase during installation
roles:
- role: firebaseauth.admin
reason: Required to update the email address of the user account
- role: firebasenotifications.admin
reason: Required to send a notification that the email address has been updated
...
Dans votre fichier extension.yaml
, utilisez les champs suivants pour attribuer un rôle à un
compte de service de l'extension:
Champ | Type | Description |
---|---|---|
role (obligatoire) |
chaîne | Nom du rôle IAM requis par le pour fonctionner |
reason (obligatoire) |
chaîne |
Brève description de la raison pour laquelle l'extension a besoin de l'accès accordé par le rôle Veillez à fournir suffisamment de détails pour qu'un utilisateur puisse comprendre comment l'extension utilise le rôle. |
resource (facultatif) |
chaîne |
Stratégie IAM de la ressource à laquelle ce rôle doit être ajouté. En cas d'omission,
la valeur par défaut est
Les valeurs acceptées sont |
Réduire le champ d'application des rôles
Les extensions doivent respecter le principe du moindre privilège et ne demander
aux ressources dont ils ont besoin.
Vous pouvez limiter le champ d'application d'accès d'une extension à l'aide du champ role.resource
.
Par exemple, si votre extension doit écrire des objets dans un bucket Cloud Storage,
vous pouvez utiliser le rôle suivant:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
Cela permet à l'extension d'accéder uniquement au bucket dont elle a besoin, et pas d’autres sur le même projet.
Ce champ accepte les projets (projects/{project_id}
) et
Buckets de stockage (projects/{project_id}/buckets/{bucket_id}
).
Rôles compatibles pour les extensions
Le tableau suivant répertorie les rôles IAM compatibles pour interagir avec Firebase. produits. La plupart des rôles de ce tableau sont Rôles au niveau du produit Firebase mais certaines sont gérées directement par Google Cloud Cloud Firestore et Cloud Storage).
Produits Firebase
Si votre extension interagit avec... | Attribuez l'un de ces rôles... |
---|---|
Cloud Firestore |
datastore.importExportAdmin datastore.indexAdmin datastore.owner utilisateur.utilisateur datastore datastore.viewer |
Cloud Storage for Firebase |
stockage.admin storage.objectAdmin storage.objectCreator stockage.objectViewer |
Firebase App Distribution |
firebaseappdistro.admin firebaseappdistro.viewer |
Firebase Authentication |
firebaseauth.admin firebaseauth.viewer |
Firebase A/B Testing |
firebaseabt.admin firebaseabt.viewer |
Firebase Cloud Messaging |
firebasenotifications.admin. firebasenotifications.viewer |
Firebase Crashlytics |
firebasecrashlytics.admin firebasecrashlytics.viewer |
Firebase Hosting |
firebasehosting.admin firebasehosting.viewer |
Firebase In-App Messaging |
firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML |
firebaseml.admin firebaseml.viewer |
Firebase Performance Monitoring |
firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer. |
Firebase Realtime Database |
firebasedatabase.admin firebasedatabase.viewer |
Règles de sécurité |
firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics |
firebaseanalytics.admin firebaseanalytics.viewer |
Produits Google Cloud
Découvrez ces rôles dans la documentation Google Cloud.
Si votre extension interagit avec… | Attribuez l'un de ces rôles... |
---|---|
Actions |
Actions.Administration Lecteur actions. |
Apigee |
apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
App Engine |
appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
AutoML |
automl.editor automl.predictor automl.viewer |
BigQuery |
bigquery.connectionAdmin bigquery.connectionUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
Cloud Bigtable |
bigtable.reader bigtable.user bigtable.viewer |
Facturation | billing.viewer |
Hangouts Chats |
chat.propriétaire chat.reader |
Cloud Asset |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin lecteur datafusion.viewer |
Cloud Debugger |
cloudDebugger.agent cloudDebugger.user |
Cloud Functions |
cloudfunctions.invoker cloudfunctions.viewer |
Cloud IAP |
iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
Cloud IoT |
cloudiot.deviceController cloudiot.éditeur cloudiot.provisioner cloudiot.viewer |
Stackdriver Profiler |
cloudprofiler.agent cloudprofiler.utilisateur |
Cloud Scheduler |
cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Cloud Security Scanner |
cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Cloud SQL |
cloudsql.client cloudsql.editor cloudsql.viewer |
Cloud Trace |
cloudtrace.admin cloudtrace.agent cloudtrace.utilisateur |
Dataflow |
dataflow.developer dataflow.viewer dataflow.worker |
Dialogflow |
dialogflow.admin dialogflow.client dialogflow.reader |
Cloud Data Loss Prevention |
dlp.reader dlp.utilisateur |
Error Reporting |
errorreporting.utilisateur lecteur_erreur.lecteur errorreporting.writer |
Eventarc |
eventarc.éditeur eventarc.eventReceiver |
Cloud Filestore |
fichier.éditeur fichier.viewer |
Journalisation |
logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Machine Learning Engine |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
Surveillance |
monitoring.editor monitoring.metricWriter lecteur de surveillance |
Notebooks AI |
notebooks.admin notebooks.viewer |
Pub/Sub |
pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis |
redis.editor lecteur redis.viewer |
Cloud Run | run.invoker |
Source |
source.reader source.writer |
Cloud Spanner |
spanner.databaseAdmin spanner.databaseReader spanner.utilisateur_base_de_données spanner.viewer |
Service Usage | serviceusage.apiKeysMetadataViewer |
Service de transfert de stockage Cloud Storage |
utilisateur storagetransfer. lecteur storagetransfer.viewer |
Cloud Transcoder |
transcodager.admin transcodager.viewer |
Vertex AI | utilisateur.aiplatform |
Autre |
identitytoolkit.admin identitytoolkit.viewer |