FireShield
← Tutti gli articoli

Guida

Costruisci un kill switch per Firebase: disattiva la fatturazione automaticamente

21 ottobre 2026 · 7 min di lettura

Passo passo: una Cloud Function sul topic Pub/Sub del tuo budget che scollega la fatturazione oltre il tuo limite, con il codice, il ruolo IAM necessario e i suoi punti deboli.

Cosa stai costruendo

Una Cloud Function iscritta al topic Pub/Sub del tuo budget. Ogni volta che Google pubblica lo stato del budget, la funzione controlla la spesa e, oltre il tuo limite, rimuove l'account di fatturazione dal progetto. Google documenta esattamente questo schema in Disable billing usage with notifications, e Firebase vi rimanda dalla sua pagina evitare fatture a sorpresa.

Leggi prima le conseguenze. L'avvertimento di Google stesso: "This tutorial removes Cloud Billing from your project, shutting down all resources." (cioè, «questo tutorial rimuove Cloud Billing dal tuo progetto, arrestando tutte le risorse») e "Resources might be irretrievably deleted." (cioè, «le risorse potrebbero essere eliminate in modo irrecuperabile»). Vedi cosa succede quando la fatturazione si ferma.

1. Collega il budget a Pub/Sub

Nella console Google Cloud, apri Billing → Budgets & alerts, modifica il tuo budget e, nelle notifiche, collega un topic Pub/Sub (ad esempio billing-alerts). Google vi pubblicherà lo stato del budget "multiple times per day" (cioè, «più volte al giorno»), anche quando non c'è utilizzo.

Ogni messaggio è un JSON in base64 con campi come questi:

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

2. Dai i permessi di fatturazione all'account di servizio della funzione

La funzione viene eseguita come un account di servizio che deve poter modificare la fatturazione del progetto. Il tutorial di Google gli concede roles/billing.admin (Billing Account Administrator) sull'account di fatturazione. È un ruolo potente: usa un account di servizio dedicato solo a questa funzione.

3. La funzione

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}`);
  },
);

Provala su un progetto usa e getta con un budget minimo prima di affidarle uno reale.

I limiti della versione fai da te

  • È tutto o niente. Non c'è nessun passo intermedio tra «continua a spendere» e «spegni tutto», quindi la maggior parte delle persone imposta un limite alto e spera.
  • Eredita il ritardo di rendicontazione. Google stessa dice che seguire questi passaggi "doesn't guarantee that you won't spend more than your budget" (cioè, «non garantisce che non spenderai più del tuo budget»).
  • Nessuno controlla il controllore. Se il topic, il budget o il permesso si rompono, la funzione semplicemente non viene mai eseguita, senza avvisare.
  • Un progetto alla volta. Ogni progetto ha bisogno del proprio budget, topic, funzione e configurazione IAM.

FireShield è questo kill switch come servizio: budget sincronizzati per te, un webhook Soft Kill prima dell'Hard Kill, avvisi via email, Slack e Telegram, un registro di audit di ogni azione e il rilevamento dei picchi di utilizzo su Pro.

Logo di FireWand

Gestisci un database Firebase Data Connect?

FireWand ti permette di sfogliare, filtrare e modificare le tue tabelle con una vera console SQL, gratis per il tuo primo progetto.

Prova FireWand →