FireShield
← Tous les articles

Guide

Créer un kill switch Firebase : désactiver la facturation automatiquement

21 octobre 2026 · 7 min de lecture

Pas à pas : une Cloud Function sur le sujet Pub/Sub de votre budget qui dissocie la facturation au-delà de votre limite, avec le code, le rôle IAM nécessaire et ses limites.

Ce que vous allez construire

Une Cloud Function abonnée au sujet Pub/Sub de votre budget. Chaque fois que Google publie l'état du budget, la fonction vérifie les dépenses et, au-delà de votre limite, retire le compte de facturation du projet. Google documente exactement ce modèle dans Disable billing usage with notifications, et Firebase y renvoie depuis sa page éviter les factures surprises.

Lisez d'abord les conséquences. L'avertissement de Google lui-même : "This tutorial removes Cloud Billing from your project, shutting down all resources." (« ce tutoriel retire Cloud Billing de votre projet, ce qui arrête toutes les ressources ») et "Resources might be irretrievably deleted." (« des ressources pourraient être supprimées de façon irréversible »). Voir ce qui se passe quand la facturation s'arrête.

1. Relier le budget à Pub/Sub

Dans la console Google Cloud, ouvrez Billing → Budgets & alerts, modifiez votre budget et, dans les notifications, reliez un sujet Pub/Sub (par exemple billing-alerts). Google y publie alors l'état du budget "multiple times per day" (« plusieurs fois par jour »), même en l'absence d'utilisation.

Chaque message est un JSON encodé en base64, avec des champs comme ceux-ci :

{
  "budgetDisplayName": "my-project budget",
  "costAmount": 142.37,
  "costIntervalStart": "2026-10-01T07:00:00Z",
  "budgetAmount": 100,
  "budgetAmountType": "SPECIFIED_AMOUNT",
  "alertThresholdExceeded": 1.0,
  "currencyCode": "USD"
}

2. Donner au compte de service de la fonction des droits de facturation

La fonction s'exécute sous un compte de service qui doit pouvoir modifier la facturation du projet. Le tutoriel de Google lui accorde roles/billing.admin (Billing Account Administrator) sur le compte de facturation. C'est un rôle puissant : utilisez un compte de service dédié à cette seule fonction.

3. La fonction

import { onMessagePublished } from "firebase-functions/v2/pubsub";
import { GoogleAuth } from "google-auth-library";

const PROJECT_ID = process.env.GCLOUD_PROJECT!;

export const killSwitch = onMessagePublished(
  { topic: "billing-alerts", serviceAccount: "billing-kill@YOUR_PROJECT.iam.gserviceaccount.com" },
  async (event) => {
    const data = event.data.message.json as { costAmount: number; budgetAmount: number };
    if (data.costAmount < data.budgetAmount) return; // still under budget

    const auth = new GoogleAuth({ scopes: ["https://www.googleapis.com/auth/cloud-billing"] });
    const client = await auth.getClient();
    const url = `https://cloudbilling.googleapis.com/v1/projects/${PROJECT_ID}/billingInfo`;

    const { data: info } = await client.request<{ billingEnabled?: boolean }>({ url });
    if (!info.billingEnabled) return; // already disabled

    // An empty billing account name detaches billing from the project.
    await client.request({ url, method: "PUT", data: { billingAccountName: "" } });
    console.log(`Billing disabled: ${data.costAmount} of ${data.budgetAmount}`);
  },
);

Testez-la sur un projet jetable avec un budget minuscule avant de lui confier un vrai projet.

Les limites de la version faite maison

  • C'est tout ou rien. Il n'y a pas d'étape entre « continuer à dépenser » et « tout couper », alors la plupart des gens fixent la limite haut et croisent les doigts.
  • Elle hérite du délai de remontée. Google lui-même dit que suivre ces étapes "doesn't guarantee that you won't spend more than your budget" (« ne garantit pas que vous ne dépasserez pas votre budget »).
  • Personne ne surveille le surveillant. Si le sujet, le budget ou l'autorisation casse, la fonction ne s'exécute jamais, sans un bruit.
  • Un projet à la fois. Chaque projet a besoin de son propre budget, sujet, fonction et configuration IAM.

FireShield, c'est ce kill switch en tant que service : budgets synchronisés pour vous, un webhook Soft Kill avant le Hard Kill, des alertes par e-mail, Slack et Telegram, un journal d'audit de chaque action et la détection de pics d'utilisation sur la formule Pro.

Logo FireWand

Vous gérez une base de données Firebase Data Connect ?

FireWand vous permet de parcourir, filtrer et modifier vos tables avec une vraie console SQL, gratuitement pour votre premier projet.

Essayer FireWand →