Token导航 LogoToken导航TokenDH.com
NHI Scan MCP logo
运维云端stdio官方级别未说明来源级核验

NHI Scan MCP

MCP Server

一款用于扫描AWS IAM身份并识别非人类身份(如服务账户、自动化用户和机器身份)的工具,提供身份分类、权限分析和安全风险评估功能。

工具数

5

提示词数

0

GitHub Stars

1

资源数

0
PythonClaude云端部署Claude DesktopClaudeCursor

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

sdahal51

提供方

sdahal51

最后核验

2026/5/17 20:21

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install -r requirements.txt

详细介绍

NHI扫描MCP

MCP服务器,用于扫描AWS IAM身份并识别非人类身份(NHI),如服务帐户、自动化用户和机器身份。

概述

此工具扫描AWS IAM用户和角色,以区分人类用户和非人类身份。它分析命名模式、身份验证方法、访问密钥、MFA配置和IAM标签,以使用置信度对身份进行分类。可选地包括详细的权限分析,以评估访问级别并识别潜在的危险权限。

特性

  • 扫描AWS帐户中的所有IAM用户和角色
  • 通过置信度评分将身份分为人类或非人类
  • 按类型(服务角色、机器用户、Lambda执行角色等)对NHI进行分类
  • 可选权限分析和访问级别评估
  • 识别危险的权限和潜在的安全风险

安装

需求

  • Python 3.10或更高版本
  • 具有IAM读取权限的AWS凭据

设置

克隆存储库并安装依赖项:

git clone https://github.com/yourusername/NHI-scan-mcp.git
cd NHI-scan-mcp
pip install -r requirements.txt

开发模式:

pip install -e .

使用Claude桌面和光标

Claude桌面配置

将NHI Scan MCP服务器添加到您的Claude Desktop配置文件中:

MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json

窗户: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "nhi-scan": {
      "command": "python",
      "args": ["-m", "nhi_scan_mcp"],
      "cwd": "/absolute/path/to/NHI-scan-mcp",
      "env": {
        "AWS_ACCESS_KEY_ID": "your-key-id",
        "AWS_SECRET_ACCESS_KEY": "your-secret-key",
        "AWS_DEFAULT_REGION": "us-east-1"
      }
    }
  }
}

配置后,重新启动Claude Desktop。当您询问有关AWS IAM安全性的问题时,Claude将自动使用NHI扫描工具。

光标配置

将MCP服务器添加到游标配置中:

  1. 打开光标设置
  2. 引导到 特性→ MCP
  3. 添加具有以下配置的新MCP服务器:
{
  "mcpServers": {
    "nhi-scan": {
      "command": "python",
      "args": ["-m", "nhi_scan_mcp"],
      "cwd": "/absolute/path/to/NHI-scan-mcp",
      "env": {
        "AWS_ACCESS_KEY_ID": "your-key-id",
        "AWS_SECRET_ACCESS_KEY": "your-secret-key",
        "AWS_DEFAULT_REGION": "us-east-1"
      }
    }
  }
}

或创建/编辑 .cursor/mcp_settings.json 在项目根目录中:

{
  "mcpServers": {
    "nhi-scan": {
      "command": "python",
      "args": ["-m", "nhi_scan_mcp"],
      "cwd": "/absolute/path/to/NHI-scan-mcp"
    }
  }
}

配置后,重新启动Cursor。现在,您可以要求AI助手扫描您的AWS IAM以查找NHI。

示例提示

配置后,您可以询问Claude或Cursor:

  • “扫描我的AWS IAM并向我显示所有非人类身份”
  • “以高置信度列出我的AWS帐户中的所有服务帐户”
  • “分析我当前AWS凭据的权限”
  • “向我展示具有安全建议的人类用户与非人类身份”
  • “获取名为'jenkins automation'的IAM用户的详细信息”

手动使用

启动服务器

python -m nhi_scan_mcp

或者:

python src/nhi_scan_mcp/server.py

MCP工具

服务器提供了五个用于IAM扫描和分析的工具:

scan_iam_identities

主扫描工具,列出所有IAM身份,对NHI进行分类,并可选择分析权限。

参数:

  • aws_access_key_id (字符串,可选)-AWS访问密钥ID
  • aws_secret_access_key (字符串,可选)-AWS秘密访问密钥
  • aws_session_token (字符串,可选)-临时凭据的会话令牌
  • region (字符串,可选)-AWS区域,默认为us-east-1
  • include_permissions (布尔值,可选)-包括权限分析,默认为false

例子:

{
  "aws_access_key_id": "AKIA...",
  "aws_secret_access_key": "...",
  "region": "us-west-2",
  "include_permissions": true
}

退货: 完整的扫描结果,包括所有身份、NHI分类、置信度评分和可选的权限分析。

list_nhi_identities

仅返回经过置信阈值过滤的非人类身份。

参数:

  • aws_access_key_id (字符串,可选)
  • aws_secret_access_key (字符串,可选)
  • aws_session_token (字符串,可选)
  • region (字符串,可选)
  • min_confidence (浮动,可选)-最小置信阈值(0.0-1.0),默认为0.5

退货: 符合置信阈值的NHI过滤列表,包含分类详细信息。

analyze_caller_permissions

分析用于运行扫描的AWS凭据的权限。

参数:

  • aws_access_key_id (字符串,可选)
  • aws_secret_access_key (字符串,可选)
  • aws_session_token (字符串,可选)
  • region (字符串,可选)

退货: 呼叫者的权限分析,包括访问级别和危险权限。

get_identity_details

检索特定IAM用户或角色的详细信息。

参数:

  • identity_name (字符串,必填)-IAM用户或角色的名称
  • identity_type (string,可选)-“user”或“role”,默认为user
  • aws_access_key_id (字符串,可选)
  • aws_secret_access_key (字符串,可选)
  • aws_session_token (字符串,可选)
  • region (字符串,可选)

退货: 完整的身份信息,包括NHI分类和权限分析。

distinguish_users_vs_nhi

提供将人类用户与非人类身份区分开来的细分,并提供统计数据和建议。

参数:

  • aws_access_key_id (字符串,可选)
  • aws_secret_access_key (字符串,可选)
  • aws_session_token (字符串,可选)
  • region (字符串,可选)

退货: 汇总统计数据、按类别列出的用户列表和安全建议。

AWS凭据

凭据可以按以下优先级顺序提供:

  1. 显式参数(aws_access_key_id, aws_secret_access_key)
  2. 环境变量(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
  3. AWS凭据文件(~/.aws/credentials)
  4. IAM角色(在EC2/ECS上运行时)

所需IAM权限

AWS凭据必须具有以下权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListUsers",
        "iam:ListRoles",
        "iam:ListUserTags",
        "iam:ListRoleTags",
        "iam:ListAccessKeys",
        "iam:ListMFADevices",
        "iam:GetUser",
        "iam:GetRole",
        "iam:ListAttachedUserPolicies",
        "iam:ListAttachedRolePolicies",
        "iam:ListUserPolicies",
        "iam:ListRolePolicies",
        "iam:GetPolicy",
        "iam:GetPolicyVersion",
        "iam:GetUserPolicy",
        "iam:GetRolePolicy",
        "iam:ListGroupsForUser",
        "sts:GetCallerIdentity"
      ],
      "Resource": "*"
    }
  ]
}

NHI识别方法

IAM用户

该工具评估多个信号以确定用户是否非人类:

  • 名称模式 -匹配常见前缀,如 svc-, app-, bot-, api-, lambda-, ci-, cd-, terraform-, ansible-等等。
  • 密码使用 -没有密码登录历史记录的用户
  • 访问密钥 -存在活动的编程访问密钥
  • MFA状态 -缺少MFA设备(预期供人类用户使用)
  • 标签 -标记服务帐户、机器人或自动化的显式标签

每个信号对0.0到1.0的置信度得分都有贡献。置信度≥0.5的用户被归类为NHI。

IAM角色

所有角色本质上都是非人类的,但通过分析其承担角色策略,可以进一步分类:

  • 服务角色 -受AWS服务(Lambda、EC2、ECS等)信任
  • Lambda执行角色 -专门用于Lambda函数
  • EC2实例配置文件 -对于EC2实例
  • 跨帐户角色 -与其他AWS帐户的信任关系
  • 联合角色 -SAML或OIDC联盟
  • 应用程序角色 -一般应用程序服务角色

Python库用法

您也可以直接在自己的Python脚本中使用这些模块:

基本扫描示例

from nhi_scan_mcp.aws_scanner import AWSIAMScanner
from nhi_scan_mcp.nhi_identifier import NHIIdentifier

# Initialize scanner (uses default AWS credential chain)
scanner = AWSIAMScanner()

# Or with explicit credentials:
# scanner = AWSIAMScanner(
#     aws_access_key_id="YOUR_KEY",
#     aws_secret_access_key="YOUR_SECRET",
#     region_name="us-east-1"
# )

# Get caller identity
caller = scanner.get_caller_identity()
print(f"Account: {caller['Account']}")

# List all IAM users and roles
users = scanner.list_users()
roles = scanner.list_roles()
print(f"Found {len(users)} users and {len(roles)} roles")

# Identify NHIs
identifier = NHIIdentifier()
identifications = identifier.identify_all(users, roles)

# Display results
for identification in identifications:
    if identification.is_nhi and identification.identity.identity_type == "user":
        print(f"🤖 {identification.identity.name}")
        print(f"   Category: {identification.nhi_category}")
        print(f"   Confidence: {identification.confidence:.2f}")

权限分析示例

from nhi_scan_mcp.aws_scanner import AWSIAMScanner
from nhi_scan_mcp.permission_analyzer import PermissionAnalyzer

# Initialize scanner and analyzer
scanner = AWSIAMScanner()
analyzer = PermissionAnalyzer(scanner)

# Analyze your own permissions
caller_analysis = analyzer.analyze_caller_permissions()
print(f"Permission Level: {caller_analysis.permission_level}")
print(f"Admin Access: {caller_analysis.admin_access}")

if caller_analysis.dangerous_permissions:
    print("⚠️  Dangerous Permissions:")
    for perm in caller_analysis.dangerous_permissions:
        print(f"   - {perm}")

# Analyze specific user permissions
users = scanner.list_users()
for user in users:
    analysis = analyzer.analyze_user_permissions(user)
    print(f"{user.name}: {analysis.permission_level}")

区分人类与NHI示例

from nhi_scan_mcp.aws_scanner import AWSIAMScanner
from nhi_scan_mcp.nhi_identifier import NHIIdentifier

scanner = AWSIAMScanner()
identifier = NHIIdentifier()

# Scan and identify
users = scanner.list_users()
roles = scanner.list_roles()
identifications = identifier.identify_all(users, roles)

# Separate human users from NHIs
human_users = []
nhi_users = []
uncertain_users = []

for identification in identifications:
    if identification.identity.identity_type != "user":
        continue
    
    if identification.nhi_category.value == "human_user":
        human_users.append(identification)
    elif identification.nhi_category.value == "uncertain":
        uncertain_users.append(identification)
    else:
        nhi_users.append(identification)

print(f"Human Users: {len(human_users)}")
print(f"NHI Users: {len(nhi_users)}")
print(f"Uncertain Users: {len(uncertain_users)}")

# Generate security recommendations
no_mfa_humans = [i for i in human_users if not i.identity.mfa_devices]
if no_mfa_humans:
    print(f"\n⚠️  {len(no_mfa_humans)} human users lack MFA!")
    for i in no_mfa_humans:
        print(f"   - {i.identity.name}")

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

致谢

目录标签

目录标签

PythonClaude云端部署AWS安全本地部署IAM管理身份识别权限分析自动化工具

支持客户端

Claude DesktopClaudeCursor

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

5

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP