CIS Envoy Proxy Benchmark

Security configuration benchmark for Envoy Proxy service mesh data plane

v1.0.0 03-2025

Overview

▶

This benchmark provides prescriptive guidance for establishing a secure configuration posture for Envoy Proxy. It covers listener TLS, mutual authentication, admin interface hardening, rate limiting, header security, and operational best practices for production deployments.

14Recommendations
7Sections
2Profile Levels
SectionAreaFocus
1Installation & PermissionsProcess user, file ownership and permissions
2TLS & AuthenticationTLS termination, mTLS, certificate management
3Admin Interface & LoggingAdmin API binding, access log configuration
4Traffic ManagementRate limiting, circuit breakers, connection pools
5HTTP SecurityCORS policies, security headers, request filtering
6Resilience & HealthHealth checks, outlier detection, failover
7Maintenance & OperationsVersion management, log levels, updates

Profile Definitions

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

1 — Installation & Permissions

▶

1.1 Process & File Security

▶
1.1.1 Ensure Envoy runs as a non-root user (Automated)
L1 Auto
Description

This recommendation verifies that Envoy runs as a non-root user on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Verify Envoy runs as non-root
ps -eo user,pid,comm | grep envoy
grep -E '^User|^Group' /etc/envoy/envoy.yaml
Remediation
# Configure Envoy to run as non-root user
useradd -r -s /usr/sbin/nologin envoy
chown -R envoy:envoy /etc/envoy /var/log/envoy
# Update systemd unit: User=envoy, Group=envoy
1.1.2 Ensure configuration file permissions are restricted (Automated)
L1 Auto
Description

This setting ensures that configuration file permissions are restricted on the Envoy Proxy service mesh proxy. Restricting this capability limits potential abuse and enforces the principle of least privilege across the environment.

Rationale

Unrestricted access to this capability could allow unauthorized users or processes to perform actions beyond their intended scope. Applying least-privilege principles to the Envoy Proxy service mesh proxy is essential for defense in depth.

Audit
# Check file permissions on Envoy configuration
stat -c '%a %U %G' /etc/envoy/envoy.yaml
find /etc/envoy -type f -exec stat -c '%a %n' {} \;
Remediation
# Restrict configuration file permissions
chmod 640 /etc/envoy/envoy.yaml
chown root:envoy /etc/envoy/envoy.yaml
chmod 750 /etc/envoy/

2 — TLS & Authentication

▶

2.1 Transport Security

▶
2.1.1 Ensure TLS 1.3 is configured on all listeners (Automated)
L1 Auto
Description

This recommendation verifies that TLS 1.3 is configured on all listeners on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Verify TLS is configured on all listeners
grep -A 20 'transport_socket' /etc/envoy/envoy.yaml | grep -E 'tls_minimum|tls_certificates'
Remediation
# Configure TLS on listeners
# In listener config:
#   transport_socket:
#     name: envoy.transport_sockets.tls
#     typed_config:
#       '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
#       common_tls_context:
#         tls_params:
#           tls_minimum_protocol_version: TLSv1_3
2.1.2 Ensure mutual TLS is enforced on upstream connections (Automated)
L2 Auto
Description

This recommendation ensures that mutual TLS is enforced on upstream connections on the Envoy Proxy service mesh proxy. Enforcing this requirement establishes a minimum security standard and prevents insecure configurations.

Rationale

Without this enforcement, the Envoy Proxy service mesh proxy may accept insecure configurations that weaken overall security posture. Mandating this control ensures consistent protection against common attack vectors.

Audit
# Verify mTLS is enforced on upstream connections
grep -A 15 'transport_socket' /etc/envoy/envoy.yaml | grep 'require_client_certificate'
Remediation
# Enable mutual TLS
# In DownstreamTlsContext:
#   require_client_certificate: true
#   common_tls_context:
#     validation_context:
#       trusted_ca:
#         filename: /etc/envoy/certs/ca.pem

3 — Admin Interface & Logging

▶

3.1 Administration

▶
3.1.1 Ensure admin interface is bound to localhost only (Automated)
L1 Auto
Description

This recommendation verifies that admin interface is bound to localhost only on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check admin interface binding
grep -A 10 'admin:' /etc/envoy/envoy.yaml | grep 'address\|port_value'
Remediation
# Bind admin interface to localhost only
# admin:
#   address:
#     socket_address:
#       address: 127.0.0.1
#       port_value: 9901
3.1.2 Ensure access logging is enabled on all listeners (Automated)
L1 Auto
Description

This recommendation verifies that access logging is enabled on all listeners on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Verify access logging is enabled
grep -A 10 'access_log' /etc/envoy/envoy.yaml | head -20
Remediation
# Enable access logging on all listeners
# In http_connection_manager:
#   access_log:
#     - name: envoy.access_loggers.file
#       typed_config:
#         '@type': type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
#         path: /var/log/envoy/access.log

4 — Traffic Management

▶

4.1 Rate Limiting & Circuit Breaking

▶
4.1.1 Ensure rate limiting is configured (Automated)
L1 Auto
Description

This recommendation verifies that rate limiting is configured on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check rate limiting configuration
grep -rn 'rate_limit\|local_rate_limit' /etc/envoy/envoy.yaml
Remediation
# Configure rate limiting filter
# In http_filters:
#   - name: envoy.filters.http.local_ratelimit
#     typed_config:
#       '@type': type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit
#       stat_prefix: http_local_rate_limiter
#       token_bucket:
#         max_tokens: 100
#         tokens_per_fill: 100
#         fill_interval: 60s
4.1.2 Ensure connection limits and circuit breakers are set (Automated)
L2 Auto
Description

This recommendation verifies that connection limits and circuit breakers are set on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Verify connection limits are set
grep -E 'max_connections|max_pending_requests|max_requests' /etc/envoy/envoy.yaml
Remediation
# Set circuit breaker thresholds
# In cluster config:
#   circuit_breakers:
#     thresholds:
#       - priority: DEFAULT
#         max_connections: 1024
#         max_pending_requests: 1024
#         max_requests: 1024

5 — HTTP Security

▶

5.1 Headers & CORS

▶
5.1.1 Ensure CORS policy is restricted to trusted origins (Automated)
L1 Auto
Description

This setting ensures that CORS policy is restricted to trusted origins on the Envoy Proxy service mesh proxy. Restricting this capability limits potential abuse and enforces the principle of least privilege across the environment.

Rationale

Unrestricted access to this capability could allow unauthorized users or processes to perform actions beyond their intended scope. Applying least-privilege principles to the Envoy Proxy service mesh proxy is essential for defense in depth.

Audit
# Verify CORS policy is configured
grep -A 10 'cors' /etc/envoy/envoy.yaml
Remediation
# Configure CORS policy
# In route_config:
#   virtual_hosts:
#     - cors:
#         allow_origin_string_match:
#           - exact: 'https://trusted.example.com'
#         allow_methods: GET, POST
#         allow_headers: content-type
#         max_age: '600'
5.1.2 Ensure security response headers are injected (Automated)
L1 Auto
Description

This recommendation verifies that security response headers are injected on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check header manipulation for security headers
grep -A 5 'response_headers_to_add' /etc/envoy/envoy.yaml
Remediation
# Add security response headers
# In route_config or virtual_host:
#   response_headers_to_add:
#     - header:
#         key: X-Content-Type-Options
#         value: nosniff
#     - header:
#         key: X-Frame-Options
#         value: DENY
#     - header:
#         key: Strict-Transport-Security
#         value: max-age=31536000; includeSubDomains

6 — Resilience & Health

▶

6.1 Health Checks & Outlier Detection

▶
6.1.1 Ensure health checks are configured on all clusters (Automated)
L1 Auto
Description

This recommendation verifies that health checks are configured on all clusters on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Verify health check configuration
grep -A 10 'health_checks' /etc/envoy/envoy.yaml
Remediation
# Configure health checks on clusters
# In cluster config:
#   health_checks:
#     - timeout: 5s
#       interval: 10s
#       unhealthy_threshold: 3
#       healthy_threshold: 2
#       http_health_check:
#         path: /healthz
6.1.2 Ensure outlier detection is enabled (Automated)
L2 Auto
Description

This recommendation verifies that outlier detection is enabled on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Check outlier detection settings
grep -A 10 'outlier_detection' /etc/envoy/envoy.yaml
Remediation
# Configure outlier detection
# In cluster config:
#   outlier_detection:
#     consecutive_5xx: 5
#     interval: 10s
#     base_ejection_time: 30s
#     max_ejection_percent: 50

7 — Maintenance & Operations

▶

7.1 Updates & Logging

▶
7.1.1 Ensure Envoy is running the latest stable version (Manual)
L1 Manual
Description

This recommendation verifies that Envoy is running the latest stable version on the Envoy Proxy service mesh proxy. Implementing this control strengthens the overall security configuration and reduces exposure to potential threats.

Rationale

Failure to implement this control may leave the Envoy Proxy service mesh proxy vulnerable to attack or non-compliant with organizational security policies. This control helps establish a consistent, hardened configuration baseline.

Audit
# Verify Envoy is running the latest stable version
envoy --version
curl -s https://api.github.com/repos/envoyproxy/envoy/releases/latest | grep tag_name
Remediation
# Update Envoy to latest stable version
# Download from official releases:
# https://www.envoyproxy.io/docs/envoy/latest/start/install
apt-get update && apt-get install --only-upgrade envoy
7.1.2 Ensure debug logging is disabled in production (Automated)
L1 Auto
Description

This recommendation verifies that debug logging is disabled in production on the Envoy Proxy service mesh proxy. Disabling or removing unnecessary components reduces the attack surface and limits potential vectors for exploitation.

Rationale

Running unnecessary components on the Envoy Proxy service mesh proxy increases the attack surface and the risk of exploitation. Disabling or removing them follows the principle of least functionality and reduces exposure to known vulnerabilities.

Audit
# Check if debug logging is disabled in production
grep -E 'log_level|log_path' /etc/envoy/envoy.yaml
grep 'component_log_level' /etc/envoy/envoy.yaml
Remediation
# Set production log level
# In bootstrap config:
# Or via admin API:
curl -X POST 'http://localhost:9901/logging?level=warning'