Cloudflare Setup | Pages + Access

governanca publicacao infra

Configuração Cloudflare passo a passo para as 3 wikis (internal / client / board). Pré-requisitos: conta Cloudflare ativa com domínio anoukpartners.com, Google Workspace Anouk.


Visão geral

┌────────────────────────────────────────────────┐
│ Cloudflare conta Anouk                         │
│                                                │
│  ┌──────────────────────┐                      │
│  │ Pages                │                      │
│  │  ├─ colliers-interno │ ← GitHub Action      │
│  │  ├─ colliers-cliente │                      │
│  │  └─ colliers-board   │                      │
│  └──────────────────────┘                      │
│                                                │
│  ┌──────────────────────┐                      │
│  │ Access (Zero Trust)  │                      │
│  │  ├─ Application (x3) │ SSO Google Workspace │
│  │  ├─ Policies         │ por grupo/email      │
│  │  └─ Identity providers│                     │
│  └──────────────────────┘                      │
│                                                │
│  ┌──────────────────────┐                      │
│  │ DNS                  │                      │
│  │  interno.colliers... │ CNAME → Pages        │
│  │  cliente.colliers... │ CNAME → Pages        │
│  │  board.colliers...   │ CNAME → Pages        │
│  └──────────────────────┘                      │
└────────────────────────────────────────────────┘

1. Cloudflare Pages — 3 projetos

No dashboard Cloudflare → Workers & PagesCreate applicationPagesDirect upload (não conectar ao GitHub — o GitHub Action faz upload via API):

ProjetoProduction branchFramework
colliers-internomainNone (static)
colliers-clientemainNone (static)
colliers-boardmainNone (static)

Os 3 projetos recebem deploy via cloudflare/pages-action@v1 no workflow (já no workflows/wiki.yml).

Secrets no GitHub

No repo Anouk-Partners/colliers-costal-wikiSettingsSecrets and variablesActions:

  • CLOUDFLARE_API_TOKEN — criar em https://dash.cloudflare.com/profile/api-tokens
    • Template: “Edit Cloudflare Workers”
    • Permissões mínimas: Account > Cloudflare Pages: Edit
  • CLOUDFLARE_ACCOUNT_ID — visível no dashboard, canto direito

2. DNS (custom domains)

Em cada projeto Pages → Custom domainsSet up a custom domain:

ProjetoDomain
colliers-internointerno.colliers.wiki.anoukpartners.com
colliers-clientecliente.colliers.wiki.anoukpartners.com
colliers-boardboard.colliers.wiki.anoukpartners.com

Cloudflare cria os CNAMEs automaticamente. Verificar em DNS → registros.

Alternativa mais simples (se wiki.anoukpartners.com ainda não existir):

  • colliers-interno.pages.dev (default Cloudflare) — sem custom domain, mais rápido pra testar
  • Custom domain depois, quando tudo funcionar

3. Cloudflare Access (Zero Trust)

Dashboard Cloudflare → Zero TrustAccess.

3.1. Configurar Google como Identity Provider

SettingsAuthenticationLogin methodsAdd newGoogle Workspace.

  • App ID + Secret: criar em console.cloud.google.com (OAuth 2.0 credential)
  • Admin email: pedro.villa@anoukpartners.com
  • Claim email, groups

Testar login: https://anoukpartners.cloudflareaccess.com/cdn-cgi/access/login/test

3.2. Criar Applications (uma por wiki)

AccessApplicationsAdd an applicationSelf-hosted.

AplicaçãoDomainSession duration
Colliers — Internointerno.colliers.wiki.anoukpartners.com24h
Colliers — Clientecliente.colliers.wiki.anoukpartners.com12h
Colliers — Boardboard.colliers.wiki.anoukpartners.com2h

Identity provider: Google Workspace.

3.3. Policies por aplicação

Interno:

  • Policy name: Anouk staff
  • Action: Allow
  • Include: Emails ending in: @anoukpartners.com

Cliente:

  • Policy name: Team Costal + Anouk
  • Action: Allow
  • Include: Emails ending in: @anoukpartners.com OR Emails in list: [lista-costal]
  • Criar grupo “lista-costal” em Access → Groups com os e-mails aprovados (Igor + designados). Atualizável via dashboard sem redeploy.

Board:

  • Policy name: Board Colliers + Anouk leadership
  • Action: Allow
  • Include: Emails in list: [lista-board] OR Emails: pedro.villa@anoukpartners.com
  • Grupo “lista-board”: Ricardo, Bruno, Lucas, Pedro.

3.4. Logs e auditoria

Zero TrustLogsAccess mostra tentativas de login (allowed / blocked). Revisar semanalmente.


4. Configuração adicional recomendada

  • Web Analytics: Cloudflare → Analytics → Web Analytics → habilitar nos 3 sites. Zero-cost, sem cookies.
  • Security headers: Pages → Settings → Functions → adicionar _headers:
    /*
      X-Frame-Options: SAMEORIGIN
      Referrer-Policy: strict-origin-when-cross-origin
      Permissions-Policy: geolocation=(), microphone=(), camera=()
    
  • Cache rules: padrão Cloudflare já é suficiente para site estático.

5. Custos estimados

ItemCusto
Cloudflare Pages (3 projetos)Gratuito até 500 builds/mês
Cloudflare AccessGratuito até 50 usuários
DNS + SSLGratuito (já no plano Cloudflare)
Web AnalyticsGratuito
Total esperadoR$ 0 / mês

(se ultrapassar 50 usuários ou 500 builds, reavaliar — mas improvável nesta fase)


6. Checklist de validação

  • 3 projetos Cloudflare Pages criados
  • 3 custom domains apontando certos
  • 3 Access applications com políticas distintas
  • Login testado com e-mail Anouk (deve passar interno e cliente)
  • Login testado com e-mail não-Anouk não-autorizado (deve bloquear)
  • Login testado com Igor (deve passar cliente, bloquear interno)
  • Logs Access aparecendo em Zero Trust dashboard
  • Primeiro build GitHub Action verde nos 3 targets

Ver também

  • deployment-guide
  • sync-options
  • publish-contract
  • Docs Cloudflare Access: https://developers.cloudflare.com/cloudflare-one/applications/configure-apps/self-hosted-apps/
  • Docs Cloudflare Pages: https://developers.cloudflare.com/pages/