Loki security hardening

Loki has no built-in authentication, so every endpoint needs a control in front of it. This page covers what to lock down, in what order, how to verify it and what to hand over.

On this page

Loki security hardening starts with what can reach the endpoints

If a logging stack that holds sensitive data is about to go live, or already has, the first question is who and what can reach it. Loki ships without an authentication layer, so hardening means controlling every endpoint, every tenant boundary, every storage bucket, every retention rule and every connection between components. Treat each of these as a separate attack surface that needs an owner, a configuration and a test. The endpoints are the first place to look. Loki has a push path, which log shippers use to send data, and a query path, which Grafana and other clients use to read it. Both are plain HTTP interfaces, and the documentation states that you must run an authenticating reverse proxy such as nginx, HAProxy, OAuth2 Proxy or Pomerium in front of it. Confirm before go-live that no write or read route is reachable from a network segment that has not been approved, including internal segments that look trusted.

Tenant isolation is the second boundary, and it is easy to misread. Loki is multi-tenant only when auth_enabled is set to true, and it identifies the tenant on every request through the X-Scope-OrgID header. That header is a routing label, not a credential. If the proxy in front of Loki does not set or verify it from an authenticated identity, any client that can reach the endpoint can name any tenant it likes. Decide how each user, team or service maps to a tenant, and make the proxy the only component that writes that header.

Retention is the third area, and the default works against you. The compactor applies retention, but retention is disabled by default, so logs are kept indefinitely until retention_enabled is set. Retention can be global, per tenant or per stream selector, and each stream rule must be at least 24 hours. For sensitive logs, the retention period is a data-minimization decision that someone must sign off on, and it should be set per tenant or per stream where the data class requires it. Confirm that the compactor is running, that retention is enabled and that deletion has actually happened in a test tenant.

Object storage is the fourth boundary. Loki writes compressed log chunks and its index to the bucket, so anyone who can read that bucket can read the logs without going through Loki at all. Review the bucket policy, the identities that can list or read objects, encryption at rest and access logging. The storage documentation recommends Amazon S3, Google Cloud Storage or Azure Blob Storage for production, and notes that MinIO and the local filesystem are supported but not typically recommended for production. Ask your team which of these controls your provider offers and how they are enforced, rather than assuming the default is safe.

The last boundary is every connection between components and every shipper that sends data in. Each path needs to be inventoried: shipper to proxy, proxy to Loki, Loki to object storage, and Grafana to the query path. Record which of them use TLS, which certificates they trust and who rotates them. Gaps found at this stage are cheaper to fix before data flows than after a retention or access review has already started.

Decisions that shape Loki security hardening

This table compares the decisions a team makes before touching Loki configuration: the authenticating proxy, the edition, the tenant layout and whether sensitive logs get their own tenant. Read each row as a fork in the design, and note that the operational cost of each option usually lands on the platform team for years.

DecisionOption and when it fitsOperational cost and trade-off
Authenticating reverse proxynginx or HAProxy when your team already runs them and can write auth subrequest rules. OAuth2 Proxy or Pomerium when you want an identity provider login in front of every endpoint.Hand-written proxy rules need ongoing review as endpoints change. OAuth2 Proxy and Pomerium add a component to patch, monitor and keep available. Confirm each option's current Loki integration in the Loki authentication docs.
Edition for access controlAGPLv3 Loki with proxy-level controls when your access model is per-tenant and your team can operate the proxy layer.Label-level restrictions and token authorization must be built in the proxy, which you then own and test. AGPLv3 also has license obligations to review with legal if you modify and offer Loki as a network service.
Edition for access control (commercial)Grafana Enterprise Logs when you need token authorization, label-based access control or cross-tenant queries built into the product. GEL is in long-term support until February 1, 2029.Commercial license cost recurs and needs its own budget line. Confirm current GEL features and support terms in the Grafana Enterprise Logs documentation before you rely on them.
Tenant layoutOne tenant per team when access follows team ownership and most logs are not sensitive.Team tenants are simple to query but can mix sensitive and routine streams, so access reviews get harder as teams grow.
Tenant layout (data class)One tenant per data class, such as public, internal and regulated, when access follows classification rules.Cross-tenant dashboards need a query path that spans tenants, which may depend on your edition. Tenant count also drives compactor and retention configuration work.
Dedicated tenant for sensitive streamsA separate tenant for logs containing personal, payment or credential data when those streams need their own retention, deletion and access list.Shippers must reliably set the correct X-Scope-OrgID per stream, and misrouting is a risk to test. Expect a recurring review of who holds access to that tenant.
Object storage access modelDedicated buckets per tenant class with separate credentials when you need auditable boundaries between data classes.More buckets and credentials mean more rotation and IAM policy to maintain. Shared buckets are simpler but depend on tighter path-level policy.

Loki security hardening steps in the order to apply them

This sequence moves Loki from an open, single-tenant default to a multi-tenant deployment where every request is authenticated, tenant boundaries are enforced at the proxy and storage, and each control has a recorded check. Each step depends on the one before it, so the order matters.

  1. Set auth_enabled and confirm tenant behavior

    The platform team sets auth_enabled to true in the Loki configuration and restarts the components so Loki runs as multi-tenant and expects an X-Scope-OrgID header on every request. Send a push and a query without the header and confirm both are rejected with an error. Then write one entry under tenant A's header and one under tenant B's, and confirm each tenant's query returns only its own entries. The step is done when these checks behave as expected on every read and write path.

  2. Place an authenticating proxy in front of Loki

    Loki has no built-in authentication layer, so the team deploys an authenticating reverse proxy such as nginx, HAProxy, OAuth2 Proxy or Pomerium in front of the push and query endpoints. Network rules then block direct access to the Loki HTTP and gRPC ports from clients and shippers, so the proxy is the only path in. Confirm the proxy enforces identity on every route. The step closes when an unauthenticated request through the proxy returns an error and a direct connection to a Loki port from outside the component network fails.

  3. Restrict who can set the tenant header

    The proxy should choose the tenant from the authenticated identity and never pass through a value the caller supplies. Configure it to strip any inbound X-Scope-OrgID header and set the value from a mapping of groups to tenants that the security team owns. Limit which groups can reach each tenant's routes, and confirm that shippers and Grafana datasources send their traffic through the proxy. Check the result by sending a valid login with a forged header for another tenant. The proxy should overwrite or refuse the header, and the response should contain no data from the other tenant.

  4. Lock object storage to the Loki identity

    Create a dedicated service identity for Loki and grant it only the object actions its components need, scoped to the chunk and index buckets or prefixes it uses. Block public access on those buckets, turn on default server-side encryption, and keep administrative roles in a separate group. Confirm the exact permission set with your storage provider's documentation, since it varies by platform. The step closes when a read and write through the Loki identity succeeds on its prefix, a read against another application's bucket fails, and the encryption setting is verified in the console or API.

  5. Enable TLS on every hop

    Issue certificates for the shippers, the Loki components, the proxy and Grafana, and configure TLS on each connection in that path, including inter-component connections where your deployment mode uses them. Decide who holds the certificate authority and how certificates renew before expiry, because an expired certificate can stop ingestion or queries without an obvious error. Verify the result: a shipper that sends plain HTTP to a TLS endpoint should fail, and a client that presents an untrusted certificate should fail verification. The step closes when a full write and query path succeeds over TLS and both negative tests fail as expected.

  6. Move credentials into a secrets manager

    Remove passwords, object storage keys and proxy client secrets from configuration files, environment variables and container images. Store them in the organization's secrets manager, grant read access only to the Loki service identity and the deployment pipeline, and have the runtime fetch them through the mechanism your platform supports. Rotate the existing credentials once the new path works. Check by searching the Helm values, repository and rendered configuration for the old secret values, then confirm Loki still starts and writes logs after rotation.

  7. Set retention per tenant or stream selector

    Retention is disabled by default, so logs are kept indefinitely until the team enables it. Set retention_enabled, then define retention globally, per tenant or per stream selector according to a data classification agreed with the data owners. Each stream rule must be at least 24 hours. Enable the compactor's retention process and test it with a short-lived test tenant: write an entry, wait for the period in your configuration to pass, and confirm the entry is no longer queryable and its chunks are gone from the bucket. Record the approved periods with the owners.

  8. Record the baseline configuration

    Capture the hardened state as the baseline: Loki configuration files, proxy routes and header rules, storage policies and identity bindings, TLS settings, secret references and retention rules. Store them in version control with the exact Loki release recorded, and attach the results of the checks from the previous steps as evidence. Re-run the same checks after every upgrade, configuration change or Helm chart update to catch drift. The step closes when someone outside the build team can rebuild the environment from the record and get the same check results.

Access control, encryption and secrets for Loki

Loki has no built-in authentication layer, so its safety depends on what sits around it: who can reach each endpoint, how the object store is locked down, how traffic is encrypted, and where credentials live. The cards below cover the controls to decide and verify in your own environment before Loki holds sensitive logs.

Endpoint authentication in front of Loki

Loki's documentation states that it has no built-in authentication layer and that an authenticating reverse proxy, such as nginx, HAProxy, OAuth2 Proxy or Pomerium, must sit in front of it. Every route that accepts writes or queries, including push and query APIs, should pass through that proxy. Confirm that no path reaches Loki directly from a user network, and that the proxy and Loki agree on how the X-Scope-OrgID tenant header is set and trusted.

Network exposure of Loki ports

Loki and its component ports should be reachable only from the hosts that need them: log shippers, the query frontend path, Grafana and other Loki components. Review each listener in your deployment mode, since monolithic, simple scalable and microservices topologies expose different targets. Confirm with your network team that the object store and internal ring or gossip traffic are not routable from user or tenant segments.

Object storage access policies

Loki keeps compressed chunks and its index in object storage, so the bucket policy is effectively the data policy. Grant Loki's identity only the read, write and delete actions its components use, and restrict bucket listing and public access. Confirm who holds administrative rights on the bucket, and whether the compactor's delete permissions are scoped to the Loki buckets only.

Encryption at rest for log data

Chunks and index files at rest should be encrypted using the server-side encryption option your object store provides, with keys managed according to your key policy. The Loki storage documentation recommends Amazon S3, Google Cloud Storage or Azure Blob Storage for production, while S3-compatible stores such as MinIO and the local filesystem are supported but not typically recommended for production. Confirm the encryption mode, key ownership and rotation process with your storage team before go-live.

TLS on each hop

Traffic between shippers and the proxy, the proxy and Loki, Loki components, and Loki and the object store should each have a defined TLS posture. Decide which hops require certificates, who issues and renews them, and how clients verify the chain. Confirm that plaintext listeners are disabled where your policy requires encryption in transit, and test each hop after changes because a single unencrypted internal link can expose log content.

Storage and proxy credentials in secrets management

Object store keys, proxy client secrets and any basic-auth credentials for shippers should be held in a secrets manager and injected at runtime, not stored in Helm values, configuration files or container images. Confirm how credentials are rotated, which service accounts can read them, and whether rotation requires a restart of Loki components. Audit logging on secret access is a useful check during your review.

Admin and ruler endpoints kept from tenants

Administrative endpoints and the ruler API should not be reachable by tenant users, because they affect retention, rules and cluster state across tenants. Route these paths only to operator networks or to a separate authenticated proxy route with stricter access. Confirm that the proxy blocks these paths for tenant identities, and that you have tested the block with a tenant credential rather than assuming it from configuration.

Tenant isolation depends on who can set the tenant header

Isolation in Loki depends on the tenant header, not on the stored data. When auth_enabled is true, Loki treats each request as belonging to the tenant named in the X-Scope-OrgID header, and it does not check whether the caller is entitled to that tenant. Any client that can set the header can read another tenant's logs. The control therefore sits outside Loki, at the layer that receives requests from people and shippers. Decide first which component owns that decision, and make sure nothing else can reach Loki's HTTP port without passing through it.

The reverse proxy must derive the tenant from the authenticated identity and overwrite whatever the client sent. Strip any inbound X-Scope-OrgID before the request reaches Loki, then set it from a mapping keyed on the identity provider's user or group claim. For people querying through Grafana, that mapping usually means one tenant per team or per environment, with a written list of who may see which tenant. Loki's authentication documentation names nginx, HAProxy, OAuth2 Proxy and Pomerium as examples of proxies to run in front of it. Confirm how your chosen proxy removes and sets request headers, and test that a forged header still resolves to the tenant the identity allows.

Shippers need the same discipline. Each log shipper writes on behalf of a source system, so give each source its own credential at the proxy, and let that credential map to one tenant. Grafana Alloy, Fluent Bit, Fluentd, the Docker logging driver and OpenTelemetry HTTP clients all need the tenant set in some way, so confirm for each one how it sends the header and whether the value can be pinned in configuration. Avoid a shared write credential that can write to every tenant. A compromised host holding that credential could plant data in other tenants and obscure its own activity there. Record which source maps to which tenant in your inventory.

Test cross-tenant reads before go-live and after every change to the proxy or the Grafana data source. Create two test tenants, write a marker line into each, and then query for tenant B's marker from a session authenticated as tenant A. The result should be empty, and it should stay empty when the test client adds a forged X-Scope-OrgID header. Also try reaching Loki's port directly from the network segment where the proxy sits, and confirm the connection is refused. Repeat the test with a shipper credential and with a user whose group membership has just changed. Keep the test scripts in version control so they run again after each upgrade.

Be clear about what AGPLv3 Loki provides. It does not supply label-based access control or cross-tenant query features on its own. Grafana Enterprise Logs (GEL) documents token authorization, label-based access control and cross-tenant queries as its own capabilities, so confirm those features in the GEL documentation before assuming they fit your model. If you need per-user restrictions within one tenant, or one query spanning several tenants, the open-source design has to meet that requirement with proxy policy and separate tenants, and the options are narrower. Ask your implementation partner to write down which of these capabilities your design depends on.

What drives hardening effort and how to keep it down

This table lists the factors that change how much work Loki security hardening takes, why each one raises effort, and one way to keep it down. Read each row against your own environment to see which factors apply to you most. The main takeaway is that tenant count, shipper mix and storage choice set most of the work, so settling them early is the cheapest lever.

DriverWhy it raises effortHow to keep it down
Teams and tenantsEach tenant needs its own X-Scope-OrgID mapping, query limits, retention rules and access checks, and every new team adds rules to review and test.Group teams that share a trust boundary into fewer tenants, and define retention and limits as reusable per-tenant templates.
Log sources and shipper typesEach shipper (Grafana Alloy, Fluent Bit, Fluentd, the Docker logging driver, or OpenTelemetry over HTTP) has its own TLS, authentication and tenant-header configuration, and each must be tested for label hygiene.Standardize on Grafana Alloy for most sources and document one approved configuration pattern per additional shipper type.
Deployment modeMonolithic mode has the fewest internal endpoints to protect, while simple scalable and microservices modes add more internal TLS links, service accounts and network policies to verify. Simple scalable mode is being deprecated and removed with Loki 4.0, so it may need a later migration.Choose the smallest mode that meets your daily volume, and avoid designing new hardening around simple scalable mode if you plan to upgrade past Loki 4.0.
Storage backendAmazon S3, Google Cloud Storage and Azure Blob Storage each need their own bucket policies, encryption settings and IAM roles. An S3-compatible store or local filesystem needs extra verification, because the Loki docs do not typically recommend those for production.Use the recommended production object store your platform team already governs, and write one bucket policy template with least-privilege access for the Loki components.
Identity integrationAn authenticating reverse proxy such as nginx, HAProxy, OAuth2 Proxy or Pomerium must be built, configured and tested, and group-to-tenant mapping must be kept in sync with the identity provider.Reuse the identity provider and proxy pattern already used for other internal tools, and map groups to tenants in one reviewed file rather than by hand.
Number of environmentsEach environment (development, test, production) repeats the hardening work, and drift between them creates findings that only appear in one place.Define hardening as code (Helm values, policies and proxy configuration) so one reviewed change set applies to every environment.
Compliance evidence requestsAssessors often ask for configuration exports, access reviews, retention settings and deletion records. Each request needs a repeatable way to produce the evidence, and DeployOpen prepares evidence but does not issue audit reports or certifications.Agree the evidence list with your assessor before build starts, then have the configuration and logs produce it on a schedule.
Retention and deletion for sensitive logsRetention is disabled by default, so logs are kept indefinitely until it is enabled. Each sensitive log stream needs its own stream selector rule, a documented retention period (at least 24 hours per rule) and a tested deletion check.Set one global retention period as a default, then add a small number of reviewed stream-level rules for sensitive sources only.

Retention and deletion for sensitive logs

Loki retention is not on by default. The compactor applies retention, and it only does so once retention_enabled is set. Until then, logs stay in object storage indefinitely, which is the opposite of what most security and privacy owners expect when they approve a logging stack. Before the first production log arrives, the team should confirm that retention is enabled, that the compactor is running with the expected configuration, and that someone has checked the bucket size after the first retention cycle rather than assuming it worked.

Retention can be set globally, per tenant, or per stream selector. A global value is the simplest starting point, but it applies the same clock to every log the stack holds. Per-tenant rules let a team keep application logs for one period and audit-relevant logs for another, provided each tenant is mapped to a clear owner. Per-stream selector rules match streams by label, so they work only when the labels that identify sensitive sources are consistent across shippers. Each stream rule must be at least 24 hours, so the team should write down the shortest period each data class can tolerate and check that the configuration reflects it.

Sensitive streams are easier to govern when they are isolated. Routing them to their own tenant, or at least to a distinct stream selector, keeps their retention, access and deletion requests separate from general operational logs. This matters most when the sensitive stream has a shorter or longer required period than everything else. Without isolation, a single global setting forces a compromise that either keeps sensitive data longer than the policy allows or deletes operational logs that engineers still need. The team should decide the tenant or label scheme before ingestion starts, because moving historical data between tenants later is a separate exercise.

Retention in Loki does not reach everything that holds a copy of a log line. The team must confirm how data already written to object storage will be removed when a retention period changes, and whether the chosen method meets the deletion requirement for that data class. Backups of the bucket, replicas held by log shippers such as Grafana Alloy or Fluent Bit buffers, and any exports or dashboards snapshots in Grafana may keep data after Loki has deleted it. Each copy needs an owner, a retention period and a documented deletion step. Confirm the behavior for each with the relevant vendor documentation and by testing in your own environment, since backup tooling and object storage lifecycle features differ by provider.

Each retention decision should be recorded in a form that security and privacy owners can review and that an independent auditor can later trace. The record should name the tenant or stream selector, the period, the legal or policy basis, the systems holding copies, the deletion method, and the person who approved the setting. Store the Loki configuration in version control so every change has a commit, reviewer and date. Schedule a periodic check that the live configuration still matches the record. DeployOpen can prepare this evidence as part of a hardening engagement, but the retention period itself is a decision the client's own owners must make and sign.

What to patch, monitor and document after hardening

After hardening, the work that keeps Loki secure is recurring: tracking releases, patching the components around it, watching access signals, verifying retention and keeping the configuration recoverable. The cards below tie each task to a control set during hardening, so every one has a clear owner and a check.

Track releases and end-of-life dates

Follow the Loki releases page on GitHub, where v3.7.8 is listed as published September 17, 2026, and read each release note for security fixes, configuration changes and removed options. Promtail reached end of life on March 2, 2026, with no further updates or commercial support, so any remaining Promtail agents are an open risk. Plan the move to Grafana Alloy, and confirm your running Loki version against the release notes before each change window.

Patch the proxy, storage tooling and hosts

The authenticating reverse proxy, the object storage client tooling and the host images each follow their own vendor release cycle, so none of them should wait for a Loki upgrade. Record the version of each component in the configuration baseline and check it against vendor security advisories. After each proxy change, confirm that the X-Scope-OrgID header still reaches Loki unchanged, and after each host image rebuild, confirm that object storage credentials still work for the ingesters and compactor.

Monitor authentication failures and tenant rejections

Alert on spikes in failed authentication at the proxy and on requests Loki rejects for a missing or unknown tenant header. A sudden rise in rejected tenant requests can point to a misconfigured client, a credential that should have been revoked, or an attempt to query another tenant's streams. Agree the review schedule with your security team, and confirm which fields the proxy and Loki expose before you build the dashboard.

Monitor compactor retention runs

Retention is disabled by default, so confirm that retention is enabled and that each global, per-tenant and per-stream rule matches the approved retention policy. Review the compactor logs and metrics after each run for deletion activity, errors and runs that stop early, because a silent failure keeps sensitive logs longer than the policy allows. Keep a dated record of these checks as evidence that deletion is working.

Back up configuration and keys

Back up the Loki configuration, the proxy configuration, the tenant mapping, and the TLS certificates and signing keys they reference. Store these backups apart from the object storage bucket they protect, and restrict read access, since the files contain secrets. Test a restore into a separate environment, because a backup that has never been restored does not prove that the tenant mapping and certificate chain come back intact.

Document the baseline, matrix, policy and evidence

Keep four documents current: the configuration baseline with component versions and settings, the access matrix mapping users and teams to tenants and proxy roles, the retention policy with its per-tenant and per-stream rules, and the test evidence from hardening and every later change. Security reviewers and compliance assessors will ask for these, but independent auditors decide whether controls meet a framework. Assign an owner for each document and review all four after every Loki upgrade.

How to test that Loki security hardening holds under failure

Test the Loki hardening by trying to break it on purpose, and treat every control as unproven until a failing request is refused. The goal is to show that each control fails closed: when a token is missing, a header is forged, a port is reached directly, or a bucket policy is too broad, the request is denied and the denial is recorded. Run these tests in a non-production environment that mirrors the production topology, with the same reverse proxy, TLS configuration, object storage bucket and compactor settings. Write each test case with a name, the control it covers, the exact request or action, the expected result and the observed result.

Start with the front door. Send a push request and a query request to the endpoint that sits behind the authenticating reverse proxy, with no credentials, and confirm both are refused. Repeat with an expired or invalid token. Loki has no built-in authentication layer, so the proxy is the only thing standing between a caller and the API, and these cases show whether it is actually enforcing that. Then attempt to reach the Loki HTTP and gRPC ports directly from a network segment outside the proxy. The connection should fail at the network layer. Confirm this from every network path that exists, including the cluster network and any load balancer that could bypass the proxy.

Next test tenant isolation. Authenticate as tenant A, then send a request that sets X-Scope-OrgID to tenant B. The proxy must overwrite or reject that header, because Loki trusts whatever tenant identifier it receives when auth_enabled is true. A query that returns tenant B data is a critical failure. Repeat for push requests, where a forged header could place logs into another tenant. Then test object storage. Using credentials for one identity, attempt to read and list objects that belong to another tenant or to the Loki system, and attempt an unencrypted write if your policy requires server-side encryption. Each attempt should be denied by the bucket policy or IAM role, not only by Loki's own configuration. Confirm the bucket policy and encryption requirement with your storage vendor's documentation and your own environment.

Test TLS on each hop: client to proxy, proxy to Loki, Loki to object storage and the components that talk to each other. Use a tool to connect without TLS, with an unsupported protocol version and with a certificate that does not match, and confirm each is refused. Then test retention in a test tenant only. Set a short, explicit retention rule for a stream selector, enable retention in the compactor, push known test entries, and confirm that entries past the rule are removed after the compactor runs. Retention is disabled by default, so also confirm that it is actually enabled. Finally, check that logs and errors do not expose tokens or credentials. Trigger authentication failures, a failed object storage call and a misconfigured shipper, then search the Loki, proxy and shipper logs for token strings, authorization headers and access keys.

Record every test as evidence: the test ID, date, environment, version of Loki and the proxy, the command or request used, the expected and observed result, and the name of the person who ran it. Store raw outputs, such as HTTP status codes, proxy logs and bucket policy simulation results, alongside a short summary. Keep the test plan under version control so changes are traceable. This record shows what you tested and what happened. It does not constitute an audit report, an attestation or a certification, and it should not be presented as one. If a compliance assessor needs evidence for a specific control, ask them which artifacts they require and map your records to those requirements.

Questions buyers ask before hiring help with Loki security hardening

How much effort does Loki security hardening take?

The effort depends mainly on how Loki is deployed, how many endpoints need protection, and how many tenants share the cluster. Loki documents three deployment modes: monolithic (up to about 20 GB of logs per day), simple scalable, and microservices for very large clusters, and each mode exposes different components that need authentication and TLS. Other drivers include the object storage setup, the identity provider you want to use, the number of environments, and how many retention rules must be defined. Ask for a written scope that lists each endpoint, tenant, bucket and retention rule in the work, then compare it with your own estimate.

Can our own team harden Loki without an outside partner?

Yes, a team with Linux, reverse proxy, object storage and Grafana experience can do this internally. Loki has no built-in authentication layer, so the team must run an authenticating reverse proxy such as nginx, HAProxy, OAuth2 Proxy or Pomerium in front of it. The harder parts are usually consistent tenant mapping with the X-Scope-OrgID header, least-privilege bucket policies, TLS between components, and retention decisions that legal and security owners agree on. Outside help makes most sense when those skills are thin, the deadline is fixed, or an internal reviewer needs an independent check.

What does Loki hardening need from our staff and environments?

The work needs administrative access to the environments where Loki runs, whether that is a cloud account, a data center or an air-gapped network, and it stays inside those environments. Expect to provide admin access to the object storage service, the identity provider, and the DNS and certificate processes, along with a non-production environment for testing. Log owners must decide which streams are sensitive and how long each should be kept, and an engineer should be available for reviews and change windows. Confirm these needs in the written scope before work starts.

How long does Loki hardening take from scoping to delivery?

Scoping and delivery time depends on the drivers, not on a fixed duration. The main drivers are the deployment mode, the number of environments, whether an identity provider integration is included, how many tenants and retention rules need decisions, and how quickly your change approval and sign-off processes move. Delays often come from waiting on certificates, bucket access or retention sign-off rather than from configuration itself. Most engagements are fixed-scope, so the agreed scope sets the deliverables and timeline in writing before any work begins. Ask for that timeline with its dependencies listed.

Does Loki security hardening make our logging stack compliant?

No. Hardening can prepare the technical controls, configuration and evidence that an assessment will look at, but DeployOpen does not issue audit reports, attestations or certifications. Independent auditors and certification bodies perform those assessments and decide whether controls meet the requirement. Before the work, ask your assessor which controls and evidence they expect for log access, retention, encryption and deletion, and include that list in the written scope. That keeps the work focused on evidence the assessor will accept.

Does Grafana Enterprise Logs remove the need for an authentication proxy?

This needs confirmation against the Grafana Enterprise Logs documentation before you decide. Grafana Enterprise Logs adds token authorization, label-based access control and cross-tenant queries on top of Loki, and it is in long-term support with version 3.6 until February 1, 2029. Those features do not automatically prove that every endpoint, including write paths, admin APIs and internal component traffic, is covered without a reverse proxy. Check each endpoint and your network and TLS requirements against the product documentation, and include the result in the scope.

What happens after Loki hardening is handed over?

At handover, you should receive the configuration, the documented controls, runbooks for retention and access changes, and a list of open decisions. Loki releases move quickly, for example v3.7.8 was published on September 17, 2026, so patching and version tracking need an owner. DeployOpen offers ongoing support, upgrades and continuous testing as retainers, which you can add to the written scope or start later. If you keep the work in house, name the team that will own patches, certificate renewals and retention reviews before handover.

How DeployOpen scopes, hardens and hands over Loki

DeployOpen approaches Loki security hardening as a fixed-scope piece of work inside your own cloud accounts, data centers or air-gapped network. Loki has no built-in authentication layer, so the work starts by agreeing which controls sit in front of it, around it and inside it. Each step ends in written configuration, tests and documentation your team can keep.

How we scope

  • Written scope listing each Loki endpoint, tenant model, bucket and log source in the engagement
  • Agreed list of which log types are sensitive and the retention each one needs
  • Fixed-scope agreement, with ongoing support available as a retainer after handover

How we build

  • Authenticating reverse proxy in front of every Loki endpoint, mapping each user to one tenant through X-Scope-OrgID
  • Object storage bucket permissions scoped to the Loki service identity, with encryption at rest configured per your provider
  • Retention enabled in the compactor per tenant or stream selector, because Loki keeps logs indefinitely by default

How we hand over

  • TLS configuration for client-to-proxy and component traffic, with certificate ownership and rotation documented
  • Test results for unauthenticated access, cross-tenant reads and deletion after the retention period
  • Runbook for patching, including the Loki release notes and the image or binary version in use

How we support

  • Review of Loki releases and security fixes against the hardened configuration, as ongoing support or a retainer
  • Retest of the proxy and tenant boundaries after upgrades, Alloy changes or new log sources
  • Support covers migrations forced by Loki changes, such as Promtail to Grafana Alloy, when they touch security settings

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.