FireShield
← Alle Beiträge

Leitfaden

Einen Firebase Kill Switch bauen: Abrechnung automatisch deaktivieren

21. Oktober 2026 · 7 Min. Lesezeit

Schritt für Schritt: eine Cloud Function am Pub/Sub-Topic Ihres Budgets, die die Abrechnung jenseits Ihres Limits trennt, mit dem Code, der benötigten IAM-Rolle und ihren Schwachstellen.

Was Sie bauen

Eine Cloud Function, die das Pub/Sub-Topic Ihres Budgets abonniert. Jedes Mal, wenn Google den Budgetstatus veröffentlicht, prüft die Function die Ausgaben und entfernt jenseits Ihres Limits das Rechnungskonto aus dem Projekt. Google dokumentiert genau dieses Muster in Disable billing usage with notifications, und Firebase verweist auf seiner Seite Überraschungsrechnungen vermeiden darauf.

Lesen Sie zuerst die Folgen. Googles eigene Warnung: "This tutorial removes Cloud Billing from your project, shutting down all resources." (diese Anleitung entfernt Cloud Billing aus Ihrem Projekt und fährt alle Ressourcen herunter) und "Resources might be irretrievably deleted." (Ressourcen können unwiederbringlich gelöscht werden). Siehe was passiert, wenn die Abrechnung stoppt.

1. Verbinden Sie das Budget mit Pub/Sub

Öffnen Sie in der Google Cloud Console Billing → Budgets & alerts, bearbeiten Sie Ihr Budget und verbinden Sie unter Benachrichtigungen ein Pub/Sub-Topic (zum Beispiel billing-alerts). Google veröffentlicht den Budgetstatus dann "multiple times per day" (mehrmals täglich) dorthin, auch wenn keine Nutzung anfällt.

Jede Nachricht ist base64-kodiertes JSON mit Feldern wie diesen:

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

2. Geben Sie dem Dienstkonto der Function Abrechnungsrechte

Die Function läuft unter einem Dienstkonto, das die Abrechnung des Projekts ändern können muss. Googles Anleitung erteilt ihm roles/billing.admin (Billing Account Administrator) für das Rechnungskonto. Das ist eine mächtige Rolle: Verwenden Sie ein eigenes Dienstkonto nur für diese Function.

3. Die Function

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

Testen Sie sie an einem Wegwerfprojekt mit einem winzigen Budget, bevor Sie ihr ein echtes anvertrauen.

Wo die Selbstbau-Variante zu kurz greift

  • Alles oder nichts. Es gibt keine Stufe zwischen „weiter ausgeben“ und „alles abschalten“, also setzen die meisten das Limit hoch an und hoffen.
  • Sie erbt die Meldeverzögerung. Google selbst sagt, dass das Befolgen dieser Schritte "doesn't guarantee that you won't spend more than your budget" (nicht garantiert, dass Sie nicht mehr als Ihr Budget ausgeben).
  • Niemand überwacht den Wächter. Wenn das Topic, das Budget oder die Berechtigung kaputtgeht, läuft die Function stillschweigend nie.
  • Ein Projekt nach dem anderen. Jedes Projekt braucht sein eigenes Budget, Topic, seine eigene Function und IAM-Einrichtung.

FireShield ist dieser Kill Switch als Dienst: automatisch synchronisierte Budgets, ein Soft-Kill-Webhook vor dem Hard Kill, Warnungen per E-Mail, Slack und Telegram, ein Audit-Log jeder Aktion und Spitzenerkennung bei der Nutzung in Pro.

FireWand Logo

Verwalten Sie eine Firebase-Data-Connect-Datenbank?

Mit FireWand durchsuchen, filtern und bearbeiten Sie Ihre Tabellen mit einer echten SQL-Konsole, kostenlos für Ihr erstes Projekt.

FireWand ausprobieren →