Skip to main content

Cloudflare Access: securing an admin panel with Zero Trust

Cloudflare · 29.09.2026

What Cloudflare Access is and why an admin panel needs it

Cloudflare Access places an identity check in front of the origin server: a user opens the panel address, sees a Cloudflare login form, and gets access only after confirming through email, a Google account, or corporate SSO. The request reaches the origin already carrying a "let in or not" decision.

For admin panels on a VDS, this closes a common hole: phpMyAdmin, a control panel, or a Git hook sitting on a public port gets found by scanners within the first day. Access removes the panel from the public zone, leaving identity checking in front of Cloudflare instead of on the server itself.

How Access differs from a VPN and a plain firewall

The difference lies in where the check happens and what is visible from outside before login.

CriterionVPNCloudflare Access
What is visible outsideAn open VPN port on the serverA regular HTTPS domain with no extra ports
ClientA separate app and profileA browser, no client install needed
Rule granularityAccess to the whole subnet at onceA separate policy per application

How to connect an application in the Zero Trust dashboard

An application is created in the Zero Trust Dashboard under Access → Applications. There you specify the admin subdomain, for example admin.example.com, and the path to the origin server.

cloudflared tunnel login
cloudflared tunnel create admin-panel
cloudflared tunnel route dns admin-panel admin.example.com

If the server has no public IP address, it's worth setting up the application through Cloudflare Tunnel — then the admin port is never opened to the outside at all.

Access policies: who gets in and under what conditions

An Access policy is a set of conditions checked before a session is issued. Conditions can be combined in a single rule:

  • email or mail domain — access limited to company employees
  • membership in an identity provider group
  • request country, based on Cloudflare's data
  • device check through the WARP client and its device posture
  • session duration limit, from one hour to one week

Setting up login through an identity provider

Access supports login through Google Workspace, GitHub, Azure AD, and a one-time PIN code sent by email without an external provider. For a small team, a One-time PIN is enough: an email with a code arrives at the given address on every login attempt.

For a team sharing a Google account, connect Google as the identity provider under Settings → Authentication and list the allowed mail domains.

Service Tokens for API and CI/CD

When it's not a human but a deploy script or a monitoring tool hitting the protected address, a login form doesn't work. Access provides Service Tokens for this — a Client ID and Client Secret pair passed as request headers.

curl -H "CF-Access-Client-Id: <client_id>" \
     -H "CF-Access-Client-Secret: <client_secret>" \
     https://admin.example.com/deploy-hook

The token is tied to a separate policy and can be revoked easily without touching the rules for other users.

Summary: checklist before enabling Access

Access gates entry to the panel by checking identity in front of the origin, with no VPN client and no separate port on the server.

  1. move the admin panel to a separate subdomain and set up an Access application
  2. hide the origin through Cloudflare Tunnel when a public IP address is not needed
  3. set up an identity provider or a One-time PIN for login
  4. describe the policy by email, group, and request country
  5. issue a Service Token to deploy scripts instead of a shared password
← Back to Knowledge Base Ask Support