Skip to content

[HIGH] Restringir acesso ao endpoint /process da embeddings-api #113

@cesarsv

Description

@cesarsv

User Story

Como responsável pela infraestrutura de APIs,
Quero restringir o acesso ao endpoint /process da embeddings-api apenas para serviços autorizados,
Para que evitemos abuso financeiro (billing) e indisponibilidade por consumo não autorizado.

Contexto

Durante pentest realizado pelo CPQD (17/03/2026), foi identificado que o endpoint /process da embeddings-api está acessível publicamente sem autenticação.

Vulnerabilidade: [V04] - Exposição de Endpoint sem Autenticação no Cloud Run
Severidade: Médio (CVSS 5.3)
Referência: Relatório CPQD INSPIRE-M7-Destaquesgovbr (pág. 23-24)

Serviço afetado:

https://destaquesgovbr-embeddings-api-990583792367.southamerica-east1.run.app/process

Impacto:

  • Billing Abuse: Invocações em massa por terceiros podem gerar custos excessivos de processamento
  • DoS: Uso não autorizado consome quotas de processamento, podendo deixar serviço offline
  • Governança: Desconformidade com best practices de segurança em nuvem

Evidência:
Teste realizado com curl demonstrou capacidade de invocar função sem credenciais:

curl -X POST https://destaquesgovbr-embeddings-api-[...]/process \
  -H "Content-Type: application/json" \
  -d '{"message": {"data": "...", "attributes": {...}}}'
# Resultado: HTTP 200 (processamento executado)

Critérios de Aceite

  • Configuração "Require Authentication" habilitada no Cloud Run
  • Permissão roles/run.invoker removida de allUsers
  • Service account autorizada criada com permissão roles/run.invoker
  • Pub/Sub configurado para usar service account ao invocar endpoint
  • Teste de validação: curl anônimo deve retornar HTTP 403
  • Teste de validação: invocação via Pub/Sub deve funcionar normalmente
  • Documentação atualizada com processo de autenticação

Implementação

PR: destaquesgovbr/infra#161
Plano técnico: infra/_plan/restrict-embeddings-api-access.md

Mudança: Removida IAM binding allUsersroles/run.invoker e adicionada IAM binding pubsub_push SA → roles/run.invoker em terraform/embeddings-api.tf.

Validação pós-deploy (2026-03-25):

  • curl anônimo → HTTP 403
  • IAM policy confirma apenas pubsub_push SA como invoker
  • Logs Cloud Run confirmam POST /process → 200 via Pub/Sub push
  • Pipeline de embeddings operacional (artigo processado + evento publicado)

Dependências

  • Acesso ao Cloud Run no GCP
  • Permissões IAM para configurar service accounts
  • Relacionada: docs#23 (Epic Segurança & IAM)

Metadata

Metadata

Labels

bugSomething isn't workingsize:SPequeno (~2-4h)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions