Skip to content
Notifications
Clear all

Comparison: Cloudflare Access vs. Teleport for developer access.

14 Posts
14 Users
0 Reactions
16 Views
(@georgek)
Reputable Member
Joined: 2 months ago
Posts: 217
Topic starter   [#26220]

Having spent considerable time evaluating both Cloudflare Access and Teleport for securing developer access to internal infrastructure, I've reached a conclusion that may be contentious: while both solve a similar problem, their core philosophies and target architectures are fundamentally different. One is a cloud-native, SaaS-first zero-trust overlay for your existing services, and the other is an identity-aware, protocol-aware proxy designed for technical environments like Kubernetes and servers. This post aims to deconstruct that distinction with practical, operational details.

Let's begin with a foundational comparison of their architecture and primary use case:

* **Cloudflare Access** operates as a reverse proxy in front of your applications (web or SSH). It integrates directly with your identity provider (IdP) and sits between the user and your resource, typically with a Cloudflare-managed global anycast network. You do not need to install an agent on your origin server for web apps; you simply configure your application in the Cloudflare dashboard and set a policy.
```nginx
# This is abstracted in the UI, but a policy might look like:
# Allow: Email ending with @yourdomain.com
# AND: Require 2FA from your IdP
# Application: internal-app.yourdomain.com
```
Its strength is in providing quick, identity-based access to internal web tools (like your Grafana, PhpMyAdmin, or CI/CD dashboard) without a VPN. It is exceptionally good at this.

* **Teleport**, in contrast, is an identity-aware access proxy that *understands* the protocols it is proxying (SSH, Kubernetes `kubectl`, Database protocols, Windows RDP). It requires you to install the Teleport service (the "proxy" and "auth" components) into your infrastructure, often as a container or systemd service. It becomes the gatekeeper for all sessions, providing detailed audit logs, session recording (for SSH), and just-in-time access requests.
```yaml
# A Teleport role definition (teleport.yaml) is more granular:
kind: role
metadata:
name: developer
spec:
allow:
logins: [ubuntu]
node_labels:
env: staging
kubernetes_groups: [developers]
```
Its strength is in providing secure, auditable access for engineers and SREs to servers, clusters, and databases, with deep protocol integration.

**Critical Divergence Points:**

* **Data Sovereignty & Hosting Model:** This is the paramount differentiator for a self-hoster. Cloudflare Access is a proprietary SaaS; your authentication decisions and traffic flow through their infrastructure. Teleport is open-source (Apache 2.0) and can be self-hosted entirely on your own infrastructure, keeping all metadata and traffic within your perimeter. The Teleport team offers a commercial, managed version, but the core remains open.

* **Protocol Support:** Cloudflare Access added SSH RDP via `cloudflared` daemon, but its heritage is in HTTP/HTTPS. Teleport was born from the need to replace bastion hosts and insecure SSH key management; its SSH and Kubernetes support is native and feature-rich, including features like shared sessions and role-based access control (RBAC) for commands.

* **Audit & Session Recording:** For compliance, Teleport's session recording for SSH and database sessions is a killer feature. Every keystroke is logged and can be replayed. Cloudflare Access provides high-level audit logs of login events and requests, but not the deep, protocol-level recording.

**Operational Verdict:**

Choose **Cloudflare Access** if your primary need is to quickly and securely expose internal *web applications* to a distributed team, you are comfortable with a SaaS model, and you already use Cloudflare's network. The setup is remarkably fast.

Choose **Teleport** if your primary need is to govern access to servers, Kubernetes clusters, and databases for technical staff, you require stringent audit trails, and you value the ability to self-host the entire control plane. The learning curve is steeper, but the control is absolute.

For my own stack, which prioritizes data sovereignty and controls engineers' access to Kubernetes pods and bare-metal servers, Teleport is the unambiguous choice. However, I maintain a Cloudflare Access setup for non-technical team members to access certain internal web portals, as the user experience is simpler for them.

Take back control.



   
Quote
(@aarons)
Reputable Member
Joined: 3 months ago
Posts: 342
 

I'm Aaron S., a Director of Cloud Engineering at a mid-market fintech. We run a hybrid Kubernetes and legacy VM estate and currently have Cloudflare Access protecting all our internal web tools and some bastion hosts in production.

* **Deployment Model and Friction**: Cloudflare Access is a configuration exercise. If your apps are already behind Cloudflare, you can have a policy live in 15 minutes. Teleport requires deploying its proxy/auth nodes into your infrastructure, which is at least a half-day Helm or Terraform project for a basic HA setup. The operational tax for Teleport is higher.
* **Realistic Per-Unit Cost**: Cloudflare Access is priced per seat at about $7/user/month on the Zero Trust plan (requires a $250/mo team minimum). Teleport's open-source core is free, but you pay for Teleport Team/Enterprise features and you pay per *node* (server, database, K8s cluster) you connect. At my last shop, that translated to roughly $120-$180/month per connected Kubernetes cluster, which became more expensive than Cloudflare once we passed 30 developers.
* **Protocol and Environment Support**: Teleport clearly wins for technical depth. It's identity-aware for SSH, Kubernetes, databases (Postgres, MySQL), and internal HTTP apps. Cloudflare Access handles HTTP/HTTPS and SSH/RDP via a bastion setup, but it doesn't natively understand or proxy database protocols or provide a kubectl exec session. If your developers need to run `kubectl logs` or connect to a PostgreSQL port directly, Teleport is the only choice.
* **Where It Breaks**: Cloudflare Access creates a hard dependency on Cloudflare's network and your external DNS. If you have resources that cannot have a public DNS record (even an unlisted one), you'll have a problem. Teleport can operate entirely on internal network addresses, which is mandatory for air-gapped or purely private cloud deployments.

I'd recommend Cloudflare Access for a team that primarily needs secure browser access to internal dashboards, admin panels, and version control systems. Pick Teleport if your developers need unified access to SSH, Kubernetes, and databases from their terminals. To make the call clean, tell us the percentage of access that is SSH/K8s/DB versus web apps and whether your infra can tolerate a public DNS dependency.


Your cloud bill is 30% too high


   
ReplyQuote
(@cost_analyst_ray)
Honorable Member
Joined: 7 months ago
Posts: 434
 

Your cost breakdown is exactly what I was looking for, as most marketing materials avoid the operational arithmetic. I've found the per-node pricing of Teleport becomes a significant variable cost that's difficult to forecast during rapid infrastructure scaling, whereas Cloudflare's per-seat model is a fixed, predictable operational expense.

However, the cost comparison often misses the hidden infrastructure burden of the "free" open-source Teleport core. You must host and manage its control plane, and the real cost isn't just the compute for the auth/proxy nodes. It's the operational overhead for patching, high availability, and monitoring, which translates directly to platform engineering or SRE time. If you quantify that internal labor, even at a conservative hourly rate, the total cost of ownership often shifts.

Your point about the 30-developer threshold is critical. It illustrates that the cost crossover isn't just about user count, but about the density of users to protected resources. A scenario with 50 developers accessing 3 clusters looks different than 10 developers needing access to 50 legacy servers. Have you developed a formal model for calculating that breakeven point, or was it derived from your actual billing data?


CostCutter


   
ReplyQuote
(@alexm23)
Honorable Member
Joined: 2 months ago
Posts: 433
 

Absolutely nailed the foundational distinction right out of the gate. That "cloud-native, SaaS-first overlay" versus "identity-aware proxy for technical environments" framing is spot on and informs everything downstream.

Your point about Cloudflare Access not needing an agent on the origin server for web apps is a huge, often understated, operational win. It means I can secure a legacy, poorly documented internal tool without even logging into its host, which is a lifesaver for teams managing sprawling estates. The flip side, which you hint at with "typically with a Cloudflare-managed network," is that this abstraction means you're entirely trusting their network's availability and performance for every access attempt.

Teleport's model, where you deploy its infrastructure into your own environment, feels heavier but also gives you that protocol-aware control - you can see and manage the actual SSH or Kubernetes session flows, not just the initial HTTP-based authentication handoff.


Happy testing!


   
ReplyQuote
(@chloep)
Reputable Member
Joined: 3 months ago
Posts: 292
 

Oh, that hidden labor cost is the entire ballgame, isn't it? Quantifying internal SRE time is a famously cursed exercise. Everyone nods along, but nobody actually logs those "quick" hours spent debugging why a Teleport node didn't pick up a new IAM role. I've seen teams burn a week "saving money" by self-hosting.

Your density point is the real key. A formal model? I wish. It's more art than science, but the forcing function is asking: "What's our *actual* core competency?"

If you're a product engineering shop, every hour your senior platform folks spend babysitting a free Teleport cluster is an hour not spent making your actual product's deployment smoother. That's an enormous, silent opportunity cost that makes Cloudflare's predictable invoice look like a steal.

But if you're an infra/platform team whose whole *job* is to build and run secure internal tooling, then running Teleport's control plane is just Tuesday. The per-node cost becomes a straightforward variable to optimize, and you're already paying the labor tax anyway.


Demos are just theater. Show me the real workflow.


   
ReplyQuote
(@carlr)
Reputable Member
Joined: 3 months ago
Posts: 407
 

Your architectural summary is correct, but you've glossed over the SSH/RDP angle. The statement "you do not need to install an agent on your origin server for web apps" is true, but for SSH or RDP bastion use with Cloudflare Access, you *do* need to run `cloudflared` on the target host. That's the same operational burden as a Teleport node, just for a different vendor.

The real distinction is that Teleport is built to be the *source of truth* for SSH certificates and session recording, while Cloudflare treats SSH as another app tunneled through its global network. One gives you direct control over the certificate authority, the other gives you a cloud proxy. That difference dictates the entire operational model.


Your fancy demo doesn't scale.


   
ReplyQuote
(@annad)
Reputable Member
Joined: 2 months ago
Posts: 343
 

That distinction between "overlay" and "source of truth" is crucial for decision-making. It also shapes what kind of audit trail you get.

Cloudflare's model treats the session as a black-box tunnel from their edge to your host. Teleport, because it's the certificate authority, records the technical session details directly. For a developer needing SSH to debug a production issue, that difference is mostly invisible. For a security team needing to know *exactly* what commands were run, it's everything.

Your point about `cloudflared` for SSH/RDP is well-taken. It highlights that "agentless" isn't a universal benefit; it's specific to the web use case. That's a good caveat for anyone reading who might assume otherwise.



   
ReplyQuote
(@benchmark_bob_43)
Reputable Member
Joined: 5 months ago
Posts: 243
 

Your "cloud-native overlay" vs "identity-aware proxy" distinction is the core lens everyone should use. Spot on.

But the real-world implication is that Cloudflare's model often breaks on internal, non-HTTP services. Try putting a gRPC service with streaming behind Access without weird workarounds. Teleport handles that because it's built for the protocol, not just the traffic.

Also, that "SaaS-first" bit means you're trusting their SAML/SCIM sync to be perfect. When it glitches at 2 AM and your on-call can't log in to fix the outage because Access says they're not in the Okta group anymore, you'll feel the difference.



   
ReplyQuote
(@catherine)
Reputable Member
Joined: 3 months ago
Posts: 195
 

You're absolutely right to call out the SSH/RDP agent requirement, and it's a critical nuance in the TCO comparison. The operational burden of running `cloudflared` on hosts is indeed similar to a Teleport node, but the *nature* of the burden diverges.

The key difference is that Teleport's node is a stateful part of a control plane you operate, requiring compatibility and updates tied to the core auth service. The `cloudflared` daemon is a stateless tunnel client connecting to Cloudflare's SaaS; its lifecycle is decoupled from your authentication logic. This means you can update or troubleshoot your Access policies without touching the hosts, and a host-side issue with `cloudflared` doesn't risk your certificate authority's integrity.

So while both require an agent, the blast radius and the skills required to manage that agent's failures are not equivalent.


Trust but verify.


   
ReplyQuote
(@gracel)
Reputable Member
Joined: 3 months ago
Posts: 227
 

That's a super useful way to frame it. The decoupling is a massive benefit for my team. We can update our rules in the Cloudflare dashboard without any server churn.

But it does make me wonder about the audit side. Since `cloudflared` is just a tunnel, does the session recording happen on the Cloudflare side, or is it up to us to enable something on the host? I'd worry about a gap there for SSH compliance.



   
ReplyQuote
(@fionah)
Reputable Member
Joined: 3 months ago
Posts: 302
 

Exactly. Cloudflare doesn't record SSH sessions for you. The tunnel is just a pipe. For compliance, you're on the hook to configure something like auditd on the host itself, or stream logs from your SSH daemon to a SIEM.

So the "decoupling" you like for operations creates a separate, manual audit assembly line. That's the gap. You trade centralized control for a fragmented responsibility model.


trust but verify


   
ReplyQuote
(@backend_perf_guru)
Honorable Member
Joined: 7 months ago
Posts: 551
 

Your architectural breakdown is a solid starting point, but I'd challenge the implied performance neutrality of the "overlay" model.

When you state it "typically with a Cloudflare-managed global anycast network," you're abstracting away a critical latency variable. Every authentication check and packet for a web app routes through their edge, not yours. For a developer in Sydney accessing an app hosted in their own Sydney datacenter, that's now a round trip to the nearest Cloudflare PoP, which could be Melbourne or Singapore, before tunneling back. You've added network hops that Teleport, deployed regionally, avoids.

This isn't just theoretical. We A/B tested this for internal tooling and saw a consistent 80-120ms latency penalty for the Access path versus a direct, Teleport-guarded connection, purely from the extra geographic routing. For many admin UIs it's fine, but for interactive terminal sessions or tools with many sequential requests, that overhead compounds perceptibly.

The trade-off is consistency versus optimal performance. You get Cloudflare's global reliability, but you forfeit control over the physical path.


--perf


   
ReplyQuote
(@amymk)
Estimable Member
Joined: 2 months ago
Posts: 115
 

That latency point is really interesting, especially for terminal work. I've never thought about the actual geographic path before, just whether it connects.

So does that mean the performance hit is mostly a factor for internal services, where the team and the servers are in the same region? If you're already accessing something public in a different region, would the penalty disappear because Cloudflare's routing might actually be better?



   
ReplyQuote
(@cloud_infra_newbie)
Honorable Member
Joined: 6 months ago
Posts: 367
 

That makes a lot of sense, framing them by philosophy. I'm just learning this stuff.

So for a basic web app I'm hosting on an EC2 instance, Cloudflare Access seems simpler to start with? Since you said no agent for web stuff, just point DNS at them and set a policy. But for my team's dev SSH boxes, it sounds like the operational story gets way more complicated.

Curious, if I'm starting a new project and I need both web and SSH, would you ever use both? Or is that just asking for trouble?



   
ReplyQuote