FireShield
← Todos os posts

Guia

Crie um kill switch para o Firebase: desative o faturamento automaticamente

21 de outubro de 2026 · 7 min de leitura

Passo a passo: uma Cloud Function no tópico do Pub/Sub do seu orçamento que desconecta o faturamento ao passar do seu limite, com o código, o papel do IAM necessário e onde ela deixa a desejar.

O que você vai construir

Uma Cloud Function inscrita no tópico do Pub/Sub do seu orçamento. Sempre que o Google publica o status do orçamento, a função verifica os gastos e, ao passar do seu limite, remove a conta de faturamento do projeto. O Google documenta exatamente esse padrão em Disable billing usage with notifications, e o Firebase aponta para ele na página evitar faturas inesperadas.

Leia as consequências primeiro. O próprio aviso do Google: "This tutorial removes Cloud Billing from your project, shutting down all resources." ("este tutorial remove o Cloud Billing do seu projeto, desativando todos os recursos.") e "Resources might be irretrievably deleted." ("os recursos podem ser excluídos de forma irrecuperável.") Veja o que acontece quando o faturamento para.

1. Conecte o orçamento ao Pub/Sub

No console do Google Cloud, abra Billing → Budgets & alerts, edite seu orçamento e, em notificações, conecte um tópico do Pub/Sub (por exemplo, billing-alerts). O Google então publica o status do orçamento nele "multiple times per day" ("várias vezes ao dia"), mesmo quando não há uso.

Cada mensagem é um JSON em base64 com campos como estes:

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

2. Dê à conta de serviço da função direitos de faturamento

A função roda como uma conta de serviço que precisa poder alterar o faturamento do projeto. O tutorial do Google concede a ela o papel roles/billing.admin (Billing Account Administrator) na conta de faturamento. É um papel poderoso: use uma conta de serviço dedicada apenas a essa função.

3. A função

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

Teste-a em um projeto descartável com um orçamento pequeno antes de confiar nela em um projeto real.

Onde a versão faça você mesmo deixa a desejar

  • É tudo ou nada. Não existe meio-termo entre "continuar gastando" e "desligar tudo", então a maioria das pessoas define o limite alto e torce.
  • Ela herda o atraso dos relatórios. O próprio Google diz que seguir estes passos "doesn't guarantee that you won't spend more than your budget" ("não garante que você não gastará mais do que o seu orçamento").
  • Ninguém vigia o vigia. Se o tópico, o orçamento ou a permissão quebrar, a função simplesmente nunca roda, sem avisar.
  • Um projeto de cada vez. Cada projeto precisa do seu próprio orçamento, tópico, função e configuração de IAM.

O FireShield é esse kill switch como serviço: orçamentos sincronizados para você, um webhook de Soft Kill antes do Hard Kill, alertas por e-mail, Slack e Telegram, um log de auditoria de cada ação e detecção de picos de uso no plano Pro.

Logo do FireWand

Gerencia um banco de dados do Firebase Data Connect?

O FireWand permite navegar, filtrar e editar suas tabelas com um console SQL de verdade, grátis para o seu primeiro projeto.

Experimente o FireWand →