02 - Deixando a function inacessível publicamente

Continuação do artigo 01 - Configurando exportação de dados automática do Cloudsql

Para deixar a Cloud Function inacessível publicamente, você precisa remover a permissão de invocação anônima e permitir somente chamadas autenticadas, normalmente via OIDC usando uma Service Account (como a usada pelo Cloud Scheduler).

A boa notícia: isso é simples.


1️⃣ Não usar --allow-unauthenticated no deploy

Se você já publicou assim:

gcloud functions deploy minha-func --allow-unauthenticated

Ela virou pública.

Para deixar privada, republique sem essa flag:

gcloud functions deploy sql-export \
  --runtime go122 \
  --trigger-http \
  --entry-point ExportBackup \
  --service-account cloudsql-backup@SEU_PROJETO.iam.gserviceaccount.com \
  --region us-central1

Isso já deixa a função restrita automaticamente.


2️⃣ Remover a permissão allUsers manualmente (se já existia)

Execute:

gcloud functions remove-iam-policy-binding sql-export \
  --region us-central1 \
  --member="allUsers" \
  --role="roles/cloudfunctions.invoker"

Isso remove totalmente o acesso público.


3️⃣ Dar permissão SOMENTE ao Cloud Scheduler

O Scheduler chama a Function usando OIDC.
Então ele precisa da permissão:

roles/cloudfunctions.invoker

Adicione:

gcloud functions add-iam-policy-binding sql-export \
  --region us-central1 \
  --member="serviceAccount:cloudsql-backup@SEU_PROJETO.iam.gserviceaccount.com" \
  --role="roles/cloudfunctions.invoker"

❗ Importante sobre o Scheduler

Quando criar o Scheduler, use OIDC:

gcloud scheduler jobs create http export-sql-daily \
  --schedule="0 02 * * *" \
  --uri="https://us-central1-SEU_PROJETO.cloudfunctions.net/sql-export" \
  --http-method=GET \
  --oidc-service-account-email=cloudsql-backup@SEU_PROJETO.iam.gserviceaccount.com

Isso faz com que SOMENTE o Scheduler consiga chamar a function.


📌 Resultado final


🔐 Verificando se ficou realmente privada

Rodar:

curl https://us-central1-SEU_PROJETO.cloudfunctions.net/sql-export

Se estiver privada corretamente → retornará 403.