dAMCP WShund服务器
这个包裹包裹着 dAWShund项目 在两个不同的服务器中 因此,您可以枚举AWS IAM数据,评估有效权限和 获得高层次的总结,而不必记住一些 单独的脚本。上游项目将自己描述为一种 “对淘气权限进行约束”并提供了三个主要内容 组件:
- sAWSage –列举IAM主体和资源策略,以及
将它们合并到一个JSON文档中。支持的资源 包括IAM组、角色和用户以及基于资源的子集 AWS备份、EFS、KMS、Lambda、S3、SNS和SQS等策略。这 合并文件(sawsage.json)生产于 policies/ 在运行脚本后。
- Gerakina –将整合的策略输入AWS
simulate-principal-policy API并生成一个新的JSON文件, effective_permissions.json列出允许的动作, 对每个委托人明确否认或隐含否认。这 步骤可能需要一些时间,因为它为每个 主体、作用和资源的独特组合。
- dAWShund –将有效权限导入Neo4j
数据库,并构建主体和资源图。它 生成 permissions4j.json 和 dawshund.json 适用于 分别在Neo4j和BloodHound中浏览。使用Neo4j 功能是可选的;这里包含的HTTP服务器提供 取而代之的是轻量级摘要。
需求
dAWShund依赖于Python、AWS CLI和少数Python 包装。如果你想使用Neo4j可视化,那么 还需要运行Neo4j实例。您至少需要:
- Python 3.x
- 具有调用IAM API权限的AWS帐户(用于枚举)
和那个 simulate-principal-policy API(用于评估)。你 应使用配置您的AWS凭据 aws configure --profile .
- AWS CLI已安装并可在您的路径上使用。
- 可选: 如果你打算使用Neo4j服务器
dawshund.py
直接使用脚本(HTTP服务器在没有Neo4j的情况下总结结果)。
这 setup.sh 此目录中的脚本将安装Python 依赖关系(使用 pip)并克隆上游dAWShund存储库。 如果你更喜欢手动管理依赖关系,你可以看到 setup.sh 对于确切的命令。
安装
- 安装AWS CLI并为帐户配置命名配置文件
您希望进行评估。例如:
# install the AWS CLI via your package manager or from https://aws.amazon.com/cli/
aws configure --profile myprofile- 克隆此存储库(或复制
mcp_dawshund_server文件夹)
并运行安装脚本:
cd mcp_dawshund_server
./setup.sh该脚本安装Python依赖项(boto3, neo4j, flask, flask_cors)并将dAWShund代码克隆到本地 子目录。如果你想使用Python虚拟环境 可以在运行前创建并激活一个 setup.sh.
- 启动服务器:
python3 server.py默认情况下,HTTP服务监听所有接口上的端口8000。 您可以通过设置来更改端口 PORT 环境变量 在启动服务器之前,例如:
PORT=5000 python3 server.py如果您打算使用MCP实现而不是HTTP API, 您可以使用以下命令运行它:
python3 iam_mcp_server.pyMCP服务器未绑定到TCP端口;它通过以下方式进行通信 标准输入/输出,通常由客户端启动,例如 Claude桌面版。看 使用MCP服务器 详见下文。
使用HTTP服务器
基于Flask的服务器(server.py)通过HTTP公开三个端点。 所有请求和响应都使用JSON。以下示例使用 curl 但任何HTTP客户端都可以工作。
1–枚举IAM策略(/collect)
通过以下方式触发IAM主体和资源策略的枚举 sAWSage。提供您的AWS CLI配置文件名称,并可选择提供以下数组 区域。如果没有提供区域,sAWSage将枚举所有已知的区域 支持服务的地区。
curl -X POST http://localhost:8000/collect \
-H 'Content-Type: application/json' \
-d '{"profile": "myprofile", "regions": ["us-west-2", "us-east-1"]}'响应是一个由AWS ARN键入的大型JSON文档 包括元数据(友好名称、附加策略)和原始数据 从内联和托管策略中提取的语句。同一个文件 保存到 dAWShund/policies/sawsage.json 供以后使用。
2–评估有效权限(/evaluate)
使用AWS模拟附加到每个主体的权限 simulate-principal-policy API此端点只需要您的 配置文件名称:
curl -X POST http://localhost:8000/evaluate \
-H 'Content-Type: application/json' \
-d '{"profile": "myprofile"}'响应包含以下内容 effective_permissions.json –由ARN校长键入的词典。 在每个条目中 Permissions 键包含名为的列表 allowed, explicitDeny 和 implicitDeny 列出(动作, 资源)元组。
3–总结评估结果(/analyze)
检索评估的简明摘要。此端点读取 effective_permissions.json 并计算允许多少动作, 明确否认和隐含否认每个委托人。不 请求正文是必需的:
curl -X POST http://localhost:8000/analyze -H 'Content-Type: application/json' -d '{}'响应如下(示例):
{
"arn:aws:iam::123456789012:user/Alice": {
"allowed": 42,
"explicitDeny": 0,
"implicitDeny": 5
},
"arn:aws:iam::123456789012:role/AdminRole": {
"allowed": 128,
"explicitDeny": 0,
"implicitDeny": 0
}
}此摘要可以帮助您快速识别特权主体或 那些出人意料地含蓄否认的人。为了进行更深入的分析,您可以 连接到Neo4j数据库并运行原始数据库 dawshund.py 脚本,它将构建一个图形并创建 permissions4j.json 和 dawshund.json.
使用MCP服务器
除了Flask HTTP API之外,此软件包还包括 模型 上下文协议(MCP)服务器 实施与 fastmcp 图书馆。MCP服务器通过JSON-RPC进行通信,旨在 由Claude Desktop等人工智能助手或自定义FastMCP客户端使用 MCP服务器公开的操作与 HTTP API,但使用结构化工具定义而不是HTTP 端点。
1–安装FastMCP
提供的 setup.sh 脚本安装 fastmcp 为您打包。 如果您手动管理依赖关系,请使用以下命令安装:
pip install fastmcpFastMCP需要Python 3.10或更高版本。
2–手动运行服务器
要在本地测试MCP服务器,请运行:
python3 iam_mcp_server.py这将以STDIO模式启动服务器。它会屏蔽并监听 标准输入上的JSON-RPC请求。您还可以运行服务器 如果您计划将其作为远程连接器公开,请使用HTTP:
fastmcp run iam_mcp_server.py:mcp --transport http --port 80003–可用工具
MCP服务器公开了三个工具。每个工具返回JSON结构化 内容,并附有简要总结:
| 工具名称 | 描述 | 输入参数 |
|---|---|---|
collect_iam | 使用sAWSage枚举IAM主体和资源策略 | profile (字符串,必填), regions (字符串数组,可选) |
evaluate_iam | 使用Gerakina模拟有效权限 | profile (字符串,必填) |
analyze_iam | 允许汇总,每个主体明确和隐含拒绝 | 无 |
这 收集 和 评估 工具返回一条短信 各自JSON输出文件的路径(完整文档可以 数百千字节)。这 分析 工具读取有效 权限文件,并返回由主体ARN键入的字典 允许和拒绝的操作计数。
4–与Claude Desktop集成
Claude Desktop可以启动在 claude_desktop_config.json 文件。在macOS上,此文件位于 ~/Library/Application Support/Claude/claude_desktop_config.json .在下面添加新条目 mcpServers 按键:
{
"mcpServers": {
"iam-analysis": {
"command": "/usr/bin/python3",
"args": [
"/ABSOLUTE/PATH/TO/iam_mcp_server.py"
]
}
}
}将路径替换为系统上的正确位置。之后 保存文件 重新启动克劳德桌面;读取配置 只有在启动时。当您的自然语言提示 需要IAM枚举或权限模拟,Claude将调用 合适的工具。例如,你可以说:
“枚举我的默认配置文件的IAM策略,并总结有多少个 允许或拒绝操作。”
克劳德将发布 collect_iam 呼叫,然后 evaluate_iam 和 最终 analyze_iam。将返回每个工具的结果 回到克劳德身边,并融入了助理的最后回应中。
或者,您可以将MCP服务器公开为 远程连接器 通过HTTP运行它并在Claude的网站上注册URL 界面。例如,通过以下方式启动服务器
fastmcp run iam_mcp_server.py:mcp --transport http --port 8000然后添加 http://localhost:8000/mcp 作为中的自定义连接器 克劳德的设置。
注释和注意事项
- 所需权限: 枚举步骤使用IAM API,例如
作为 list_users, list_roles 和 get_user_policyThe 评估步骤调用 simulate-principal-policy,反过来 根据资源评估行动。确保您的AWS配置文件 use有足够的权限执行这些操作。
- 运行时间和成本: 模拟策略可能很耗时
因为它对每个主体/操作/资源进行一次API调用 组合。对于具有许多主体和政策的账户 可能需要几分钟。没有额外的AWS费用 模拟API本身,但枚举查询受 API正常速率限制。
- Neo4j集成: 默认情况下
dawshund.py连接到a
Neo4j实例正在运行 localhost:7687 使用用户名 neo4j 和密码 dawshund.如果你想填充自己的Neo4j 数据库,编辑 NEO4J_URI 和 NEO4J_AUTH 值在 dAWShund/dawshund.py 在运行它之前。HTTP服务器 这里提供的根本不使用Neo4j;相反,它总结了 JSON输出。
- 可扩展性: 上游项目目前列举
有限服务集的资源策略。如果你 需要额外服务的保险,考虑提供 服务枚举器到上游存储库。
许可证
此软件包捆绑了dAWShund脚本,这些脚本在 BSD 3条款许可证。请参阅上游存储库 细节。此文件夹中的包装器代码(服务器和安装程序 脚本)被发布到公共领域。无论你如何使用它们 就像。
