2025-08-06

Building a Secure Baseline for a New Engineering Company

When a new engineering company stands up its first production systems, security work competes directly with shipping velocity. Founders feel that tension in every planning meeting. The teams that stay out of trouble rarely begin with exotic detection platforms or a large governance program. They begin with a boring, enforceable baseline: controlled remote access, least privilege for people and machines, disciplined secrets handling, and enough logging to reconstruct events when something goes wrong.

This guide is written for founding engineers and early platform owners who need a secure baseline that can survive the first year of growth. It is intentionally practical. Every control below should be implementable in days rather than quarters, and should remain meaningful after you hire your tenth engineer. Think of the baseline as a contract with your future selves: when a feature request would weaken it, you do not grant a permanent exception—you grant a time-boxed exception with an owner, a ticket, and a review date.

Millennium Science works with teams that are building serious infrastructure without enterprise headcount. The patterns here reflect what consistently reduces early risk without pretending a five-person company can operate like a regulated bank. If you adopt only a fraction of this guidance, prioritize the sections on SSH, secrets, privilege separation, and restore-tested backups.

Why baselines beat endless checklists

Security checklists grow without bound because every auditor, vendor, and well-meaning engineer adds another row. A baseline is different. It is the minimum set of controls you refuse to ship without. That cultural distinction matters more than any single product choice. Checklists describe aspirations. Baselines describe gates.

For a young company, the highest-leverage baseline areas are remote access, identity and privilege, secrets, workstation and server hardening, logging, and backup integrity. Get those right and you sharply reduce the chance that a compromised laptop, a leaked continuous-integration token, or a mispublished cloud storage bucket becomes an existential incident. You also create muscle memory for harder controls later.

Write the baseline down in a short internal document. Keep it under three pages. Link to the repositories, cloud accounts, and SaaS admin panels it covers. Revisit it when architecture changes and when people change. A baseline nobody can find is not a baseline.

SSH and remote access hardening

Secure Shell remains the default administrative path for Linux fleets across cloud providers and colocation alike. That longevity makes it a durable target for credential stuffing, key theft, and opportunistic internet scanning. Harden SSH early, before tribal knowledge and emergency exceptions accumulate into permanent unofficial policy.

Prefer identity-bound access over shared keys

Avoid a single shared bastion private key that lives in chat history or a shared drive. Prefer short-lived certificates or single sign-on backed SSH where your stack allows it. If you must use static keys, issue per-engineer keys, keep private material in hardware-backed security keys or encrypted agents, and revoke keys on the day someone leaves—not the week after the offboarding checklist is remembered.

  • Disable password authentication and root login over SSH on every internet-reachable host.
  • Restrict source networks; place administrative SSH behind a bastion or an identity-aware proxy.
  • Use separate credentials for humans versus automation and label them in your inventory.
  • Log successful and failed authentications centrally from the first production day.
  • Rotate or expire access on a calendar, not only after incidents force the issue.
  • Disable unused authentication methods and keep cryptographic algorithms within current recommendations from your OS vendor.

Bastions, session audit, and break-glass

A single hardened bastion—or a small highly available pair—is easier to monitor than dozens of internet-facing SSH listeners. Keep the bastion image minimal. Patch it aggressively. Treat interactive sessions as auditable events, including who assumed which role and which target hosts they reached. If your environment supports session recording for privileged access, enable it for production paths and protect the recordings with the same care you give to backups.

Maintain a break-glass path that is offline, documented, and tested quarterly. Identity providers fail. Single sign-on integrations break during the exact outage you are trying to fix. The day that happens, a tired engineer will invent a worse access path under pressure unless you have already rehearsed the approved emergency path. Testing break-glass is not bureaucracy; it is how you keep emergencies from creating permanent backdoors.

Least privilege for people and workloads

Least privilege fails when it is treated as a one-time identity ticket opened during onboarding. It succeeds when every production role has an owner, a purpose statement, and a review cadence. Start with role families rather than individual exceptions: read-only observer, deployer, on-call operator, and administrator. Map cloud identity and access management policies, Kubernetes roles, and SaaS administrative rights onto those families so newcomers receive the smallest role that still lets them complete their work.

Elevation should be temporary and logged. Standing administrator rights for every engineer feel efficient in week one and expensive in year two. Just-in-time access tools help, but even a manual process with a tracked ticket and an expiry date is better than immortal admin group membership.

  • Separate human identities from machine identities in every cloud and SaaS console.
  • Prefer assumed roles and workload identity over long-lived access keys in continuous integration and on servers.
  • Require change tickets or dual control for destructive production actions where practical.
  • Review admin group membership monthly while the company is small—reviews are still cheap at that scale.
  • Remove standing access to production data stores unless a role truly requires continuous access.
  • Document which roles can create new roles; privilege creation is itself a privileged action.

Secrets hygiene that humans can follow

Most early incidents at young companies are not advanced malware stories. They are leaked environment files committed to git, tokens printed in continuous-integration logs, application programming interface keys captured in screenshots, and credentials pasted into tickets. Secrets hygiene is culture reinforced by tooling, not tooling alone.

  1. Prohibit secrets in git and enforce the rule with pre-commit scanners plus server-side checks on protected branches.
  2. Store production secrets in a dedicated secrets manager or a key-management-service-backed cloud secret store.
  3. Issue short-lived credentials where platforms support them, including instance roles and OpenID Connect federation for continuous integration.
  4. Rotate anything that has ever been shared in chat, email, or an access-control-list-free password manager note.
  5. Document emergency rotation steps before you need them at two in the morning.
  6. Treat screenshots and screen shares as potential secret exfiltration paths during pairing sessions.

Treat continuous integration and continuous delivery as a privileged identity. Pipelines that can deploy should not automatically be able to read customer data stores. Split deploy roles from data-access roles early. Merging them later is painful, politically hard, and often postponed until after an incident makes the debt obvious.

Developer laptops deserve attention as well. Full-disk encryption, automatic screen locks, and a policy against syncing production secret files into personal cloud drives prevent a lost device from becoming a customer notification event. Keep local copies of production secrets rare and short-lived.

Host, container, and workstation hygiene

Whether you run virtual machines, managed Kubernetes, or a mix, keep base images small and intentional. Unattended packages become unattended vulnerabilities. Prefer immutable or replaceable nodes over long-lived pets that accumulate manual fixes nobody remembers to document.

  • Use minimal operating system images and remove unused services before the first deploy.
  • Enable automatic security updates for non-breaking patches where your risk model allows it.
  • Inventory listening ports regularly; unexplained listeners deserve investigation, not folklore.
  • Keep a simple software bill of what runs in production—even a maintained spreadsheet beats ignorance.
  • Rebuild golden images on a cadence so security patches are absorbed without heroic weekends.
  • Apply disk encryption for portable engineer machines and for disks that hold customer data at rest.

Container runtimes should default to non-root users, dropped capabilities, and read-only root filesystems where applications allow it. These settings do not replace patching, but they raise the cost of a successful application compromise.

Logging basics that pay off during incidents

You do not need a full security information and event management platform in week one. You do need durable logs for authentication, administrative actions, application authorization failures, and network edge events. Ship them somewhere an attacker cannot trivially delete after compromising an application host. Object storage with restricted delete permissions, or a managed logging service with a separate administrator role, both work.

A minimum useful set includes identity-provider sign-in logs, SSH or bastion session logs, cloud audit trails, reverse-proxy access logs, and application authorization failures. Retain them long enough to investigate a slow intrusion—weeks at minimum, months if budget allows. Verify early that you can answer a simple question under time pressure: who changed production yesterday, and from where?

Alerting can start small. Unexpected administrator logins, bursts of failed authentication, changes to identity policies, and public exposure of storage buckets are high-signal beginnings. Resist the urge to alert on everything; noisy alerts train humans to ignore the console.

Backups and restore drills

Backups that have never been restored are aspirations. Schedule a restore drill for your most important datastore within the first month of production traffic. Measure how long restore takes and who knows how to perform it. Encryption keys for backups must be available to more than one person and unavailable to the widest possible set of application roles.

A thirty-day founding baseline plan

  1. Week one: inventory internet-facing services, lock down SSH, enable multi-factor authentication everywhere the product supports it, and turn on cloud audit logging.
  2. Week two: move secrets out of git and chat; create clear separation between deploy roles and human administrator roles; enable secret scanning on default branches.
  3. Week three: centralize authentication logs; practice retrieving them under time pressure; remove unused public cloud exposures discovered in week one.
  4. Week four: write a one-page incident contact sheet, test restore from backups, schedule the first formal access review, and publish the three-page baseline document to the engineering wiki.

What you can defer without being reckless

You can defer exotic detection content packs, full service-mesh networking, and elaborate data-classification programs until you have more people—provided the baseline above is real and enforced. Do not defer multi-factor authentication, backup restore tests, secret scanning, and administrator access reviews. Those controls are inexpensive relative to their failure modes and disproportionately valuable for early-stage companies.

Vendor security questionnaires will eventually ask for controls you have deferred. Answer honestly, show the roadmap, and keep shipping the baseline. Overstating maturity helps nobody when an incident report is later compared against marketing language.

Closing

A secure baseline is not a maturity badge for marketing pages. It is how a small engineering company buys time: time to build product without discovering that a forgotten key has been abusing cloud resources or exfiltrating customer data for months. Start with SSH, privilege, secrets, logs, and restore-tested backups. Write the rules down. Enforce them kindly but consistently.

Growth stresses every control you leave informal. Formalize the few that matter before the company is too busy to care. Treat this baseline as a living document: revise it when architecture changes, and audit it when people change. The companies that look “lucky” in their first two years often simply refused to normalize obvious insecurity.