CIS InfluxDB 2 Benchmark

Security configuration recommendations for InfluxDB 2 time-series database

v1.0.0 01-2025

Overview

▶

This benchmark provides prescriptive guidance for establishing a secure configuration posture for InfluxDB 2.x deployments. It covers installation hardening, token-based authentication, TLS encryption, bucket retention policies, Flux query security, backup strategies, and monitoring using the influx CLI, influxd configuration, and InfluxDB API endpoints.

16Recommendations
7Sections
2Profile Levels
SectionAreaFocus
1Installation & SetupVersion management, secure configuration, and file permissions
2Authentication & AuthorizationInitial setup, API token scoping, and organization roles
3Network SecurityTLS encryption and network interface binding
4Bucket & Data SecurityRetention policies and 1.x compatibility security
5Query & Task SecurityTask management and query concurrency limits
6Backup & RecoveryScheduled backups and integrity verification
7Monitoring & LoggingLog levels, health monitoring, and _monitoring bucket

Profile Definitions

▶
ProfileDescriptionIntended Use
L1Level 1 — StandardEssential security for all InfluxDB 2 deployments; minimal performance impact.
L2Level 2 — HardenedAdvanced hardening for PCI-DSS, HIPAA, or high-security environments.

1 — Installation & Setup

▶

1.1 Server Configuration

▶
1.1.1 Ensure InfluxDB is up to date (Automated)
L1 Auto
Description

This recommendation verifies that InfluxDB is up to date on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check InfluxDB version:
influx version
influxd version
systemctl status influxdb
Remediation
# Update InfluxDB to latest:
sudo apt-get update && sudo apt-get install -y influxdb2
# or
sudo yum update -y influxdb2
sudo systemctl restart influxdb
1.1.2 Ensure secure default configuration is applied (Automated)
L1 Auto
Description

This recommendation verifies that secure default configuration is applied on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check InfluxDB configuration:
influxd print-config
cat /etc/influxdb/config.toml 2>/dev/null || cat /etc/influxdb/config.yml
Remediation
# Configure InfluxDB with secure defaults:
# /etc/influxdb/config.toml:
bolt-path = "/var/lib/influxdb/influxd.bolt"
engine-path = "/var/lib/influxdb/engine"
http-bind-address = ":8086"
log-level = "info"
reporting-disabled = true
storage-no-validate-field-size = false
1.1.3 Ensure proper file ownership and permissions (Automated)
L1 Auto
Description

This recommendation verifies that proper file ownership and permissions on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check file ownership and permissions:
ls -la /var/lib/influxdb/
ls -la /etc/influxdb/
stat -c '%U:%G %a %n' /var/lib/influxdb/influxd.bolt
Remediation
# Set correct ownership:
chown -R influxdb:influxdb /var/lib/influxdb/
chown -R influxdb:influxdb /etc/influxdb/
chmod 750 /var/lib/influxdb/
chmod 600 /var/lib/influxdb/influxd.bolt

2 — Authentication & Authorization

▶

2.1 Access Controls

▶
2.1.1 Ensure initial setup is completed with strong credentials (Automated)
L1 Auto
Description

This recommendation verifies that initial setup is completed with strong credentials on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check initial setup status:
influx setup --check
influx auth list --json | jq '.[].description'
Remediation
# Run initial setup (creates admin user, org, bucket):
influx setup \
  --username admin \
  --password SecureP@ssw0rd \
  --org myorg \
  --bucket default \
  --retention 30d \
  --force
2.1.2 Ensure API tokens follow least-privilege principle (Automated)
L1 Auto
Description

This recommendation verifies that API tokens follow least-privilege principle on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# List all API tokens:
influx auth list --json | jq '.[] | {id, description, status, permissions: (.permissions | length)}'
Remediation
# Create scoped read-only token:
influx auth create \
  --org myorg \
  --description 'read-only-app' \
  --read-bucket $(influx bucket list --name mybucket --json | jq -r '.[0].id')

# Deactivate unused tokens:
influx auth inactive --id <TOKEN_ID>
2.1.3 Ensure organization membership uses member role by default (Automated)
L1 Auto
Description

This recommendation verifies that organization membership uses member role by default on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# List organizations and members:
influx org list --json
influx org members list --org myorg --json | jq '.[] | {name: .name, role: .role}'
Remediation
# Add user as member (not owner) for least privilege:
influx org members add \
  --org myorg \
  --member <USER_ID>

# Remove unnecessary owners:
influx org members remove --org myorg --member <USER_ID>

3 — Network Security

▶

3.1 Transport Encryption

▶
3.1.1 Ensure TLS is enabled for all connections (Automated)
L1 Auto
Description

This recommendation verifies that TLS is enabled for all connections on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check TLS configuration:
influxd print-config | grep -i tls
curl -vk https://localhost:8086/health 2>&1 | grep -i 'ssl\|tls'
Remediation
# Enable TLS in /etc/influxdb/config.toml:
tls-cert = "/etc/influxdb/ssl/cert.pem"
tls-key = "/etc/influxdb/ssl/key.pem"
tls-min-version = "1.2"

sudo systemctl restart influxdb
3.1.2 Ensure InfluxDB binds to specific interfaces (Automated)
L1 Auto
Description

This recommendation verifies that InfluxDB binds to specific interfaces on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check bind address:
influxd print-config | grep http-bind-address
ss -tlnp | grep 8086
Remediation
# Bind to specific interface in /etc/influxdb/config.toml:
http-bind-address = "10.0.1.100:8086"
# Not 0.0.0.0:8086

sudo systemctl restart influxdb

4 — Bucket & Data Security

▶

4.1 Data Retention

▶
4.1.1 Ensure bucket retention policies are configured (Automated)
L1 Auto
Description

This recommendation verifies that bucket retention policies are configured on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# List buckets and retention policies:
influx bucket list --json | jq '.[] | {name, id, retentionPeriod: .retentionRules[0].everySeconds}'
Remediation
# Set appropriate retention period:
influx bucket update \
  --id <BUCKET_ID> \
  --retention 90d

# Create bucket with retention:
influx bucket create \
  --name metrics \
  --org myorg \
  --retention 365d
4.1.2 Ensure 1.x compatibility mode is properly secured (Automated)
L1 Auto
Description

This recommendation verifies that 1.x compatibility mode is properly secured on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check DBRP mappings (1.x compatibility):
influx v1 dbrp list --json
influx v1 auth list --json
Remediation
# Remove unnecessary 1.x compatibility mappings:
influx v1 dbrp delete --id <DBRP_ID>

# If 1.x compat is needed, ensure passwords are set:
influx v1 auth set-password \
  --username compat_user

5 — Query & Task Security

▶

5.1 Flux Queries

▶
5.1.1 Ensure unused tasks are disabled (Automated)
L1 Auto
Description

This recommendation verifies that unused tasks are disabled on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# List all tasks:
influx task list --json | jq '.[] | {name, status, every: .every, cron: .cron}'
Remediation
# Disable unused tasks:
influx task update --id <TASK_ID> --status inactive

# Ensure tasks use scoped tokens:
influx task create \
  --org myorg \
  --file ./task.flux
5.1.2 Ensure query concurrency limits are set (Automated)
L1 Auto
Description

This recommendation verifies that query concurrency limits are set on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check query concurrency and queue limits:
influxd print-config | grep -E 'query|concurrency|queue'
Remediation
# Set query limits in /etc/influxdb/config.toml:
storage-max-concurrent-compactions = 2

# Use InfluxDB Cloud or OSS 2.x query limits:
# API rate limiting via reverse proxy:
# nginx: limit_req_zone $binary_remote_addr zone=influx:10m rate=100r/s;

6 — Backup & Recovery

▶

6.1 Backup Management

▶
6.1.1 Ensure regular backups are scheduled (Automated)
L1 Auto
Description

This recommendation verifies that regular backups are scheduled on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check backup schedule:
influx backup --help
ls -la /var/backups/influxdb/ 2>/dev/null
Remediation
# Create backup:
influx backup /var/backups/influxdb/$(date +%Y%m%d) \
  --org myorg

# Automate via cron:
# 0 2 * * * influx backup /var/backups/influxdb/$(date +\%Y\%m\%d) --org myorg
6.1.2 Ensure backup integrity is verified (Manual)
L1 Manual
Description

This recommendation verifies that backup integrity is verified on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Verify backup integrity:
ls -la /var/backups/influxdb/latest/
influx restore --dry-run /var/backups/influxdb/latest/
Remediation
# Test restore to verify backup integrity:
influx restore /var/backups/influxdb/latest/ \
  --org myorg \
  --bucket test-restore \
  --new-bucket restore-test

# Clean up test restore:
influx bucket delete --name restore-test --org myorg

7 — Monitoring & Logging

▶

7.1 Observability

▶
7.1.1 Ensure appropriate logging level is configured (Automated)
L1 Auto
Description

This recommendation verifies that appropriate logging level is configured on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check InfluxDB metrics:
curl -s http://localhost:8086/metrics | head -20
influxd print-config | grep log-level
Remediation
# Set appropriate log level in /etc/influxdb/config.toml:
log-level = "info"
# For security auditing use "debug" temporarily

# Forward logs to syslog:
# systemd: journalctl -u influxdb -f
7.1.2 Ensure health endpoints are monitored (Automated)
L1 Auto
Description

This recommendation verifies that health endpoints are monitored on the InfluxDB 2 time-series database. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the InfluxDB 2 time-series database vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check InfluxDB health:
curl -s http://localhost:8086/health | jq .
curl -s http://localhost:8086/ready | jq .
Remediation
# Monitor InfluxDB with internal _monitoring bucket:
influx query 'from(bucket: "_monitoring") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "qc_requests_total")'

# Set up alerting task:
# influx task create --file alert-task.flux