深度

Claude Code 环境变量与密钥管理:安全配置 API Key 和敏感信息的完整指南

Claude Code 开发中安全处理环境变量和 API 密钥的完整指南:.env 文件规范、dotenv 与系统环境变量的区别、密钥轮换策略、防止密钥泄露到 Git、secrets 加密存储、生产环境的 Vault/AWS Secrets Manager 集成,以及 CLAUDE.md 安全规范配置。

2026/3/164分钟 阅读ClaudeEagle

API 密钥泄露是开发中最常见的安全事故之一。本文讲解如何在使用 Claude Code 开发时, 安全地管理环境变量和各类密钥。

基础原则

❌ 永远不要把密钥写在代码里 ❌ 永远不要把 .env 文件提交到 Git ✅ 用环境变量,不用硬编码 ✅ .gitignore 里明确排除密钥文件 ✅ 生产环境用专门的密钥管理服务

告诉 Claude Code 这些规范

在项目 CLAUDE.md 里写明:

markdown
## 安全规范(强制执行)

### 密钥管理
- 所有密钥和 Token **必须** 从环境变量读取
- 代码里绝对不能出现:sk-、password=、token=、secret= 等明文值
- 新增环境变量时,同步更新 .env.example(不含真实值)

### .gitignore 必须包含
- .env
- .env.local
- .env.*.local
- *.pem, *.key
- secrets/

### 代码示例(正确做法)
```python
import os
API_KEY = os.environ.get("OPENAI_API_KEY")
if not API_KEY:
    raise ValueError("OPENAI_API_KEY environment variable not set")
## 项目 .env 文件规范 ```bash # .env.example(提交到 Git 的模板,无真实值) # 复制为 .env 并填入真实值 # Anthropic ANTHROPIC_API_KEY=sk-ant-your-key-here # 数据库 DATABASE_URL=postgresql://user:password@localhost:5432/mydb # 第三方服务 STRIPE_SECRET_KEY=sk_test_your-key-here SENDGRID_API_KEY=SG.your-key-here # 应用配置 NODE_ENV=development PORT=3000 JWT_SECRET=change-this-in-production
bash
# .gitignore(必须包含)
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
*.pem
*.key
secrets/
.secrets

在代码中安全读取

Python

python
from dotenv import load_dotenv
import os

load_dotenv()  # 读取 .env 文件

ANTHROPIC_API_KEY = os.environ.get("ANTHROPIC_API_KEY")
DATABASE_URL = os.environ.get("DATABASE_URL")

# 启动时验证必要变量
required_vars = ["ANTHROPIC_API_KEY", "DATABASE_URL", "JWT_SECRET"]
missing = [v for v in required_vars if not os.environ.get(v)]
if missing:
    raise EnvironmentError(f"Missing required env vars: {', '.join(missing)}")

Node.js / TypeScript

typescript
import dotenv from "dotenv";
dotenv.config();

// 带类型的环境变量封装
function getEnv(key: string, required = true): string {
  const value = process.env[key];
  if (required && !value) {
    throw new Error(`Missing required environment variable: ${key}`);
  }
  return value || "";
}

export const config = {
  anthropicKey: getEnv("ANTHROPIC_API_KEY"),
  databaseUrl: getEnv("DATABASE_URL"),
  jwtSecret: getEnv("JWT_SECRET"),
  port: parseInt(getEnv("PORT", false) || "3000"),
};

Claude Code 的 Anthropic API Key 配置

bash
# 方式 1:临时设置(当前会话)
export ANTHROPIC_API_KEY="sk-ant-你的key"
claude

# 方式 2:永久设置(推荐)
echo 'export ANTHROPIC_API_KEY="sk-ant-你的key"' >> ~/.bashrc
source ~/.bashrc

# 方式 3:.env 文件(Claude Code 项目使用)
# 在项目根目录创建 .env
echo 'ANTHROPIC_API_KEY=sk-ant-你的key' > .env
# claude 会自动加载当前目录的 .env

防止 Claude Code 意外泄露密钥

CLAUDE.md 中明确指示:

markdown
## 禁止行为
1. 不要在任何输出中打印环境变量的值
2. 不要在日志里记录 API Key(即使是调试日志)
3. 不要把 .env 内容复制到代码注释里
4. 生成的代码示例要用占位符,不用真实值:
   - 正确:`API_KEY = os.environ.get("OPENAI_API_KEY")`
   - 错误:`API_KEY = "sk-abc123..."`

已泄露密钥的应急处理

如果密钥意外提交到 Git:

bash
# 1. 立刻吊销泄露的密钥(去对应服务的控制台)

# 2. 从 Git 历史中删除(git-filter-repo 方法)
pip install git-filter-repo
git filter-repo --path .env --invert-paths

# 3. 强制推送(需要团队协调)
git push --force

# 4. 通知所有有仓库克隆的人重新 clone

重要:删除 Git 历史不等于安全,因为如果仓库是公开的, 可能已被 GitHub 的密钥扫描系统或爬虫记录。必须先吊销密钥

生产环境密钥管理

AWS Secrets Manager

python
import boto3, json

def get_secret(secret_name, region="us-east-1"):
    client = boto3.client("secretsmanager", region_name=region)
    response = client.get_secret_value(SecretId=secret_name)
    return json.loads(response["SecretString"])

# 使用
secrets = get_secret("my-app/production")
API_KEY = secrets["ANTHROPIC_API_KEY"]

GitHub Actions Secrets(CI/CD)

yaml
# .github/workflows/deploy.yml
jobs:
  deploy:
    steps:
      - name: Run with secrets
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          DATABASE_URL: ${{ secrets.DATABASE_URL }}
        run: |
          claude -p "Run production checks" --no-interactive

密钥扫描(Pre-commit Hook)

bash
# 安装 detect-secrets
pip install detect-secrets

# 初始化基准
detect-secrets scan > .secrets.baseline

# 添加 pre-commit hook
cat > .git/hooks/pre-commit << 'EOF'
#!/bin/sh
detect-secrets-hook --baseline .secrets.baseline
EOF
chmod +x .git/hooks/pre-commit

以后每次 git commit 都会自动扫描,发现密钥会阻止提交。


来源:Claude Code Settings - Anthropic 官方文档

相关文章推荐

深度Claude Code 沙箱凭据保护体系再升级:v2.1.224 拒绝规则绕过漏洞与实践检查清单Claude Code v2.1.224 修复沙箱文件系统拒绝规则(denyRead 带结尾斜杠)在 Linux/macOS 上可被静默绕过的问题,提供实用的沙箱配置自检清单。2026/8/10深度Claude Code 沙箱凭据保护完全指南:从明文拒绝到 JWT 感知脱敏的演进之路梳理 Claude Code 沙箱凭据保护体系的四种模式——结构化脱敏、JWT 感知脱敏、AWS SigV4 重签名、文件级哨兵替换,帮你选择适合的安全策略。2026/8/7深度Claude Code v2.1.207 安全深度解析:插件 headersHelper Shell 注入漏洞修复始末深度解析 Claude Code v2.1.207 修复的插件系统 Shell 注入漏洞:${user_config.*} 在 Shell 形式命令中被拒绝,Hooks 需改用 exec 形式或环境变量,Monitors 和 headersHelper 需在脚本内部读取配置。同步解析关联的 pluginConfigs 读取来源收紧措施。2026/7/11深度Claude Code 安全强化速览:Auto Mode 防误删、后台通知防伪造双重防线解析深度解析 Claude Code v2.1.205 两项容易被忽略但意义重大的安全强化:Auto Mode 对变量值不明的 rm -rf 命令先询问再执行,以及后台任务通知明确标注「无真实人工输入」防止伪造批准被误信。分析两者背后共同的「默认保守」设计哲学。2026/7/10深度Claude Code 团队协作安全实践:MCP 服务器审批机制与工作区信任详解Claude Code v2.1.196 起引入的 MCP 服务器审批机制,确保克隆仓库无法自动获得已提交的 MCP 服务器信任。本文详解工作区信任模型如何防止供应链投毒攻击,并提供团队 Onboarding 安全检查清单。2026/7/6深度Claude Code Auto Mode 技术深度解析:两层分类器架构如何防止 AI 越权行为Anthropic 工程博客深度解析 Auto Mode 背后的技术:用户审批了 93% 的权限请求却仍有疲劳感;内部事故日志(误删远程分支/上传 GitHub Token/生产数据库误迁移);两层防御(输入层提示注入探针+输出层对话记录分类器);三层许可决策;实测数据(0.4% 误报率,17% 漏报率,附原因分析);多 Agent 传递的安全处理;以及 Deny-and-Continue 机制。2026/5/3