Prometheus security hardening starts with the endpoints teams forget to count
If a Prometheus server was deployed for monitoring and now needs an access review or a security sign-off, start by listing every listener it opens, not only the main web port. Harden every HTTP listener with TLS and authentication, keep the admin and lifecycle APIs switched off, and control what exporters and scrape configurations are allowed to reach. Those three steps answer most of what an assessor will ask. Teams usually count the web UI and stop there, which leaves the rest of the attack surface unexamined. For each component, write down who can reach it, over which protocol, and what data or actions it exposes.
Each part of a Prometheus deployment carries different risk. The web UI and HTTP API let users run PromQL queries and, depending on flags, change runtime state. The admin API is disabled by default. The --web.enable-admin-api flag enables destructive operations, and --web.enable-lifecycle enables reload and shutdown endpoints. Exporters such as SNMP and Blackbox take targets from URL parameters, so anyone with HTTP access to them can make them send requests to arbitrary endpoints. Connections to Alertmanager carry alert content and need their own transport settings. The scrape configuration often holds credentials for targets, which makes it a secrets store as well as a list of endpoints. The project's security model states that basic authentication without TLS exposes credentials in cleartext, so TLS comes before basic authentication on every endpoint.
Prometheus values reliability over precision, and its documentation says it is not a good choice where 100% accuracy is required, such as per-request billing. That is a design choice about how the system behaves, and it does not count as a security control. Document it as a known property of the platform, then pair it with the controls above so an assessor sees a deliberate position. Confirm early with your auditor which framework applies and what evidence they expect. DeployOpen plans and implements these controls and prepares the configuration, test results and records an assessment needs. It does not issue audit reports, attestations or certifications. Independent auditors and certification bodies perform that work.
Which Prometheus components expose a hardening surface
A Prometheus deployment exposes several listeners, APIs and outbound connections, and each one can be reached or misused in a different way. The cards below cover the settings and extension points that need an explicit decision before go-live, so that every path into or out of the server has a known owner, an authentication method and a documented reason for being open.
Web listener, TLS and basic authentication
The web configuration file controls the HTTP listener that serves the UI, the query API and the metrics endpoint. Decide whether TLS is enabled, which minimum TLS version and client certificate rules apply, and whether HTTP basic authentication is configured with bcrypt-hashed passwords. Basic authentication without TLS sends credentials in cleartext, so confirm both settings are applied together and verify them from a host outside the monitoring network.
Admin API flag
The --web.enable-admin-api flag turns on administrative HTTP endpoints that perform destructive operations, such as deleting series from the local database. These endpoints are disabled by default. Keep them off in production unless a named runbook needs them, and if they are required, restrict them to a small set of operator networks behind authentication.
Lifecycle flag
The --web.enable-lifecycle flag enables endpoints that reload configuration and shut the server down over HTTP. Anyone who can reach those endpoints can stop monitoring or change the running configuration without a change record. Decide whether reloads will happen through a process signal or a configuration management job instead, and leave the flag off if that path works for your team.
Scrape job authentication blocks
Each scrape job can carry its own credentials, bearer tokens, TLS settings and certificate authorities for the targets it polls. These values are stored in the Prometheus configuration file, so they are readable by anyone who can open that file. Decide where secrets are kept, who can read the file, and how credentials are rotated when a target team changes its password or token.
URL-parameter exporters
Exporters such as SNMP and Blackbox accept the target to probe as a URL parameter rather than a fixed setting. The Prometheus security model warns that anyone with HTTP access to these exporters can make them send requests to arbitrary endpoints, which can reach internal hosts the operator never intended to expose. Restrict who can call these exporters, limit which targets they may probe, and review their module definitions.
Outbound connections to Alertmanager and remote endpoints
Prometheus sends alerts to every configured Alertmanager instance and may send samples to remote write endpoints or read from remote read endpoints. Each outbound connection needs TLS verification, authentication and a known destination, and remote endpoints receive metric labels that can reveal internal names. List every destination, confirm certificate checks are on, and treat remote storage as a data store with its own access controls.
Which hardening options fit your environment and what each costs to run
This table compares the main hardening choices for a Prometheus deployment and what each one asks of your team after go-live. Read each row against your own scrape topology, identity setup and change process, then use the operational cost column to judge which option your team can keep running. The main takeaway is that most choices trade a small setup effort for an ongoing duty such as certificate rotation, proxy patching or controlled restart windows.
| Option | When it fits | Operational cost to run |
|---|---|---|
| Client certificates for scrapes and API access | Scrape targets and API clients you control and can provision with certificates, with a PKI or internal CA already in place. | Certificate issuance, renewal and revocation for every scraper and client, plus updating Prometheus configuration when certificates change. Confirm how your CA handles rotation before committing. |
| HTTP basic authentication for scrapes and API access | Simple environments where a small number of clients need credentials and TLS is in place on every endpoint. | Password rotation and secure distribution to each scraper. Credentials are bcrypt-hashed in the configuration, but basic authentication without TLS exposes credentials in cleartext, so TLS is a prerequisite. |
| Reverse proxy authentication in front of the web UI | Teams that need user-level login, central identity or SSO for the Prometheus web UI and API, which has no built-in single sign-on. | Ongoing proxy patching, identity provider integration, session and access policy upkeep, and a separate component to monitor. Confirm proxy support for your identity provider with the proxy vendor. |
| Direct listener exposure of the web UI | Only isolated internal networks where access is limited at the network layer and no user-level identity is required. | Lower software upkeep, but every access control depends on network segmentation. Reviewers will expect evidence of that segmentation, and changes to firewall rules become part of the operating routine. |
| File-based secrets in scrape configuration | Any deployment where credentials, tokens or passwords appear in scrape configuration, which should be the default for shared or version-controlled configuration. | Managing file ownership and permissions on secret files, and coordinating secret rotation with configuration reloads. Permissions drift is the most common recurring issue, so include it in change reviews. |
| Inline values in scrape configuration | Only throwaway test setups where the configuration never leaves a restricted host and is not copied into version control or backups. | Low setup effort, but credentials are readable by anyone with access to the configuration file, and every copy of that file (backups, repositories, tickets) becomes a credential store to rotate and protect. |
| Lifecycle endpoint enabled for reload | Environments with frequent rule or target changes that need a reload without a process restart, and where the endpoint is reachable only from controlled hosts. | The endpoint is disabled by default, so enabling it adds an admin surface to protect with network restrictions and authentication. Reloads still need a change record and a rollback path. |
| Restart to apply configuration | Environments with infrequent changes, or where the lifecycle endpoint is not acceptable under your policy. | Each change creates a restart window, during which scrapes and rule evaluation pause. Plan maintenance windows and confirm that alerting coverage is acceptable while the service restarts. |
Prometheus security hardening steps in the order that avoids lockouts
This sequence hardens a Prometheus deployment one control at a time, starting from a full inventory and ending with a retest. Each step closes with a check, so your team can confirm access still works before the next control is added.
Inventory every listener and outbound connection
Your platform team lists every port Prometheus listens on, including the web listener, and every outbound connection it makes to scrape targets, Alertmanager, remote write endpoints and service discovery sources. Check the running process and the host firewall rules as well as the configuration file, because flags and defaults can open more paths than the file shows. Record an owner and a reason for each entry. The step is done when every listener and destination has a documented reason, and anything unexplained is flagged for review before changes begin.
Decide and document the access model
Work with the service owner to define who needs the web UI, the query API, Alertmanager, operator shell access and each scraper, and from which networks. Name at least one break-glass account and record where its credentials are stored, so a mistake in a later TLS or authentication change does not lock every operator out. Keep this model in a short document that the owner signs off. The output is a written access table that each later step is checked against.
Configure TLS on the web listener
Create a web configuration file that enables TLS on the web listener, sets the minimum version to TLS 1.2 and points to certificates issued by your internal certificate authority. Stage the change on a test instance first and keep the current working configuration as a rollback copy. Confirm that the listener accepts a TLS 1.2 handshake and that a TLS 1.1 handshake fails, for example with a standard client that lets you pin the protocol version. The step is done when both results match this expectation.
Add client certificate or bcrypt authentication
Add either client certificate authentication or HTTP basic authentication with bcrypt-hashed passwords to the web configuration file. Basic authentication should only follow the TLS step, because without TLS credentials cross the network in cleartext. Generate the bcrypt hash on the host, keep one tested credential available for the operator, and reload or restart the test instance. Confirm that an unauthenticated request to the web UI and API returns an authentication error, and that a request with valid credentials succeeds.
Move scrape credentials into restricted files
Replace inline passwords, bearer tokens and secrets in the Prometheus configuration with file references such as password or bearer token file settings. Place each secret file in a directory owned by the Prometheus service account, with permissions that allow only that account to read it. Keep the rollback copy of the configuration outside this directory. The check is a directory listing showing owner-only read permissions on each secret file, plus a configuration review confirming that no secret value appears inline.
Confirm admin and lifecycle APIs are disabled
Confirm that the startup flags do not enable the admin API or the lifecycle endpoints, which are disabled by default. Review the service unit or container definition, since these flags are often added during troubleshooting and left in place. Then send an authenticated reload request and an authenticated admin request, such as a series deletion, to the test instance. The step passes when the reload returns an error because the lifecycle flag is off and the admin operation is refused.
Restrict exporter access and URL targets
Exporters such as SNMP and Blackbox take their target from a URL parameter, so anyone who can reach them can make them send requests to other endpoints. Limit exporter access to the Prometheus server's address with host firewall rules or a proxy, and restrict which modules and target ranges each exporter will accept where its configuration allows it. Confirm this with the exporter owner, because the exact options depend on the exporter version. The check is a request from an unapproved host that fails, and a request for an unapproved target that is refused.
Restart and retest every control
Apply the validated configuration to the production instance during a window your change process approves, and keep the rollback copy ready. After the restart, check the targets page to confirm that scrapes are healthy and that the expected endpoints respond. Then rerun the failing-request, TLS version, file permission and API checks from the earlier steps against production. The step is complete when every check returns its expected result and the access table from the second step matches what operators can actually reach.
How to stop URL-parameter exporters from becoming open request proxies
The core risk is simple: exporters such as SNMP and Blackbox take their targets from URL parameters, and the Prometheus security model warns that anyone with HTTP access to them can make them send requests to arbitrary endpoints. A Blackbox exporter that will probe any address it is handed can be used to reach internal services, cloud metadata endpoints or hosts on a network segment the requester should never touch. Hardening this class of exporter is therefore about controlling who can reach the exporter, which targets it can be asked to contact, and what its configuration permits. Treat each exporter as a small proxy with network reach, not as a passive metrics endpoint. Start with exposure. Bind each exporter to localhost or to a private interface that only the scraping Prometheus server can reach, so it is never listening on a routable address by default. Then apply network policy so that only the Prometheus server's address is allowed to connect to the exporter port. In a Kubernetes or cloud environment, this means a network policy or security group rule that names the Prometheus workload or subnet explicitly. Ask your team to list every host that currently reaches each exporter port, because scrapers from old monitoring systems often remain allowed long after a migration. Next, put authentication in front of each exporter. Prometheus can present TLS client certificates or basic authentication credentials when it scrapes, and many exporters can be configured to require them. Confirm which authentication options your exporter version supports, because they vary by exporter and release. Where an exporter cannot authenticate natively, a reverse proxy that enforces mutual TLS or credentials is the usual fallback. Keep credentials out of plain scrape configuration files where possible, since a leaked scrape file would otherwise hand over both the target list and the secret. The most specific control is restricting which targets each scrape job may request. Many exporters support an allow-list of modules or targets, or let you define named modules whose probe parameters are fixed, so a job can only ask for a set of approved destinations. The exact mechanism depends on the exporter and version, so confirm it against that exporter's own documentation before relying on it. Pair this with a review of the exporter's module definitions: remove unused modules, confirm that each one specifies what it may probe, and check that no module passes arbitrary parameters through to the request. Finally, make these checks repeatable. Record the allowed scrapers, the authentication method, the permitted modules and the target list for each exporter in your change records, and test from a host outside the allow-list to confirm that the connection is refused. Re-run the same test after each exporter upgrade, because changed defaults or new parameters can silently reopen a path that was closed. Ask any implementation partner to show the exact configuration and the negative test results for each exporter in scope.
What drives hardening effort and how to keep each part small
This table lists the factors that expand Prometheus hardening work, from scrape credentials to certificate authorities and assessor evidence, with a practical way to shrink each one. Read each row as a lever: the driver explains why effort grows, and the reduction explains how a team keeps that part bounded. The main takeaway is that most effort comes from repetition across targets and environments, so templates, one authority per environment and generated evidence matter more than any single setting.
| Driver | Why it changes effort | How to keep it small |
|---|---|---|
| Scrape jobs and targets needing credentials | Each job may carry TLS settings, basic auth or bearer credentials, and each target added or rotated must be updated and checked. | Template scrape configs from a small set of job definitions, and keep credentials in referenced files rather than inline in each job. |
| Exporters that accept URL targets | Exporters such as SNMP and Blackbox take targets from URL parameters, so every exporter endpoint needs access controls and a defined list of allowed destinations. | Restrict exporter access to the Prometheus servers only, and maintain one reviewed target list per exporter job instead of ad hoc parameters. |
| Certificate authorities and rotation schedules | Each authority and each expiry date adds a renewal task, a trust path to update and a failure mode when a certificate lapses. | Use one certificate authority per environment and align rotation schedules so renewals happen in one planned window. |
| Environments that must match | Development, staging and production each carry their own TLS, authentication and configuration, and drift between them hides defects until go-live. | Build all environments from the same version-controlled configuration with only variable values changed per environment. |
| Reverse proxy or SSO layer already in place | Prometheus has no built-in single sign-on, so an existing authenticating proxy can be reused, while a new one adds a component to configure, patch and test. | Confirm early whether an authenticating reverse proxy already fronts the web UI and API, and reuse it rather than adding a second layer. Confirm with your identity team how the proxy handles the admin and lifecycle paths. |
| Admin and lifecycle API exposure | The admin APIs are disabled by default, but enabling either flag creates destructive or reload endpoints that need separate review. | Keep both flags off unless a documented need exists, and record any exception with an owner and a review date. |
| Evidence a compliance assessor will ask for | Assessors typically ask for configuration, access settings, certificate records and change history, and collecting these by hand for each environment repeats the work at every audit. | Generate evidence from configuration files kept in version control, so each control maps to a file, a commit and a deployment record. Confirm the exact evidence list with your assessor before building it. |
How hardening changes for single node, HA pair, Kubernetes and air-gapped deployments
On a single server, hardening is mostly about one host: what it listens on, who can read its files, and whether its certificates can be recovered. Every control lives in one place, so there is no second copy that can drift out of step.
- Listeners: Bind the web listener to the interface your scrapers and reverse proxy use, then confirm from outside the trusted network that no unexpected port answers.
- Admin and lifecycle APIs: Leave --web.enable-admin-api and --web.enable-lifecycle off unless a documented runbook needs them. If they are needed, limit them to a local management path.
- File permissions: Run the service under a dedicated account. Make the configuration and the TLS private key readable only by that account and administrators, and keep the data directory off shared mounts.
- Certificate backup: Keep copies of the server certificate, private key and client CA bundle in your secrets vault or an encrypted backup set. Restore them onto a spare host at least once to prove the copies work.
After any change, restart the service and confirm it comes back with the same TLS and authentication settings, and check that the backup restore has actually been tested.
Two Prometheus replicas scraping the same targets do not share storage. Each keeps its own local database, so each replica has to be configured and checked on its own, even when the two look identical from the outside.
- Matching controls: Apply the same TLS, client certificate and basic authentication settings to both replicas, then verify each one separately with its own request.
- Single source of configuration: Keep the configuration in version control and deploy both replicas from the same revision, so a change cannot reach only one of them.
- Lifecycle flags on both: Confirm that the admin and lifecycle flags are off on each replica. A reload endpoint enabled on one replica is an exposure even if the other is locked down.
- Separate data stores: Treat each local data directory as its own database, with its own backup schedule, restore test and file permission check.
- Alertmanager targets: Point each replica at every Alertmanager instance directly, as the Alertmanager documentation describes for clustered setups, and verify that both replicas list the same instances.
After any change, run the same checks against each replica by its address and compare the effective configuration of the two.
In a cluster, many hardening decisions move to the platform: how secrets reach pods, which pods can reach exporters, and which service accounts the workloads run under. The exact behavior depends on your cluster version and network plugin, so confirm each control against your own environment before relying on it.
- Secrets as mounted files: Source TLS keys, basic authentication password hashes and remote write credentials from the cluster's secret mechanism. Mount them as files into the Prometheus pods and reference those paths in the configuration.
- Exporter network policy: Use a network policy that allows only the Prometheus workloads to reach exporter pods. Block other ingress to exporters, especially those that accept URL targets, such as SNMP and Blackbox.
- Rendered manifests: Check that the admin and lifecycle flags are absent from the container arguments in the rendered manifest, not only in the chart values you wrote.
- Secret access: Limit read access to secrets with role-based access controls, and make sure the Prometheus service account can read only the secrets it needs.
- Enforcement: Confirm that your network plugin enforces network policy objects. A policy that is stored but not enforced protects nothing.
After each rollout, inspect the running pods, their mounted secrets and the effective policies with your cluster's own tooling.
Without internet access, hardening depends on what you can verify inside your own boundary. Certificates come from an internal authority, packages arrive through a controlled transfer process, and nothing should try to reach an external host at runtime.
- Internal certificate authority: Issue server and client certificates from your internal authority. Distribute its root to every scraper and to any operator tooling, and plan rotation well before expiry.
- Offline package verification: Check published checksums and signatures against a copy of the project's keys that you obtained through an approved channel. Record each verification result in the change log.
- Mirrored artifacts: Copy the required container images, packages and exporter binaries into the enclave's internal registry or repository, and keep an inventory of their versions.
- No external dependencies: Confirm the deployment makes no outbound calls for updates or telemetry, that the web UI loads without fetching external assets, and that any remote write target sits inside the boundary.
- Upgrade import procedure: Document how a new minor release or LTS patch is verified and imported, so security fixes can move into the enclave on your own schedule.
Test the deployment with egress blocked to confirm it starts, scrapes targets and sends alerts without any outbound connection.
Prometheus security hardening controls by endpoint
Each Prometheus endpoint and secret type needs its own control, because the exposure differs across the web UI, admin and lifecycle APIs, exporters, scrape credentials and outbound connections. Work through the cards in order to set TLS and authentication, switch off the APIs you do not need, and confirm that secrets are stored and permissioned correctly.
Web UI and query API
The web UI and query API can use TLS with client certificates or HTTP basic authentication with bcrypt-hashed passwords. Basic authentication without TLS sends credentials in cleartext, so enable TLS before relying on it. If you place an authenticating reverse proxy in front for single sign-on, remember that the security model notes Prometheus has no built-in CSRF protection on mutating endpoints, so limit which paths and methods the proxy forwards. Single sign-on design is covered in the sibling topic on SSO and authentication.
Admin API kept disabled
Admin HTTP APIs are disabled by default, and the --web.enable-admin-api flag turns on destructive operations. Keep the flag absent from every production service unit or container definition. If a maintenance task needs it, enable the flag only for the task window, remove it afterward, and record the change. Check your startup configuration after each deployment to confirm it has not returned.
Lifecycle endpoints limited to automation
The --web.enable-lifecycle flag exposes reload and shutdown endpoints. Keep it off unless a deployment pipeline needs to trigger configuration reloads. When it is required, restrict network access to those endpoints so only the automation host can reach them, then send a test request from an unapproved address to confirm it is refused.
Exporters that accept URL targets
Exporters such as SNMP and Blackbox take their targets from URL parameters. The security model warns that anyone with HTTP access to such an exporter can make it send requests to arbitrary endpoints, including internal services its host can reach. Bind each exporter to a scrape network or localhost, allow only Prometheus to reach it, and confirm which target addresses its host can route to.
Scrape credentials and secret files
Scrape configuration can hold basic authentication passwords, bearer tokens and OAuth client secrets. Reference password files and token files by path so secrets stay out of the main configuration file. Give those files owner-only read permissions for the Prometheus service account, keep them out of version control, and rotate them through your secrets process. Confirm the exact fields your Prometheus version supports in the configuration reference.
Alertmanager and remote endpoints
Connections to Alertmanager and to remote write or remote read endpoints carry alert payloads and metric samples, so each should use TLS and credentials stored as files. List every Alertmanager instance directly in the Prometheus configuration, as the Alertmanager documentation advises. For each receiver, confirm certificate validation and credential handling, and test the connection after every configuration change.
How to test Prometheus security hardening and confirm it fails safely
The goal of testing Prometheus hardening is to prove that every listener refuses access it should refuse, and that a failed check leaves the target down and visible rather than open. Run three groups of checks against a staging copy of the production configuration, then repeat the external scan after every change to the web configuration, the scrape configuration or the exporter deployment. Keep the test plan in the same repository as the configuration so the two cannot drift apart. The first group is an external reachability scan. From a host that should have no network path to Prometheus, scan every port the deployment exposes: the Prometheus web and API port, any exporter ports such as SNMP and Blackbox, and any sidecar or gateway listeners. Build the port list from the actual running processes and the host firewall rules, not from the design document, because listeners added during troubleshooting are the ones most often forgotten. Confirm that the scan from the unauthorized host returns no open application port, and that the same scan from an authorized monitoring subnet shows only the ports that subnet is meant to reach. The second group is functional checks. Confirm that a scrape succeeds when the configured TLS client certificate or basic authentication credentials are presented, and that the same request fails without them. Run both sides from the Prometheus host and check the target health page and the up metric, not only the HTTP status. Then run the negative checks: requests to admin and lifecycle endpoints should return errors unless those features were deliberately enabled, a cleartext basic authentication request must be refused on any listener where TLS is required, and an exporter called from an unauthorized host must not be able to reach an internal address it was not meant to query. Test the last case with an address you control, such as a logging endpoint on a test network, so the result is observable without probing production systems.
A safe failure looks like this: the bad request is rejected, the target is marked down, and an alert fires that someone is paged or ticketed for. The unsafe outcome is a server that accepts an unauthenticated request, returns metrics to an unknown caller or relays requests to arbitrary addresses. Write the expected result for each test before running it, so a pass means the outcome matched the written expectation, not that the output looked reasonable. Confirm the alert actually fires by stopping a test exporter or changing its credentials on purpose, and verify that the alert reaches the receiver your on-call process uses. A rejected scrape that produces no alert is a monitoring gap, and it should be treated as a failed test. Record the results in a form an auditor can follow. For each check, keep the date, the tester, the source host, the command or scan profile, the expected outcome, the observed outcome and a pointer to the raw output. Record the Prometheus version and the exact configuration version used for the run, including the web configuration file, scrape configuration and any reverse proxy settings. Auditors will ask which version was tested and whether that version is the one in production, so the test record and the deployed configuration should carry the same identifier. Store the configuration under version control and tag the commit that was tested. Confirm with your team which checks belong in your evidence set and how often they run. The scan, functional and negative checks can be scripted and rerun after each upgrade, which is useful because minor releases change defaults and the 6-week release cycle means changes arrive regularly. Ask the implementation partner, if one is used, to deliver the test scripts, the expected-results register and the evidence template as part of the agreed scope, and confirm in writing who reruns the suite after future upgrades.
Prometheus security hardening questions buyers ask before hiring help
How much does Prometheus security hardening cost?
Prometheus is licensed under Apache-2.0 and has no paid enterprise edition, so the cost comes from the hardening work, the infrastructure it runs on, and the people who operate it afterward. Who is paid for what: DeployOpen is paid for the scoped work, such as reviewing each Prometheus server, Alertmanager and exporter, configuring TLS and authentication, and verifying that admin and lifecycle APIs are off. Your organization covers hosts, certificates and internal review time. One-time versus recurring: the initial hardening is one-time, while re-checks after upgrades recur and can run under a retainer. DeployOpen does not publish a price list. Ask for a quote built from the written scope, with each endpoint group and environment listed as a separate line item.
What makes a Prometheus hardening project take longer?
The main drivers are the number of Prometheus servers, Alertmanager instances and exporters in scope, and how many of those accept URL targets from HTTP parameters, since those need extra access controls. Scope also grows with the number of scrape targets that need certificates or credentials, and with whether you already have an authenticating reverse proxy or must build one. Dependencies on people outside the project, such as certificate authority turnaround and change approval windows, often set the pace more than the configuration work itself. Ask for the timeline in the written scope, and confirm which of these items are included in the agreed deliverables and which need a separate decision.
What does our team need to provide before hardening starts?
Plan to provide the following before work begins:
- Server access: accounts with enough privilege to read configuration, change service files and restart or reload Prometheus, Alertmanager and exporters.
- A certificate authority: either your internal CA or a documented process to issue server and client certificates, since Prometheus supports TLS and client certificate authentication with TLS 1.2 as the minimum.
- Change windows: agreed times when configuration changes and restarts can happen in production.
- A scrape target inventory: a current list of jobs, targets, exporters and the teams that depend on them.
Confirm who approves changes and who owns the alerts that will be affected, so decisions are not delayed during the project.
Can our internal team harden Prometheus without an outside partner?
Yes, an internal team can do this if it has engineers who understand TLS, reverse proxies and Prometheus configuration reloads, and enough time to test changes without breaking alerting. The Prometheus security model documents the relevant controls, including keeping admin APIs disabled by default and not enabling lifecycle endpoints unless needed. The common gaps are exporters that take targets from URL parameters, basic authentication used without TLS, and endpoints that were enabled for a past troubleshooting session and never removed. An outside partner is most useful for independent verification, a documented baseline and a repeatable check after each upgrade. Decide based on your staff's capacity and on how much evidence your assessors will expect.
How often must Prometheus hardening be repeated after upgrades?
Repeat the relevant checks after every upgrade that changes configuration, flags, authentication or exporter versions, which means repeating them on your release schedule. Prometheus starts a new minor release cycle every 6 weeks, and a minor release generally stops receiving bug fixes after those 6 weeks. The long-term support line is the alternative: the current LTS line, 3.13, is supported until July 31, 2027, according to the Prometheus release cycle page. Each move to a new minor or LTS version should include a review of defaults, flags and TLS settings, then a quick re-test of the controls. The size of that re-test depends on what changed, so ask for a recurring check to be priced as its own item.
What does DeployOpen hand over when hardening is complete?
DeployOpen hands over the hardened configuration and the evidence that it was tested, with the exact list set out in the written scope. Expect the scope to name items such as the configuration files for each Prometheus server, Alertmanager and exporter; a record of which endpoints were tested and what changed; an operations guide covering certificate renewal, credential rotation and how to re-check after upgrades; and a list of open risks that remain outside the agreed work. DeployOpen prepares systems, controls and evidence for compliance assessments, but it does not issue audit reports or certifications. Independent auditors and certification bodies make those determinations. Confirm each deliverable, its format and who keeps the files before work starts.
Should we put a reverse proxy in front of Prometheus during hardening?
Usually yes for the web UI and API, because Prometheus has no built-in single sign-on and its security model notes there is no built-in CSRF protection on mutating endpoints. An authenticating reverse proxy can handle user login, enforce TLS and restrict which paths are reachable from which networks. Keep the proxy from exposing admin or lifecycle endpoints, and make sure scrape traffic is handled separately from interactive access. Be careful about how the proxy forwards headers and how it is configured to reach Prometheus, since a misconfigured proxy can weaken controls that Prometheus itself enforces. Confirm the design during scoping, because the choice of identity provider and proxy affects the work and the cost.
What to monitor, rotate, upgrade and document after hardening
Hardening is not finished at go-live. Three recurring tasks decide whether the controls keep working: rotating TLS certificates and scrape credentials before they expire, checking security settings after every upgrade, and keeping documentation current enough that someone else can run the system. Start by listing every TLS certificate and every credential used for scrapes, remote write, the web interface and Alertmanager, with its expiry date and the person accountable for renewal. Expiry is one of the most common ways a sound deployment breaks, because a lapsed certificate or password can stop scrapes or alert delivery and show up first as missing data. Confirm the renewal lead time with your certificate authority or internal PKI team, and schedule renewals well ahead of each expiry date.
Upgrades require a deliberate choice. A new Prometheus minor release cycle begins every six weeks, and after those six weeks a minor release generally stops receiving bug fixes, so a minor line you deploy will age quickly. The alternative is the long-term support line. The current LTS line is 3.13, supported until July 31, 2027, and LTS releases receive bug fixes for one year. The minor cycle delivers fixes and features sooner but requires an upgrade roughly every six weeks to stay on a supported release. The LTS line requires fewer upgrades, but you must plan the move to a later LTS line before 3.13 reaches end of support. Whichever path you choose, rerun the hardening checks after each upgrade: the TLS minimum version, the basic authentication file, the admin and lifecycle flags, exporter target restrictions, and TLS on Alertmanager and remote write. Read the release notes for changes to flags and web configuration before each upgrade.
Documentation lets the next engineer, auditor or partner verify the deployment without reverse-engineering it. Keep five records current. First, the endpoint inventory: every scrape target, exporter, Prometheus web endpoint, Alertmanager instance and remote write destination, with its protocol and listening interface. Second, the access model: who can reach each endpoint, through which authenticating proxy or network path, and which people hold admin rights. Third, the configuration files, including the main Prometheus configuration and the web configuration, kept under version control with reviewed changes. Fourth, the verification results: dated records of what was tested, how, and the outcome, so later changes can be compared against a known baseline. Fifth, the owner of each credential, with the system it unlocks and its renewal date. Keep secret values in your approved vault and reference them from the documentation without copying them into it.
DeployOpen can run this ongoing work as a retainer, covering certificate and credential renewals, post-upgrade verification, and updates to the inventory and access model. This is an option, not a requirement. If your own platform team will own the work, the same five records still apply, and the post-upgrade checklist should be agreed before the first upgrade. If you are weighing a retainer, ask for the scope in writing before work starts, including which upgrade and verification steps it covers and how credential ownership is split between your team and the provider.
How DeployOpen scopes, hardens and hands over Prometheus security work
DeployOpen plans, implements, hardens, documents and supports Prometheus inside the client's own infrastructure, including the cloud accounts, data centers or air-gapped networks where it runs. Work is agreed as a fixed scope in writing before it starts, and ongoing support is available as a retainer.
How we scope
- We inventory every Prometheus, Alertmanager and exporter endpoint and record which ones answer over HTTP today.
- We confirm which scrape targets use URL-parameter exporters such as SNMP and Blackbox, and who can reach them.
- The written scope names the TLS, authentication and admin-API settings to be changed, and which are out of bounds.
How we build
- We enable TLS with client certificate authentication on scrape and API endpoints, with TLS 1.2 as the minimum version.
- We keep the admin API and lifecycle endpoints disabled unless a documented operational need is approved, and we record that decision.
- We move scrape credentials and basic authentication secrets out of plain configuration and test that each endpoint rejects unauthenticated requests.
How we hand over
- We deliver configuration files, a test script for each hardened endpoint and a record of every change made.
- We document how to rotate certificates and credentials, and which steps need an approved change window.
- We walk the operations team through the runbook and confirm which version line is in use and how upgrades will be tested.
How we support
- Ongoing support can cover re-running endpoint tests after upgrades and when new exporters or targets are added.
- A retainer can include reviewing new scrape targets and exporter configurations before they reach production.
- Ask any provider which Prometheus version line the support covers and how security fixes on that line will be applied.

