API 密钥管理
API 密钥是访问 DeepSeek API 的重要凭证。本指南将帮助您了解如何安全地创建、管理和使用 API 密钥。
概述
API 密钥是一个唯一的字符串,用于验证您的身份并授权访问 DeepSeek API。每个密钥都与您的账户关联,并记录所有的 API 使用情况。
密钥格式
DeepSeek API 密钥格式为:
sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
创建 API 密钥
步骤 1: 访问控制台
- 登录 DeepSeek 控制台
- 导航到 "API 密钥" 页面
步骤 2: 创建新密钥
- 点击 "创建新密钥" 按钮
- 填写密钥信息:
- 名称: 为密钥设置一个描述性名称(如:生产环境、测试环境)
- 权限: 选择密钥的访问权限
- 过期时间: 设置密钥的有效期(可选)
步骤 3: 保存密钥
重要提醒
密钥只会在创建时显示一次,请立即复制并安全保存!
bash
# 示例:将密钥保存到环境变量
export DEEPSEEK_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
密钥权限管理
权限类型
权限 | 描述 | 适用场景 |
---|---|---|
完全访问 | 可以访问所有 API 功能 | 生产环境、完整应用 |
只读访问 | 只能查询信息,不能修改 | 监控、报表生成 |
模型访问 | 只能访问特定模型 | 特定功能的应用 |
受限访问 | 自定义权限范围 | 第三方集成 |
设置权限
python
# 示例:检查密钥权限
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.deepseek.com"
)
try:
# 测试模型访问权限
models = client.models.list()
print("✅ 模型访问权限正常")
# 测试聊天完成权限
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "test"}],
max_tokens=1
)
print("✅ 聊天完成权限正常")
except Exception as e:
print(f"❌ 权限检查失败: {e}")
密钥安全最佳实践
1. 存储安全
环境变量(推荐)
bash
# Linux/macOS
export DEEPSEEK_API_KEY="your-api-key"
# Windows CMD
set DEEPSEEK_API_KEY=your-api-key
# Windows PowerShell
$env:DEEPSEEK_API_KEY="your-api-key"
配置文件
python
# config.py
import os
from dotenv import load_dotenv
load_dotenv()
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
DEEPSEEK_BASE_URL = "https://api.deepseek.com"
密钥管理服务
python
# 使用 AWS Secrets Manager
import boto3
def get_api_key():
client = boto3.client('secretsmanager')
response = client.get_secret_value(SecretId='deepseek-api-key')
return response['SecretString']
2. 传输安全
正确的使用方式
python
import openai
# ✅ 正确:使用 HTTPS 和 Authorization 头
client = openai.OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com" # 注意使用 HTTPS
)
错误的使用方式
python
# ❌ 错误:在 URL 中传递密钥
url = f"https://api.deepseek.com/v1/chat/completions?api_key={api_key}"
# ❌ 错误:在客户端代码中硬编码
api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
3. 访问控制
最小权限原则
python
# 为不同环境创建不同权限的密钥
ENVIRONMENTS = {
"development": {
"api_key": os.getenv("DEV_DEEPSEEK_API_KEY"),
"permissions": ["chat", "models"]
},
"production": {
"api_key": os.getenv("PROD_DEEPSEEK_API_KEY"),
"permissions": ["chat", "models", "billing"]
}
}
密钥轮换
定期轮换策略
建议每 90 天轮换一次 API 密钥:
python
import datetime
import logging
class APIKeyManager:
def __init__(self):
self.key_created_date = datetime.datetime.now()
def should_rotate_key(self):
days_since_creation = (datetime.datetime.now() - self.key_created_date).days
return days_since_creation >= 90
def rotate_key_if_needed(self):
if self.should_rotate_key():
logging.warning("API 密钥需要轮换!")
# 实现密钥轮换逻辑
return True
return False
平滑轮换流程
- 创建新密钥: 在控制台创建新的 API 密钥
- 并行运行: 新旧密钥同时有效一段时间
- 逐步迁移: 逐个服务迁移到新密钥
- 验证功能: 确保所有功能正常工作
- 撤销旧密钥: 确认迁移完成后撤销旧密钥
监控和审计
使用情况监控
python
import openai
import logging
class APIUsageMonitor:
def __init__(self, api_key):
self.client = openai.OpenAI(
api_key=api_key,
base_url="https://api.deepseek.com"
)
def log_api_call(self, endpoint, tokens_used):
logging.info(f"API 调用: {endpoint}, Token 使用: {tokens_used}")
def check_usage_limits(self):
# 检查使用量是否接近限制
try:
balance = self.client.get("/v1/user/balance")
if balance['remaining'] < 1000: # 余额不足 1000 Token
logging.warning("API 余额不足,请及时充值")
except Exception as e:
logging.error(f"检查余额失败: {e}")
异常检测
python
import time
from collections import defaultdict
class SecurityMonitor:
def __init__(self):
self.request_counts = defaultdict(list)
def log_request(self, api_key_id, timestamp=None):
if timestamp is None:
timestamp = time.time()
self.request_counts[api_key_id].append(timestamp)
def detect_anomalies(self, api_key_id, threshold=100):
"""检测异常使用模式"""
recent_requests = [
t for t in self.request_counts[api_key_id]
if time.time() - t < 3600 # 最近一小时
]
if len(recent_requests) > threshold:
logging.warning(f"检测到异常使用模式: {api_key_id}")
return True
return False
故障排除
常见错误
1. 认证失败 (401)
python
# 错误信息
{
"error": {
"message": "Invalid API key provided",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}
# 解决方案
def troubleshoot_auth_error():
# 1. 检查密钥格式
api_key = os.getenv("DEEPSEEK_API_KEY")
if not api_key.startswith("sk-"):
print("❌ 密钥格式错误")
# 2. 检查密钥长度
if len(api_key) != 51: # sk- + 48 字符
print("❌ 密钥长度错误")
# 3. 测试密钥有效性
try:
client = openai.OpenAI(api_key=api_key, base_url="https://api.deepseek.com")
client.models.list()
print("✅ 密钥有效")
except Exception as e:
print(f"❌ 密钥无效: {e}")
2. 权限不足 (403)
python
# 检查权限
def check_permissions():
permissions = [
("models", lambda: client.models.list()),
("chat", lambda: client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "test"}],
max_tokens=1
)),
]
for name, test_func in permissions:
try:
test_func()
print(f"✅ {name} 权限正常")
except Exception as e:
print(f"❌ {name} 权限不足: {e}")
调试工具
python
import openai
import logging
# 启用详细日志
logging.basicConfig(level=logging.DEBUG)
def debug_api_key():
api_key = os.getenv("DEEPSEEK_API_KEY")
print(f"密钥前缀: {api_key[:10]}...")
print(f"密钥长度: {len(api_key)}")
try:
client = openai.OpenAI(
api_key=api_key,
base_url="https://api.deepseek.com"
)
# 测试基本功能
models = client.models.list()
print(f"✅ 可访问 {len(models.data)} 个模型")
except openai.AuthenticationError as e:
print(f"❌ 认证错误: {e}")
except openai.PermissionDeniedError as e:
print(f"❌ 权限错误: {e}")
except Exception as e:
print(f"❌ 其他错误: {e}")
企业级管理
团队密钥管理
python
class TeamAPIKeyManager:
def __init__(self):
self.team_keys = {}
def create_team_key(self, team_name, permissions):
"""为团队创建专用密钥"""
# 实现团队密钥创建逻辑
pass
def revoke_team_key(self, team_name):
"""撤销团队密钥"""
# 实现密钥撤销逻辑
pass
def audit_team_usage(self, team_name):
"""审计团队使用情况"""
# 实现使用情况审计
pass
成本分摊
python
def allocate_costs_by_team():
"""按团队分摊 API 使用成本"""
usage_data = get_usage_by_api_key()
team_costs = {}
for api_key, usage in usage_data.items():
team = get_team_by_api_key(api_key)
if team not in team_costs:
team_costs[team] = 0
team_costs[team] += calculate_cost(usage)
return team_costs
相关资源
最后更新: 2025年1月27日