Skip to content

API 密钥管理

API 密钥是访问 DeepSeek API 的重要凭证。本指南将帮助您了解如何安全地创建、管理和使用 API 密钥。

概述

API 密钥是一个唯一的字符串,用于验证您的身份并授权访问 DeepSeek API。每个密钥都与您的账户关联,并记录所有的 API 使用情况。

密钥格式

DeepSeek API 密钥格式为:

sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

创建 API 密钥

步骤 1: 访问控制台

  1. 登录 DeepSeek 控制台
  2. 导航到 "API 密钥" 页面

步骤 2: 创建新密钥

  1. 点击 "创建新密钥" 按钮
  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

平滑轮换流程

  1. 创建新密钥: 在控制台创建新的 API 密钥
  2. 并行运行: 新旧密钥同时有效一段时间
  3. 逐步迁移: 逐个服务迁移到新密钥
  4. 验证功能: 确保所有功能正常工作
  5. 撤销旧密钥: 确认迁移完成后撤销旧密钥

监控和审计

使用情况监控

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日

基于 DeepSeek AI 大模型技术