Skip to main content

Security Configuration and Best Practices

This document covers security considerations, TLS configuration, API token management, and best practices when using the Infrahub VSCode extension across different environments.

Overview

The Infrahub VSCode extension handles connections to Infrahub servers which may contain sensitive infrastructure data. Proper security configuration ensures your connections are encrypted and authenticated appropriately for your environment.

TLS Certificate Configuration

Understanding TLS in the Extension

The extension connects to Infrahub servers over HTTPS using TLS encryption. By default, the extension verifies server certificates to ensure secure connections. However, development environments often use self-signed certificates that fail standard verification.

Production Environment (Default Secure Settings)

For production environments, always use properly signed certificates:

{
"infrahub-vscode.servers": [
{
"name": "Production",
"address": "https://infrahub.company.com",
"api_token": "${env:INFRAHUB_PROD_TOKEN}"
// tls_insecure defaults to false - secure mode
}
]
}

Security Benefits:

  • Prevents man-in-the-middle attacks
  • Ensures server identity verification
  • Maintains encryption integrity
  • Complies with enterprise security policies

Development Environment (Insecure Mode)

For development environments with self-signed certificates:

{
"infrahub-vscode.servers": [
{
"name": "Development",
"address": "https://dev.infrahub.local",
"api_token": "${env:INFRAHUB_DEV_TOKEN}",
"tls_insecure": true
}
]
}

When to Use tls_insecure: true:

  • Local development servers with self-signed certificates
  • Docker containers with self-generated certificates
  • Internal testing environments with custom CA certificates
  • Development environments where proper certificates aren't feasible

Security Implications:

  • Disables certificate verification
  • Vulnerable to man-in-the-middle attacks
  • Should never be used in production
  • Affects all HTTPS connections in the VSCode process

Mixed Environment Configuration

You can configure different TLS settings for different environments:

{
"infrahub-vscode.servers": [
{
"name": "Production",
"address": "https://infrahub.company.com",
"api_token": "${env:INFRAHUB_PROD_TOKEN}"
// Secure by default
},
{
"name": "Staging",
"address": "https://staging.infrahub.company.com",
"api_token": "${env:INFRAHUB_STAGING_TOKEN}"
// Uses proper certificates
},
{
"name": "Development",
"address": "https://dev.infrahub.local:8000",
"api_token": "${env:INFRAHUB_DEV_TOKEN}",
"tls_insecure": true
// Allows self-signed certificates
}
]
}

How TLS Configuration Works Internally

When any server has tls_insecure: true:

  1. Environment Variable: Sets NODE_TLS_REJECT_UNAUTHORIZED = '0'
  2. Global Effect: Affects all HTTPS connections in the VSCode process
  3. Restoration: Original setting restored when extension deactivates
  4. Dynamic Updates: Changes apply immediately when configuration updates

This approach was chosen to ensure compatibility with the Infrahub SDK and provide reliable certificate bypassing when needed.

API Token Security

Token Storage Best Practices

❌ Don't Store Tokens Directly

// NEVER do this - tokens visible in settings
{
"infrahub-vscode.servers": [
{
"api_token": "inf_1234567890abcdef" // Visible in settings!
}
]
}

✅ Use Environment Variables

// Secure approach - tokens in environment variables
{
"infrahub-vscode.servers": [
{
"api_token": "${env:INFRAHUB_API_TOKEN}" // References environment
}
]
}

Setting Up Environment Variables

macOS and Linux

Add to your shell configuration file (~/.zshrc, ~/.bashrc, etc.):

# Development environment
export INFRAHUB_DEV_TOKEN="inf_dev_1234567890abcdef"

# Staging environment
export INFRAHUB_STAGING_TOKEN="inf_staging_1234567890abcdef"

# Production environment
export INFRAHUB_PROD_TOKEN="inf_prod_1234567890abcdef"

Windows

Using PowerShell:

# Set user-level environment variables
[System.Environment]::SetEnvironmentVariable('INFRAHUB_DEV_TOKEN', 'inf_dev_1234567890abcdef', 'User')
[System.Environment]::SetEnvironmentVariable('INFRAHUB_STAGING_TOKEN', 'inf_staging_1234567890abcdef', 'User')
[System.Environment]::SetEnvironmentVariable('INFRAHUB_PROD_TOKEN', 'inf_prod_1234567890abcdef', 'User')

Token Management Best Practices

Token Rotation

Regularly rotate API tokens:

# Example rotation script
#!/bin/bash
# Generate new token via Infrahub API or web interface
NEW_TOKEN="inf_new_token_here"

# Update environment variable
export INFRAHUB_PROD_TOKEN="$NEW_TOKEN"

# Update your shell configuration
echo "export INFRAHUB_PROD_TOKEN=\"$NEW_TOKEN\"" >> ~/.zshrc

Minimal Permissions

Create tokens with minimal required permissions:

  • Read-only tokens for query execution
  • Limited scope tokens for specific resources
  • Separate tokens for each environment
  • Short-lived tokens for temporary access

Token Security Checklist

  • Tokens stored in environment variables, not settings files
  • Different tokens for each environment (dev, staging, prod)
  • Tokens have minimal required permissions
  • Regular token rotation schedule established
  • Tokens excluded from version control (.env files in .gitignore)
  • Access to tokens limited to authorized personnel

Network Security Considerations

Firewall and Proxy Configuration

Corporate Proxy Settings

If behind a corporate proxy, VSCode inherits system proxy settings. For manual configuration:

{
"http.proxy": "http://proxy.company.com:8080",
"http.proxyStrictSSL": true,
"http.proxyAuthorization": null
}

Network Access Requirements

The extension requires outbound HTTPS access to:

  • Infrahub server endpoints (configured addresses)
  • Schema validation endpoints (https://schema.infrahub.app/)

VPN and Network Isolation

VPN-Protected Servers

For servers behind VPN:

{
"infrahub-vscode.servers": [
{
"name": "Internal Production",
"address": "https://internal.infrahub.corp",
"api_token": "${env:INFRAHUB_INTERNAL_TOKEN}"
// Ensure VPN is connected before use
}
]
}

Network Segmentation

Consider network segmentation best practices:

  • Development servers on isolated networks
  • Production servers with restricted access
  • API tokens with network-based restrictions

Compliance and Audit Considerations

Logging and Monitoring

The extension logs connection attempts and errors. Monitor logs for:

  • Failed authentication attempts
  • Certificate verification bypasses
  • Unusual connection patterns
  • Token usage patterns

Compliance Requirements

For regulated environments:

SOC 2 / ISO 27001

  • Document TLS configuration decisions
  • Maintain token rotation procedures
  • Log security-relevant events
  • Regular security configuration reviews

GDPR / Data Privacy

  • Understand what data is transmitted to servers
  • Ensure proper encryption in transit
  • Document data processing activities
  • Implement data retention policies

Security Scanning Integration

VS Code Security Extensions

Consider installing complementary security extensions:

{
"recommendations": [
"ms-vscode.vscode-json",
"redhat.vscode-yaml",
"ms-python.python"
]
}

Static Analysis

Regularly scan configuration files for:

  • Hardcoded tokens or secrets
  • Insecure TLS configurations
  • Overly permissive settings

Troubleshooting Security Issues

Common TLS Errors and Solutions

Certificate Expired

Error: CERT_HAS_EXPIRED

Solutions:

  1. Renew the server certificate (production)
  2. Add "tls_insecure": true (development only)

Self-Signed Certificate

Error: SELF_SIGNED_CERT_IN_CHAIN

Solutions:

  1. Install proper CA-signed certificate (production)
  2. Add "tls_insecure": true (development)
  3. Add certificate to system trust store

Certificate Verification Failed

Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE

Solutions:

  1. Check certificate chain configuration
  2. Update system CA certificate store
  3. Use "tls_insecure": true for development

Authentication Issues

Token Not Working

Symptoms: 401 Unauthorized errors

Check:

  1. Token format (should start with inf_)
  2. Token permissions and scope
  3. Token expiration date
  4. Environment variable substitution

Environment Variable Not Found

Error: Token resolves to literal ${env:VARIABLE_NAME}

Solutions:

  1. Verify environment variable is set
  2. Restart VSCode after setting variables
  3. Check variable name spelling

Network Connectivity Issues

Proxy Interference

Symptoms: Connection timeouts or SSL errors

Solutions:

  1. Configure VSCode proxy settings
  2. Add infrahub server to proxy bypass list
  3. Verify proxy supports HTTPS CONNECT

Firewall Blocking

Symptoms: Connection refused or timeouts

Solutions:

  1. Verify outbound HTTPS (443) access
  2. Add Infrahub server to firewall allowlist
  3. Check for deep packet inspection interference

Security Best Practices Summary

Development Environment

  • ✅ Use tls_insecure: true for self-signed certificates
  • ✅ Use separate development API tokens
  • ✅ Limit development token permissions
  • ✅ Regular token rotation
  • ❌ Never use production tokens in development

Staging Environment

  • ✅ Use proper certificates when possible
  • ✅ Separate staging API tokens
  • ✅ Mirror production security settings
  • ✅ Test certificate configurations
  • ❌ Don't use tls_insecure unless necessary

Production Environment

  • ✅ Always use proper CA-signed certificates
  • ✅ Never use tls_insecure: true
  • ✅ Implement token rotation procedures
  • ✅ Monitor and log access
  • ✅ Regular security reviews
  • ❌ Never compromise on certificate verification

Token Management

  • ✅ Store in environment variables
  • ✅ Use minimal required permissions
  • ✅ Regular rotation schedule
  • ✅ Audit token usage
  • ❌ Never commit tokens to version control
  • ❌ Don't share tokens between environments