阿里云安全组管理 MCP Server
功能特性
- ✅ 多账号支持:管理多个阿里云账号
- ✅ 权限控制:支持配置账号可访问的安全组ID列表,适用于权限受限的账号
- ✅ 安全组列表:查询指定账号的安全组列表,支持分页和VPC筛选
- ✅ 规则详情:查看安全组的入方向和出方向规则
- ✅ 创建安全组:在指定VPC中创建新的安全组
- ✅ 删除安全组:删除不再需要的安全组
- ✅ 规则管理:添加和删除安全组规则
- ✅ 权限验证:自动验证账号对安全组的访问权限
安装
前置要求
- Bun >= 1.0(推荐)或 Node.js >= 20
- 阿里云账号及 AccessKey(需要ECS权限)
克隆项目
git clone https://github.com/jaggerzhuang1994/aliyun-sg-mgr.git
cd aliyun-sg-mgr安装依赖
使用 Bun(推荐):
bun install或使用 npm:
npm install配置环境变量
复制示例配置文件并编辑:
cp .env.example .env在 .env 文件中配置你的阿里云账号信息:
PROJECTS='[
{
"name": "production",
"accessKeyId": "YOUR_ACCESS_KEY_ID",
"accessKeySecret": "YOUR_ACCESS_KEY_SECRET",
"regionId": "cn-hongkong"
},
{
"name": "development",
"accessKeyId": "YOUR_ACCESS_KEY_ID",
"accessKeySecret": "YOUR_ACCESS_KEY_SECRET",
"regionId": "cn-shanghai",
"specSecurityGroupIds": ["sg-xxxxx1", "sg-xxxxx2"]
}
]'配置说明:
name: 账号名称,用于标识不同的账号accessKeyId: 阿里云 AccessKey IDaccessKeySecret: 阿里云 AccessKey SecretregionId: 默认地域ID(可选,默认为 cn-hangzhou)specSecurityGroupIds: 指定可访问的安全组ID列表(可选,不配置则可访问所有安全组)
重要说明:
对于权限受限的账号(无法列出所有安全组),必须配置 specSecurityGroupIds 字段来指定该账号可以访问的安全组 ID 列表。配置后:
list_security_groups工具将只返回指定的安全组- 其他安全组操作(查看规则、删除、添加/删除规则)只能操作指定的安全组
- 尝试访问未授权的安全组将返回权限错误
配置 MCP 客户端
在 Claude Desktop 或其他 MCP 客户端的配置文件中添加:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
使用 Bun(推荐,原生支持 TypeScript):
{
"mcpServers": {
"aliyun-sg-mgr": {
"command": "bun",
"args": ["/path/to/aliyun-sg-mgr/src/index.ts"],
"cwd": "/path/to/aliyun-sg-mgr"
}
}
}或使用 Node.js + tsx:
# 首先安装 tsx
npm install -g tsx{
"mcpServers": {
"aliyun-sg-mgr": {
"command": "tsx",
"args": ["/path/to/aliyun-sg-mgr/src/index.ts"],
"cwd": "/path/to/aliyun-sg-mgr"
}
}
}也可以直接在配置中设置环境变量(不推荐,建议使用 .env 文件):
{
"mcpServers": {
"aliyun-sg-mgr": {
"command": "bun",
"args": ["/path/to/aliyun-sg-mgr/src/index.ts"],
"env": {
"PROJECTS": "[{\"name\":\"production\",\"accessKeyId\":\"YOUR_KEY\",\"accessKeySecret\":\"YOUR_SECRET\",\"regionId\":\"cn-hangzhou\"}]"
}
}
}
}使用方法
开发模式
使用 Bun:
bun run dev或使用 npm:
npm run dev生产运行
使用 Bun:
bun start或使用 npm:
npm start可用工具
1. list_accounts
列出所有配置的阿里云账号
参数: 无
示例:
请列出所有配置的阿里云账号2. list_security_groups
查看指定账号的安全组列表
参数:
accountName(必填): 账号名称regionId(可选): 地域IDvpcId(可选): VPC IDpageNumber(可选): 分页页码,默认1pageSize(可选): 每页数量,默认10,最大100
示例:
查看 production 账号的安全组列表
查看 development 账号在 cn-shanghai 地域的安全组3. describe_security_group_rules
查看指定安全组的详细规则策略
参数:
accountName(必填): 账号名称securityGroupId(必填): 安全组IDregionId(可选): 地域IDdirection(可选): 规则方向,可选值:ingress(入方向)、egress(出方向)、all(全部),默认all
示例:
查看 sg-xxxxx 安全组的所有规则
查看 sg-xxxxx 安全组的入方向规则4. create_security_group
创建新的安全组
参数:
accountName(必填): 账号名称securityGroupName(必填): 安全组名称vpcId(必填): VPC IDdescription(可选): 安全组描述regionId(可选): 地域IDsecurityGroupType(可选): 安全组类型,normal或enterprise,默认normal
示例:
在 production 账号的 vpc-xxxxx 中创建一个名为 web-server 的安全组5. delete_security_group
删除指定的安全组
参数:
accountName(必填): 账号名称securityGroupId(必填): 安全组IDregionId(可选): 地域ID
示例:
删除 production 账号的 sg-xxxxx 安全组6. authorize_security_group
添加安全组入方向规则
参数:
accountName(必填): 账号名称securityGroupId(必填): 安全组IDipProtocol(必填): IP协议类型,可选:tcp、udp、icmp、gre、allportRange(必填): 端口范围,例如:22/22、80/80、1/65535sourceCidrIp(可选): 源CIDR IP,例如:0.0.0.0/0sourceGroupId(可选): 源安全组IDregionId(可选): 地域IDpolicy(可选): 授权策略,accept或drop,默认acceptpriority(可选): 规则优先级,1-100,默认1description(可选): 规则描述
示例:
为 sg-xxxxx 添加允许 SSH 访问的规则(端口22,来源0.0.0.0/0)
为 sg-xxxxx 添加允许 HTTP 访问的规则(端口80)7. revoke_security_group
删除安全组入方向规则
参数:
accountName(必填): 账号名称securityGroupId(必填): 安全组IDipProtocol(必填): IP协议类型portRange(必填): 端口范围sourceCidrIp(可选): 源CIDR IPsourceGroupId(可选): 源安全组IDregionId(可选): 地域IDpolicy(可选): 授权策略priority(可选): 规则优先级
示例:
删除 sg-xxxxx 的 SSH 访问规则安全建议
- AccessKey 管理:
- 不要将 .env 文件提交到版本控制系统 - 使用具有最小权限的 RAM 用户 - 定期轮换 AccessKey
- 权限要求:
服务器需要以下阿里云 ECS 权限: - ecs:DescribeSecurityGroups - ecs:DescribeSecurityGroupAttribute - ecs:CreateSecurityGroup - ecs:DeleteSecurityGroup - ecs:AuthorizeSecurityGroup - ecs:RevokeSecurityGroup
- 网络安全:
- 创建安全组规则时,避免使用 0.0.0.0/0 作为源地址 - 遵循最小权限原则,只开放必要的端口
项目结构
aliyun-sg-mgr/
├── src/
│ └── index.ts # 主程序文件 (TypeScript)
├── package.json # 项目配置
├── tsconfig.json # TypeScript 配置
├── bun.lockb # Bun 锁文件
├── .env.example # 环境变量示例
├── .env # 环境变量配置(不提交到git)
├── .gitignore # Git 忽略文件
├── LICENSE # 许可证
└── README.md # 项目文档技术栈
- TypeScript - 类型安全的 JavaScript 超集
- Bun - 高性能 JavaScript/TypeScript 运行时(推荐,原生支持 TS)
- + tsx - JavaScript/TypeScript 运行时(兼容)
- fastmcp - MCP 服务器框架
- @alicloud/ecs20140526 - 阿里云 ECS SDK
- zod - 类型校验与验证库
- dotenv - 环境变量管理
故障排查
常见问题
Q: 提示 "PROJECTS 环境变量未配置"
A: 确保 .env 文件存在且配置正确,或在 MCP 客户端配置中正确设置了环境变量。
Q: API 调用失败,提示权限不足
A: 检查 AccessKey 对应的 RAM 用户是否具有 ECS 相关权限。
Q: 无法连接到阿里云 API
A: 检查网络连接,确认 regionId 配置正确,endpoint 格式为 ecs.{regionId}.aliyuncs.com。
贡献
欢迎提交 Issue 和 Pull Request!
许可证
ISC License
