Why a Cheaper Cloud Plan Can Quietly Weaken Your Security
This guide is for non-engineering buyers and operators deciding whether to downgrade hosting, CDN, database, or email plans. It explains where security often lives in a modern cloud setup, what cheaper tiers commonly remove, and how to evaluate a downgrade without accidentally exposing your app, data, or users.
TL;DR — A cheaper cloud plan can reduce security not because "cheap is bad," but because lower tiers often remove isolation, logging, backups, network controls, web application firewall rules, or support for patching and incident response. The most likely fix is to list the exact security controls your current setup uses today, then verify one by one whether the lower plan still provides them before you downgrade. Reading time: ~7 min
What it is and where it sits
When people say "we're moving to a cheaper cloud plan," they usually mean one of four things: moving from a managed service to a less-managed one, moving from a dedicated environment to a shared one, moving from a higher tier with more controls to a basic tier, or turning off add-ons like backups, logging, or a web application firewall (WAF, a filter that blocks malicious web requests).
The security impact is architectural, not just financial. In a typical web system, security is spread across several layers:
- DNS (the system that points your domain to the right service)
- CDN or edge proxy (a front door that caches content and can filter attacks)
- Load balancer or reverse proxy (the traffic distributor in front of your app)
- App hosting (where your code runs)
- Database and object storage (where your data lives)
- Identity, logging, backups, and alerting
A downgrade can change what sits at one of those layers, or remove the layer entirely. For example:
- Replacing a managed database with a self-hosted VM (virtual machine, a rented server) means you now own patching, backups, encryption settings, and access control.
- Moving from isolated app instances to shared hosting can put your app closer to other customers' workloads, increasing "blast radius" (how much damage one compromise can cause).
- Dropping a CDN/WAF tier may expose your origin server directly to the internet.
- Losing audit logs means an attack may still happen, but you can no longer prove what happened or respond quickly.
Here is a simplified request flow showing where those controls often live:
View as text
[User Browser] ---- 1. HTTPS request ----> [DNS/CDN/WAF] [DNS/CDN/WAF] ---- 2. allowed traffic ----> [Load Balancer] [Load Balancer] ---- 3. app request ----> [App Service] [App Service] ---- 4. SQL query ----> [Managed Database] [App Service] ---- 5. write logs ----> [Logs/Monitoring] [App Service] ---- 6. store files ----> [Object Storage]
If you move to a cheaper plan, one of those boxes may disappear, become shared, lose features, or stop being managed for you.
How it actually works
Let's walk through one realistic example: a company moves from a managed app platform plus managed Postgres (a common SQL database) to a single cheaper VM because the monthly bill looks lower.
The starting point
Before the move, the setup looks like this:
- Domain points to a CDN/WAF
- CDN/WAF forwards only HTTPS traffic to the app platform
- App platform runs the web app and applies security patches to the host automatically
- Managed Postgres accepts connections only from the app platform's private network
- Nightly backups are enabled in the database dashboard
- Logs go to a central logging screen with 30 days of retention (how long logs are kept)
This is not magically secure, but several security jobs are being done for the team.
The downgrade decision
The cheaper plan is a single VM with public internet access. The team installs nginx (a web server and reverse proxy), the app, and Postgres on the same machine.
The monthly line item drops. But several protections changed at once:
- Network exposure changed. The VM often gets a public IP. If firewall rules are not recreated, ports like
5432for Postgres or22for SSH (remote admin access) may be reachable from the internet. - Patching responsibility moved. On a managed platform, the provider patched the host OS or runtime. On the VM, someone must now apply updates.
- Backups may no longer be automatic. If no backup job is created, a ransomware event or accidental deletion can become permanent data loss.
- Secrets handling changed. Environment variables or database passwords may now live in flat files on disk instead of a managed secrets store.
- Logging got weaker. If logs are only stored locally on the VM, an attacker who gains access can delete them.
- Isolation got weaker. App, database, and admin access are now on one machine. One compromise reaches everything.
End-to-end example: a bot scans the internet
Step by step, here's how the security reduction becomes real.
- A bot scans public IP ranges looking for open ports.
- It finds your new VM because port
5432is open to the internet. - The bot tries common usernames and passwords against Postgres.
- If the password is weak, reused, or leaked elsewhere, it gets in.
- Because the database is on the same host as the app, the attacker now has customer data and can often pivot (move sideways) into app files, backups, or local secrets.
- Since logs are only on the same VM, the attacker deletes them.
- You discover the issue days later from customer complaints, not from an alert.
Notice what failed here: not one dramatic "hack," but the quiet removal of several controls that used to exist by default.
When to use it (and when not to)
Cheaper plans are not automatically wrong. They can be fine for low-risk systems, internal tools, prototypes, or static sites. The key question is whether the lower plan removes controls you actually need.
| Scenario | Recommendation |
|---|---|
| Marketing site with no login, no customer data, and content deployed from a repo | A cheaper plan is often fine if HTTPS, DNS security, and backups for content still exist. |
| Internal prototype used by 5 people, fake data only | Downgrading can be reasonable if you accept downtime and limited logging. |
| Customer-facing app with logins and personal data | Usually do not downgrade unless you can preserve WAF, backups, patching, logging, and restricted database access. |
| App subject to compliance requirements or customer security reviews | Avoid cheaper plans that remove audit logs, encryption controls, retention settings, or role-based access control (RBAC, permissions by job role). |
| Team has no one who patches servers, rotates keys, or tests restores | Stay with managed services. A cheaper unmanaged plan often becomes less secure very quickly. |
| You want to save money by removing staging, reducing overprovisioned capacity, or rightsizing storage | Good candidate. This cuts cost without necessarily removing security controls. |
You probably don't need the more expensive plan if:
- The system is mostly static content.
- There is no sensitive data.
- Downtime is acceptable.
- You already have equivalent controls elsewhere.
You probably should keep the higher plan, or replace its protections carefully, if:
- Users upload data, log in, or pay you.
- You need incident investigation, auditability, or customer trust evidence.
- Your team does not want to operate servers directly.
Trade-offs
Every security benefit has a cost, and every cost saving usually removes some protection.
- Managed patching and maintenance reduces the chance of known-vulnerability exposure.
- Cost: higher monthly bill and less low-level control.
- Private networking keeps databases and admin endpoints off the public internet.
- Cost: more expensive tiers, more networking complexity, sometimes more latency between regions.
- WAF/CDN protection blocks common attacks and absorbs traffic spikes.
- Cost: extra spend, more moving parts, and occasional false positives that block real users.
- Centralized logging and longer retention improves detection and investigation.
- Cost: storage cost, alert tuning work, and operational noise.
- Backups and point-in-time recovery reduce the impact of mistakes and ransomware.
- Cost: storage cost and the need to test restores.
- Dedicated or isolated environments reduce cross-tenant risk (risk from neighboring customers on shared systems).
- Cost: higher infrastructure spend and sometimes lower elasticity.
- Managed databases and object storage remove a lot of operational burden.
- Cost: potential vendor lock-in (harder to move later) and less custom tuning.
A useful way to think about it: cheaper plans often trade provider responsibility for your team's responsibility. If your team does not pick up that work explicitly, security drops.
In practice
Below are concrete examples of controls teams often need to recreate after a downgrade.
Example 1: Restrict database access with a host firewall
Dashboard path first: in your provider's dashboard, open the VM or server, then find the firewall or networking section (for example, a menu like "Networking → Firewall Rules" or "Security → Inbound Rules"). Add rules that allow:
80/tcpand443/tcpfrom the internet if this server must serve web traffic22/tcponly from your office IP or VPN IP if you need SSH5432/tcpfrom no public source unless another private app server needs it
CLI version on Ubuntu using UFW (Uncomplicated Firewall, a simple Linux firewall):
⚠️ If you are connected over SSH and add firewall rules in the wrong order, you can lock yourself out of the server and cause downtime. Add the SSH allow rule before enabling the firewall.
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw deny 5432/tcp
sudo ufw enable
sudo ufw status verbose
This opens web traffic, keeps SSH available, and blocks public Postgres access. Gotcha: if your app server is on a different machine, replace the blanket deny with a rule allowing only that private IP or private network range.
Example 2: Bind Postgres to localhost only
If your app and database run on the same VM, the safest default is to stop Postgres from listening on the public network at all.
⚠️ Editing database config incorrectly can prevent your app from connecting. Do this during a maintenance window if the app is live.
Typical file path on Debian/Ubuntu:
# /etc/postgresql/16/main/postgresql.conf
listen_addresses = '127.0.0.1'
password_encryption = scram-sha-256
ssl = on
And in the client authentication file:
# /etc/postgresql/16/main/pg_hba.conf
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256
host all all 0.0.0.0/0 reject
Then reload the service:
sudo systemctl reload postgresql
sudo systemctl status postgresql --no-pager
This tells Postgres to accept connections only from the same machine and reject all public IPv4 addresses. Gotcha: if you later move the app to another server, this setting will break connectivity until you allow the new private address explicitly.
Example 3: Keep nginx from exposing internal details
If you replace a managed app platform with your own nginx reverse proxy, set a minimal hardening baseline.
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
server_tokens off;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
This terminates HTTPS and forwards traffic to an app running locally on port 3000. Gotcha: security headers help, but they do not replace patching, access control, or a WAF.
A practical downgrade checklist
Before approving a cheaper plan, ask your agency or provider to answer these in writing:
- Where do backups live, and how do we restore one?
- Are database and admin ports reachable from the public internet?
- Who applies OS and runtime patches, and how often?
- Where are logs stored, and can an attacker on the app server erase them?
- Do we still have HTTPS certificates, renewal, and redirect to HTTPS?
- What security controls are being removed compared with today?
If those answers are vague, the savings are probably buying hidden risk.
Further reading
- OWASP Top 10
- PostgreSQL Documentation: "Client Authentication" and "Server Configuration"
- nginx documentation: "Beginner's Guide" and "ngx_http_proxy_module"
- CIS Benchmarks for Linux and PostgreSQL
- The "HTTP Security Headers" articles in the MDN Web Docs
This article was written by an AI system and published pending human review. Verify anything you intend to act on.
Have a project in mind?
Get an instant AI price estimate for it, or talk directly to our team.
One email a month on what we learn building with AI