AWS Kiro 账号池管理系统 | 将 Amazon Q Developer API 转换为 OpenAI 兼容格式 | 支持多账号池、OIDC 自动认证、令牌自动刷新、Web 管理控制台 | Go

AWS Kiro 账号池管理系统 | 将 Amazon Q Developer API 转换为 OpenAI 兼容格式 | 支持多账号池、OIDC 自动认证、令牌自动刷新、Web 管理控制台 | Go

Claude API - AWS Kiro 账号池管理 | OpenAI 兼容代理服务

项目地址在wget 里面 web页面访问把后缀.git删掉即可

效果图

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

AWS Kiro 账号池管理系统 - 将 Amazon Q Developer (Kiro) API 转换为 OpenAI 兼容格式的企业级 Go 代理服务。支持多账号池管理、OIDC 自动认证、令牌自动刷新、流式响应、完整的 Web 管理控制台。

关键词: AWS Kiro, Amazon Q Developer, Claude API, OpenAI Proxy, 账号池管理, OIDC 认证, Go 代理服务, 多账号管理, API 转换, 企业级代理

📋 目录

✨ 核心特性

🏊 AWS Kiro 账号池管理

  • 多账号池: 支持最多 100 个 AWS Kiro (Amazon Q Developer) 账号统一管理
  • OIDC 自动认证: 完整的 AWS OIDC 设备授权流程,无需手动获取令牌
  • 智能负载均衡: 自动选择可用账号,均衡分配请求负载
  • 令牌自动刷新: 后台自动检测并刷新过期的 AWS 令牌,保持账号池持续可用
  • 账号状态监控: 实时监控每个 Kiro 账号的健康状态、使用次数、最后使用时间
  • 批量导入导出: 支持批量添加、导入、导出 AWS Kiro 账号配置

🔄 API 格式转换

  • OpenAI 兼容: 完全兼容 OpenAI Chat Completions API 格式
  • Claude 支持: 支持 Claude Messages API 格式
  • 流式响应: SSE (Server-Sent Events) 流式输出
  • 工具调用: 完整支持 Function Calling / Tool Use
  • 模型映射: Claude 4.5 Opus、Sonnet 4.5、Sonnet 3.5 自动映射到 Amazon Q

🔐 企业级安全

  • API Key 认证: 自定义 API Key 保护服务访问
  • 密码保护: 管理控制台密码保护
  • IP 黑名单: 支持封禁/解封特定 IP 地址
  • 频率限制: 可配置的 IP 和 API Key 双重限流

🖥️ Web 管理控制台

  • 现代化界面: Vue.js 3 驱动的响应式 Web 控制台
  • 账号池监控: 实时查看所有 AWS Kiro 账号状态、令牌有效期、使用统计
  • 在线测试: 内置聊天测试界面,支持流式对话
  • 请求日志: 完整的 API 请求日志、统计图表、错误追踪
  • 批量操作: 批量添加、删除、刷新 Kiro 账号
  • 系统设置: 可视化配置 API Key、限流规则、日志保留策略

🚀 快速开始

方式一:下载预编译版本(推荐)

Releases 下载对应平台的压缩包:

# Linux AMD64wget https://github.com/kkddytd/claude-api/releases/latest/download/claude-server-linux-amd64.tar.gz tar -xzf claude-server-linux-amd64.tar.gz ./claude-server # macOS (Apple Silicon)wget https://github.com/kkddytd/claude-api/releases/latest/download/claude-server-darwin-arm64.tar.gz tar -xzf claude-server-darwin-arm64.tar.gz ./claude-server # Windows# 下载 claude-server-windows-amd64.zip 并解压# 双击运行 claude-server.exe

方式二:从源码编译

# 克隆仓库git clone https://github.com/kkddytd/claude-api.git cd claude-api # 安装 Go 依赖 go mod download # 编译 go build -o claude-server main.go # 运行 ./claude-server 

首次使用

  1. 访问控制台:http://localhost:62311
  2. 默认密码:admin(首次登录后请立即修改)
  3. 添加 AWS Kiro 账号:点击"账号管理" → “添加账号” → 完成 OIDC 授权
  4. 配置 API Key:点击"系统设置" → 设置自定义 API Key
  5. 开始使用:使用 OpenAI SDK 连接到 http://localhost:62311/v1

🔨 编译构建

构建脚本

项目提供了强大的 build.sh 脚本,支持多平台编译:

# 构建当前平台(server + desktop) ./build.sh # 仅构建后端服务 ./build.sh server # 仅构建桌面应用(macOS + Windows) ./build.sh desktop # 构建所有平台 ./build.sh all # 清理构建产物 ./build.sh clean # 指定版本构建 ./build.sh server -v v1.2.0 # 指定平台构建 ./build.sh server -p linux/amd64 # 构建选项 ./build.sh --no-cache # 禁用构建缓存 ./build.sh --verbose # 显示详细日志 ./build.sh -h # 显示帮助信息

支持的平台

服务端

  • Linux: amd64, arm64
  • macOS: amd64, arm64
  • Windows: amd64, arm64

桌面应用

  • macOS: Universal (需要 Wails v2)
  • Windows: amd64 (需要 Wails v2)

构建产物

dist/ ├── server/ │ ├── claude-server-linux-amd64.tar.gz │ ├── claude-server-linux-arm64.tar.gz │ ├── claude-server-darwin-amd64.tar.gz │ ├── claude-server-darwin-arm64.tar.gz │ ├── claude-server-windows-amd64.zip │ └── claude-server-windows-arm64.zip └── desktop/ ├── Claude-API-Server-macOS.zip └── Claude-API-Server-Windows.zip 

手动编译

# 当前平台 go build -o claude-server main.go # 带版本号 go build -ldflags="-X main.Version=v1.0.0" -o claude-server main.go # 跨平台编译GOOS=linux GOARCH=amd64 go build -o claude-server-linux-amd64 main.go GOOS=darwin GOARCH=arm64 go build -o claude-server-darwin-arm64 main.go GOOS=windows GOARCH=amd64 go build -o claude-server-windows-amd64.exe main.go 

📦 部署指南

Linux Systemd 服务

创建服务文件 /etc/systemd/system/claude-api.service

[Unit] Description=Claude API Server After=network.target [Service] Type=simple User=www-data WorkingDirectory=/opt/claude-api ExecStart=/opt/claude-api/claude-server Restart=on-failure RestartSec=5s # 环境变量(可选) Environment="PORT=62311" [Install] WantedBy=multi-user.target 

启动服务:

# 部署文件sudomkdir -p /opt/claude-api sudocp claude-server /opt/claude-api/ sudochown -R www-data:www-data /opt/claude-api # 启动服务sudo systemctl daemon-reload sudo systemctl enable claude-api sudo systemctl start claude-api # 查看状态sudo systemctl status claude-api # 查看日志sudo journalctl -u claude-api -f 

Nginx 反向代理

server { listen 80; server_name api.example.com; # 重定向到 HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name api.example.com; # SSL 证书 ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; # SSL 配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://127.0.0.1:62311; proxy_http_version 1.1; # WebSocket 支持 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; # 代理头 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 流式响应支持 proxy_buffering off; proxy_cache_bypass $http_upgrade; proxy_read_timeout 300s; proxy_connect_timeout 75s; } } 

重载 Nginx:

sudo nginx -t sudo systemctl reload nginx 

进程管理器(PM2)

# 安装 PM2npminstall -g pm2 # 创建 ecosystem.config.jscat> ecosystem.config.js <<'EOF' module.exports = { apps: [{ name: 'claude-api', script: './claude-server', cwd: '/opt/claude-api', instances: 1, autorestart: true, watch: false, max_memory_restart: '500M', env: { PORT: 62311 } }] } EOF# 启动 pm2 start ecosystem.config.js # 查看状态 pm2 status # 查看日志 pm2 logs claude-api # 开机自启 pm2 startup pm2 save 

环境变量配置

支持的环境变量:

# 服务端口exportPORT=62311# 数据目录(桌面应用)exportDATA_DIR=/path/to/data # 禁用浏览器自动打开exportNO_BROWSER=true 

数据备份

# 备份数据库cp data.sqlite3 data.sqlite3.backup.$(date +%Y%m%d_%H%M%S)# 定时备份(crontab)02 * * * cd /opt/claude-api &&cp data.sqlite3 backups/data.sqlite3.$(date +\%Y\%m\%d)# 保留最近 7 天的备份03 * * * find /opt/claude-api/backups -name "data.sqlite3.*" -mtime +7 -delete 

💡 使用示例

Python (OpenAI SDK)

from openai import OpenAI client = OpenAI( api_key="your-api-key", base_url="http://localhost:62311/v1")# 普通对话 response = client.chat.completions.create( model="claude-sonnet-4.5", messages=[{"role":"user","content":"你好"}])print(response.choices[0].message.content)# 流式对话 stream = client.chat.completions.create( model="claude-sonnet-4.5", messages=[{"role":"user","content":"写一首诗"}], stream=True)for chunk in stream:if chunk.choices[0].delta.content:print(chunk.choices[0].delta.content, end="")

Node.js (OpenAI SDK)

import OpenAI from'openai';const client =newOpenAI({apiKey:'your-api-key',baseURL:'http://localhost:62311/v1'});// 普通对话const response =await client.chat.completions.create({model:'claude-sonnet-4.5',messages:[{role:'user',content:'你好'}]}); console.log(response.choices[0].message.content);// 流式对话const stream =await client.chat.completions.create({model:'claude-sonnet-4.5',messages:[{role:'user',content:'写一首诗'}],stream:true});forawait(const chunk of stream){if(chunk.choices[0]?.delta?.content){ process.stdout.write(chunk.choices[0].delta.content);}}

cURL

# 普通请求curl -X POST http://localhost:62311/v1/chat/completions \ -H "Content-Type: application/json"\ -H "Authorization: Bearer your-api-key"\ -d '{ "model": "claude-sonnet-4.5", "messages": [ {"role": "user", "content": "你好"} ] }'# 流式请求curl -X POST http://localhost:62311/v1/chat/completions \ -H "Content-Type: application/json"\ -H "Authorization: Bearer your-api-key"\ -d '{ "model": "claude-sonnet-4.5", "messages": [ {"role": "user", "content": "你好"} ], "stream": true }'

⚙️ 配置说明

config.yaml

database:type: sqlite # 或 mysqlsqlite:path: data.sqlite3 mysql:host: localhost port:3306user: root password:""database: claude-api charset: utf8mb4 server:host: 0.0.0.0 port:62311debug:falsetest:false

系统设置(存储在数据库)

设置项说明默认值
apiKeyOpenAI API Key
adminPassword管理员密码admin
debugLog调试日志false
enableRequestLog请求日志true
logRetentionDays日志保留天数30
enableIPRateLimitIP 频率限制false
ipRateLimitWindow限制时间窗口(分钟)1
ipRateLimitMax窗口内最大请求数100

📡 API 文档

OpenAI 兼容端点

POST /v1/chat/completions Content-Type: application/json Authorization: Bearer YOUR_API_KEY {"model":"claude-sonnet-4.5", "messages":[{"role":"user", "content":"你好"}], "stream":true}

支持的模型

  • claude-4.5-opus-high - Claude 4.5 Opus (高性能)
  • claude-4.5-opus-low - Claude 4.5 Opus (低成本)
  • claude-sonnet-4.5 - Claude Sonnet 4.5
  • claude-sonnet-3.5 - Claude Sonnet 3.5

管理端点

# 账号管理 GET /v2/accounts # 列出账号 POST /v2/accounts # 创建账号 POST /v2/accounts/feed # 批量添加 POST /v2/accounts/import # 导入账号 GET /v2/accounts/export # 导出账号 DELETE /v2/accounts/:id # 删除账号# 设置管理 GET /v2/settings # 获取设置 PUT /v2/settings # 更新设置# 日志管理 GET /v2/logs # 获取日志 GET /v2/logs/stats # 统计数据 POST /v2/logs/cleanup # 清理日志# IP 管理 GET /v2/ips/blocked # 被封禁的 IP POST /v2/ips/block # 封禁 IP POST /v2/ips/unblock # 解封 IP

🏗️ 项目结构

claude-api/ ├── main.go # 程序入口,HTTP 服务器启动 ├── build.sh # 多平台构建脚本 ├── config.yaml # 配置文件(可选) ├── internal/ # 内部包 │ ├── api/ # API 服务器 │ │ ├── server.go # 服务器核心、中间件、缓存 │ │ ├── routes.go # 路由配置 │ │ ├── handlers.go # 请求处理器(主要逻辑) │ │ └── cache.go # 账号池、设置缓存 │ ├── amazonq/ # Amazon Q 客户端 │ │ ├── client.go # HTTP 客户端 │ │ ├── parser.go # 响应解析 │ │ └── errors.go # 错误处理 │ ├── auth/ # 认证模块 │ │ ├── oidc.go # OIDC 设备授权流程 │ │ ├── kiro.go # Kiro 社交登录 │ │ └── apikey.go # API Key 验证 │ ├── claude/ # 格式转换 │ │ └── converter.go # OpenAI ↔ Amazon Q 格式转换 │ ├── stream/ # 流处理 │ │ ├── parser.go # SSE 流解析 │ │ ├── openai_sse.go # OpenAI 格式流 │ │ ├── claude_sse.go # Claude 格式流 │ │ └── unified_sse.go # 统一流处理 │ ├── database/ # 数据库 │ │ ├── database.go # 数据库初始化 │ │ ├── accounts.go # 账号管理 │ │ ├── users.go # 用户管理 │ │ ├── settings.go # 系统设置 │ │ ├── logs.go # 请求日志 │ │ ├── proxy.go # 代理管理 │ │ └── blocked_ips.go # IP 黑名单 │ ├── models/ # 数据模型 │ │ ├── account.go # 账号模型 │ │ ├── user.go # 用户模型 │ │ ├── settings.go # 设置模型 │ │ ├── openai.go # OpenAI 格式 │ │ ├── claude.go # Claude 格式 │ │ └── amazonq.go # Amazon Q 格式 │ ├── config/ # 配置管理 │ ├── logger/ # 日志系统 │ ├── tokenizer/ # Token 计数 │ ├── compressor/ # 上下文压缩器 │ ├── proxy/ # 代理池管理 │ ├── ratelimit/ # 双重限流器(IP + API Key) │ └── utils/ # 工具函数 ├── frontend/ # Web 前端 │ ├── index.html # 主页面 │ ├── login.html # 登录页面 │ ├── js/ # JavaScript 模块 │ │ ├── app.js # 主应用入口 │ │ ├── accounts.js # 账号管理 │ │ ├── users.js # 用户管理 │ │ ├── settings.js # 系统设置 │ │ ├── chat.js # 聊天界面 │ │ ├── logs.js # 请求日志 │ │ ├── ips.js # IP 管理 │ │ └── api.js # API 封装 │ ├── css/ # 样式文件 │ └── vendor/ # 第三方库(Vue.js、Marked 等) ├── scripts/ # 辅助脚本 │ ├── start.sh # 启动脚本 │ ├── stop.sh # 停止脚本 │ └── setup.sh # 环境配置 └── dist/ # 编译产物(自动生成) └── server/ # 各平台服务端程序 

🏗️ 技术架构

技术栈

  • 后端: Go 1.24+, Gin
  • 数据库: SQLite (glebarez/sqlite - 纯 Go,无需 CGO) / MySQL
  • 前端: Vue.js 3
  • Token 计数: anthropic-tokenizer-go

项目结构

claude-api/ ├── main.go # 程序入口 ├── build.sh # 构建脚本 ├── config.yaml # 配置文件 ├── internal/ # 内部包 │ ├── api/ # API 服务器 │ │ ├── server.go # 服务器核心 │ │ ├── routes.go # 路由配置 │ │ └── handlers.go # 请求处理器 │ ├── amazonq/ # Amazon Q 客户端 │ ├── auth/ # 认证模块 │ ├── claude/ # 格式转换 │ ├── stream/ # 流处理 │ ├── database/ # 数据库 │ ├── models/ # 数据模型 │ ├── config/ # 配置管理 │ ├── logger/ # 日志系统 │ ├── tokenizer/ # Token 计数 │ └── sync/ # 同步客户端 ├── frontend/ # Web 前端 │ ├── index.html │ ├── js/ │ └── css/ │ ├── server.py │ └── requirements.txt └── dist/ # 编译产物 

数据流

客户端 → Gin Router → 认证中间件 → 账号选择器 → 格式转换器 → Amazon Q API ↓ 客户端 ← OpenAI 格式 ← 流解析器 ← SSE 流 ← Amazon Q 响应 

🐛 故障排查

常见问题

1. 令牌刷新失败

错误: failed to refresh token 解决: 检查 refreshToken 是否有效,尝试重新授权 

2. 连接超时

错误: context deadline exceeded 解决: 检查网络连接,考虑配置 HTTP_PROXY 

3. 数据库锁定

错误: database is locked 解决: 确保没有其他进程使用数据库,或重启服务器 

健康检查

curl http://localhost:62311/healthz # 预期响应: {"status":"ok"}

日志位置

  • 控制台日志: 直接输出到终端
  • 请求日志: 存储在数据库 request_logs
  • 调试日志: 启用调试模式后在控制台输出

🔒 安全建议

  1. 修改默认密码: 首次启动后立即修改管理员密码
  2. 使用 HTTPS: 生产环境使用 Nginx 反向代理并配置 SSL
  3. 限制访问: 使用防火墙限制管理控制台访问
  4. 定期备份: 定期备份 data.sqlite3 数据库
  5. 监控日志: 定期查看请求日志,发现异常及时处理

⚠️ 免责声明: 本项目仅供学习和研究使用,请遵守 AWS 服务条款和相关法律法规 本作者只是搬运 有任何问题和本人无关。

Read more

掌控消息全链路(3)——RabbitMQ/Spring-AMQP高级特性详解之TTL、死信和延迟

掌控消息全链路(3)——RabbitMQ/Spring-AMQP高级特性详解之TTL、死信和延迟

🔥我的主页:九转苍翎⭐️个人专栏:《Java SE 》《Java集合框架系统精讲》《MySQL高手之路:从基础到高阶 》《计算机网络 》《Java工程师核心能力体系构建》天行健,君子以自强不息。 Java JDK版本:Oracle OpenJDK 17.0.9 SpringBoot版本:3.5.9 * Spring Web * Lombok * Spring for RabbitMQ RabbitMQ version:3.12.1 RabbitMQ实现延迟队列的插件:rabbitmq_delayed_message_exchange-3.12.0(已免费上传至我的资源) 1.TTL TTL(Time-To-Live)是RabbitMQ中控制消息或队列生命周期的机制,用于在指定时间后自动删除消息或队列,避免资源堆积消息TTL:为单条消息设置过期时间队列TTL:

By Ne0inhk
《MySQL 事务深度解析:从 ACID 到实战,守住数据一致性的最后防线》

《MySQL 事务深度解析:从 ACID 到实战,守住数据一致性的最后防线》

前引:数据是业务的核心,而事务是数据可靠性的 “守护神”。在 MySQL 中,事务看似简单的 “提交 / 回滚” 操作,背后藏着 ACID 特性的严格约束、隔离级别的底层实现,以及并发场景下的锁竞争逻辑。很多开发者因为一知半解,导致系统出现脏读、幻读、数据丢失等严重问题。今天,我们就来层层拆解 MySQL 事务,让你从 “会用” 到 “精通”,真正守住数据一致性的底线! 目录 【一】事务介绍 【二】为什么要有事务 【三】事务的版本支持 【四】事务提交的两种方式 【五】事务的几种操作 (1)开始一个事务 (2)创建一个保存点 (3)回滚到指定保存点 (4)正常结束一个事务 (5)异常结束一个事务

By Ne0inhk
Flutter 组件 okay 的适配 鸿蒙Harmony 深度进阶 - 驾驭异步结果链式融合、实现鸿蒙端分布式业务逻辑解耦与精密审计方案

Flutter 组件 okay 的适配 鸿蒙Harmony 深度进阶 - 驾驭异步结果链式融合、实现鸿蒙端分布式业务逻辑解耦与精密审计方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 okay 的适配 鸿蒙Harmony 深度进阶 - 驾驭异步结果链式融合、实现鸿蒙端分布式业务逻辑解耦与精密审计方案 前言 在前文中,我们探讨了 okay 在鸿蒙(OpenHarmony)端实现基础 Result 模式包装的实战。但在真正的“分布式微服务聚合”、“高并发资产对账”以及“具备自愈能力的 IoT 指令链”场景中。简单的 ok() 与 err() 判定往往不足以支撑起复杂的业务全景。面对需要同时并行发起 3 个 API 请求,并要求在“所有请求均成功时执行合并、任一请求失败时执行局部逻辑路由”的高阶需求。如果缺乏一套完善的异步结果映射与多级逻辑聚合机制。不仅会导致异步回调地狱(Callback Hell)在

By Ne0inhk
Spring Boot 数据访问与数据库集成

Spring Boot 数据访问与数据库集成

Spring Boot 数据访问与数据库集成 18.1 学习目标与重点提示 学习目标:掌握Spring Boot数据访问与数据库集成的核心概念与使用方法,包括Spring Boot数据访问的基本方法、Spring Boot与MySQL的集成、Spring Boot与H2的集成、Spring Boot与MyBatis的集成、Spring Boot与JPA的集成、Spring Boot的事务管理、Spring Boot的实际应用场景,学会在实际开发中处理数据库访问问题。 重点:Spring Boot数据访问的基本方法、Spring Boot与MySQL的集成、Spring Boot与H2的集成、Spring Boot与MyBatis的集成、Spring Boot与JPA的集成、Spring Boot的事务管理、Spring Boot的实际应用场景。 18.2 Spring Boot数据访问概述 Spring Boot数据访问是指使用Spring Boot进行数据库操作的方法。 18.2.1 数据访问的定义

By Ne0inhk