9.1 KiB
Secure Setup Guide for TradingAgents
This guide will help you set up TradingAgents with security best practices in mind.
Prerequisites
- Python 3.10 or higher
- Git
- API keys for OpenAI and Alpha Vantage
Step 1: Clone the Repository
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents
Step 2: Create Virtual Environment
Always use a virtual environment to isolate dependencies:
# Create virtual environment
python3 -m venv venv
# Activate it
# On macOS/Linux:
source venv/bin/activate
# On Windows:
# venv\Scripts\activate
Step 3: Install Dependencies Securely
# Upgrade pip first
pip install --upgrade pip
# Install dependencies from requirements.txt
pip install -r requirements.txt
# Optional: Install development dependencies
pip install pytest bandit black flake8 mypy safety
Verify Dependency Security
# Check for known vulnerabilities
pip install safety
safety check
# Or use pip-audit
pip install pip-audit
pip-audit
Step 4: Configure Environment Variables
CRITICAL: Never hardcode API keys in your code!
Create .env File
# Copy the example file
cp .env.example .env
# Edit .env with your actual values
# Use your preferred editor (nano, vim, code, etc.)
nano .env
Fill in Your API Keys
Edit .env to include your actual API keys:
# Required API Keys
OPENAI_API_KEY=sk-your-actual-openai-key-here
ALPHA_VANTAGE_API_KEY=your-actual-alpha-vantage-key-here
# Optional: Custom directories
TRADINGAGENTS_DATA_DIR=/secure/path/to/data
TRADINGAGENTS_RESULTS_DIR=/secure/path/to/results
# Optional: Logging
LOG_LEVEL=INFO
Verify .env is Gitignored
# Verify .env is in .gitignore
cat .gitignore | grep ".env"
# Should output: .env
Step 5: Secure Your API Keys
Get API Keys
-
OpenAI API Key:
- Go to https://platform.openai.com/api-keys
- Create a new secret key
- Copy it immediately (you won't see it again)
-
Alpha Vantage API Key:
- Go to https://www.alphavantage.co/support/#api-key
- Fill in the form to get a free API key
- Copy the key from the email
Protect Your Keys
# Set proper permissions on .env file (Unix-like systems)
chmod 600 .env
# Verify permissions
ls -l .env
# Should show: -rw-------
API Key Best Practices
- Use separate keys for development and production
- Rotate keys regularly (every 90 days recommended)
- Set spending limits in your API provider dashboard
- Monitor usage regularly for unusual activity
- Never share keys via email, Slack, or other insecure channels
- Revoke immediately if you suspect compromise
Step 6: Create Secure Data Directories
# Create directories with proper permissions
mkdir -p data results
# Set restrictive permissions (Unix-like systems)
chmod 700 data results
# Verify
ls -ld data results
# Should show: drwx------
Step 7: Verify Installation
# Test import
python -c "from tradingagents.graph.trading_graph import TradingAgentsGraph; print('Success!')"
# Run security validators test
python -c "from tradingagents.security import validate_ticker; print(validate_ticker('AAPL'))"
Step 8: Run Security Checks
Static Security Analysis
# Run Bandit security linter
bandit -r tradingagents/ -ll
# Check for common security issues
python -m bandit -r tradingagents/ -f json -o security-report.json
Check for Secrets in Git History
# Install trufflehog or gitleaks
# Using gitleaks:
docker run -v $(pwd):/path zricethezav/gitleaks:latest detect --source="/path" -v
# Or manually search
git log -p | grep -i "api[_-]key\|secret\|password" | head -20
Step 9: Configure Logging
Create a logging configuration file:
# Create logs directory
mkdir -p logs
chmod 700 logs
# Create logging config
cat > logging_config.json <<EOF
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"standard": {
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}
},
"handlers": {
"file": {
"class": "logging.handlers.RotatingFileHandler",
"filename": "logs/tradingagents.log",
"maxBytes": 10485760,
"backupCount": 5,
"formatter": "standard"
}
},
"root": {
"level": "INFO",
"handlers": ["file"]
}
}
EOF
Step 10: Test the Setup
Create a test script to verify everything works:
# test_setup.py
from tradingagents.graph.trading_graph import TradingAgentsGraph
from tradingagents.default_config import DEFAULT_CONFIG
from tradingagents.security import validate_ticker, validate_date
from dotenv import load_dotenv
import os
# Load environment
load_dotenv()
# Verify API keys are set
assert os.getenv("OPENAI_API_KEY"), "OPENAI_API_KEY not set"
assert os.getenv("ALPHA_VANTAGE_API_KEY"), "ALPHA_VANTAGE_API_KEY not set"
print("✓ API keys are set")
# Verify security validators
try:
validate_ticker("AAPL")
print("✓ Ticker validation works")
except Exception as e:
print(f"✗ Ticker validation failed: {e}")
try:
validate_date("2024-01-15")
print("✓ Date validation works")
except Exception as e:
print(f"✗ Date validation failed: {e}")
# Verify config
config = DEFAULT_CONFIG.copy()
assert config["data_dir"] != "/Users/yluo/Documents/Code/ScAI/FR1-data", \
"Hardcoded path still present!"
print("✓ Configuration is secure")
# Test basic initialization
try:
config["quick_think_llm"] = "gpt-4o-mini"
config["deep_think_llm"] = "gpt-4o-mini"
ta = TradingAgentsGraph(config=config, debug=False)
print("✓ TradingAgents initialized successfully")
except Exception as e:
print(f"✗ Initialization failed: {e}")
print("\n✓ All security checks passed!")
Run the test:
python test_setup.py
Step 11: Set Up Git Hooks (Optional)
Prevent accidental commits of secrets:
# Install pre-commit hooks
pip install pre-commit
# Create .pre-commit-config.yaml
cat > .pre-commit-config.yaml <<EOF
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: detect-private-key
- id: check-added-large-files
- id: check-yaml
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/Yelp/detect-secrets
rev: v1.4.0
hooks:
- id: detect-secrets
args: ['--baseline', '.secrets.baseline']
- repo: https://github.com/PyCQA/bandit
rev: 1.7.5
hooks:
- id: bandit
args: ['-ll', '-i']
EOF
# Install hooks
pre-commit install
# Run manually
pre-commit run --all-files
Step 12: Production Deployment Checklist
Before deploying to production:
- All API keys are stored securely (not in code)
.envfile is never committed to git- Debug mode is disabled (
debug=False) - Logging is configured properly
- File permissions are restrictive (600 for files, 700 for directories)
- Dependencies are pinned to specific versions
- Security scanning is enabled in CI/CD
- Rate limiting is configured
- Monitoring and alerting are set up
- Backup strategy is in place
- Incident response plan exists
Troubleshooting
Issue: API Key Not Found
Error: ValueError: OPENAI_API_KEY environment variable is not set
Solution:
# Verify .env file exists
ls -la .env
# Verify .env is loaded
python -c "from dotenv import load_dotenv; import os; load_dotenv(); print(os.getenv('OPENAI_API_KEY'))"
# Check if running from correct directory
pwd
Issue: Permission Denied
Error: PermissionError: [Errno 13] Permission denied
Solution:
# Fix directory permissions
chmod 700 data results logs
# Fix file permissions
chmod 600 .env
Issue: Import Errors
Error: ModuleNotFoundError: No module named 'tradingagents'
Solution:
# Verify virtual environment is activated
which python
# Reinstall in development mode
pip install -e .
Security Monitoring
Set Up Alerts
Monitor for:
- Unusual API usage patterns
- Failed authentication attempts
- Large data transfers
- Unexpected errors
Regular Security Tasks
- Weekly: Review logs for anomalies
- Monthly: Rotate API keys
- Quarterly: Update dependencies and scan for vulnerabilities
- Annually: Full security audit
Additional Resources
- SECURITY.md - Security policy and vulnerability reporting
- SECURITY_AUDIT.md - Detailed security audit results
- IMPROVEMENTS.md - Suggested improvements and enhancements
- OWASP Top 10
- Python Security Best Practices
Getting Help
If you encounter security issues:
- DO NOT open a public GitHub issue
- Email: yijia.xiao@cs.ucla.edu
- Include detailed steps to reproduce
- Wait for acknowledgment (within 48 hours)
Conclusion
You now have a secure installation of TradingAgents! Remember:
- Keep your API keys secret
- Regularly update dependencies
- Monitor for unusual activity
- Follow security best practices
Happy and secure trading!