mcpField
P
performing-cloud-asset-inventory-with-cartography

performing-cloud-asset-inventory-with-cartography

github.com/mukul975安全35.2k61 次安装8 周前更新
代码仓库

关于 performing-cloud-asset-inventory-with-cartography

该技能介绍使用 Cartography 从 AWS、GCP 和 Azure 收集云资产,并将资源及关系汇总到 Neo4j 图数据库,供安全团队进行资产盘点、审计和攻击路径分析。

主要功能

  1. 01汇总云资源及其关系
  2. 02将数据写入 Neo4j 图数据库
  3. 03分析 IAM、网络与跨账号关系
  4. 04使用 Cypher 查询安全问题
  5. 05定期同步云资产

适用场景

  1. 01盘点 AWS、GCP 或 Azure 资产
  2. 02查找公开访问的 S3 存储桶
  3. 03识别权限过大的 IAM 角色
  4. 04分析通往敏感资源的攻击路径

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-cloud-asset-inventory-with-cartography

安装后在 Claude Code 中输入/performing-cloud-asset-inventory-with-cartography确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

详细介绍

使用 Cartography 执行云资产盘点

概述

Cartography 是一个 CNCF 沙箱项目(最初在 Lyft 创建),它将基础设施资产及其关系整合到 Neo4j 图数据库中。它查询云 API 以发现资源,映射资源之间的关系,并使安全团队能够识别攻击路径、生成资产报告并发现安全改进领域。该图模型揭示了隐藏的连接,例如 IAM 权限链、网络路径和跨账户信任关系。

何时使用

  • 当进行涉及使用 Cartography 执行云资产盘点的安全评估时
  • 当遵循相关安全事件的事件响应流程时
  • 当执行计划的安全测试或审计活动时
  • 当通过动手测试验证安全控制时

前提条件

  • Python 3.8+
  • Neo4j 4.x 或 5.x 数据库
  • 云提供商凭证(AWS、GCP、Azure)
  • Docker(可选,用于 Neo4j 部署)
  • Neo4j 最低需要 4GB 内存,大型环境需要更多

安装

# Install Cartography
pip install cartography

# Verify installation
cartography --help
使用 Docker 部署 Neo4j
docker run -d \
  --name neo4j \
  -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/changethispassword \
  -e NEO4J_PLUGINS='["apoc"]' \
  -v neo4j_data:/data \
  neo4j:5-community

运行 Cartography

基本 AWS 同步
# Sync AWS account data to Neo4j
cartography \
  --neo4j-uri bolt://localhost:7687 \
  --neo4j-user neo4j \
  --neo4j-password-env-var NEO4J_PASSWORD
同步特定的 AWS 模块
cartography \
  --neo4j-uri bolt://localhost:7687 \
  --neo4j-user neo4j \
  --neo4j-password-env-var NEO4J_PASSWORD \
  --aws-sync-all-profiles
GCP 同步
cartography \
  --neo4j-uri bolt://localhost:7687 \
  --neo4j-user neo4j \
  --neo4j-password-env-var NEO4J_PASSWORD \
  --gcp-requested-syncs compute iam storage

面向安全的 Cypher 查询

查找所有具有公共访问权限的 S3 存储桶
MATCH (b:S3Bucket)
WHERE b.anonymous_access = true
   OR b.anonymous_actions IS NOT NULL
RETURN b.name, b.anonymous_actions, b.region, b.arn
ORDER BY b.name
识别具有管理员策略的 IAM 用户
MATCH (user:AWSUser)-[:POLICY]->(policy:AWSPolicy)
WHERE policy.name = 'AdministratorAccess'
   OR policy.arn CONTAINS 'AdministratorAccess'
RETURN user.name, user.arn, policy.name, user.password_last_used
查找暴露于互联网的 EC2 实例
MATCH (instance:EC2Instance)-[:MEMBER_OF_EC2_SECURITY_GROUP]->(sg:EC2SecurityGroup)
      -[:MEMBER_OF_EC2_SECURITY_GROUP_RULE]->(rule:IpRule)
WHERE rule.fromport <= 22 AND rule.toport >= 22
  AND rule.protocol IN ['tcp', '-1']
  AND '0.0.0.0/0' IN rule.ipranges
RETURN instance.instanceid, instance.publicipaddress, sg.groupid, sg.name
发现跨账户信任关系
MATCH (role:AWSRole)-[:TRUSTS_AWS_PRINCIPAL]->(principal:AWSPrincipal)
WHERE principal.arn CONTAINS ':root'
  AND NOT principal.arn CONTAINS role.accountid
RETURN role.arn, role.name, principal.arn AS trusted_account
ORDER BY role.name
查找从公共 EC2 到敏感 S3 的攻击路径
MATCH path = (instance:EC2Instance)-[:STS_ASSUME_ROLE_ALLOWS|MEMBER_OF_EC2_SECURITY_GROUP|
  POLICY|INSTANCE_PROFILE*1..5]->(bucket:S3Bucket)
WHERE instance.publicipaddress IS NOT NULL
  AND bucket.name CONTAINS 'sensitive'
RETURN path
LIMIT 25
识别未使用的 IAM 角色
MATCH (role:AWSRole)
WHERE role.last_used IS NULL
   OR role.last_used < datetime().epochMillis - (90 * 24 * 60 * 60 * 1000)
RETURN role.name, role.arn, role.last_used
ORDER BY role.last_used
查找具有过度授权角色的 Lambda 函数
MATCH (func:AWSLambda)-[:STS_ASSUME_ROLE_ALLOWS]->(role:AWSRole)-[:POLICY]->(policy:AWSPolicy)
WHERE policy.name = 'AdministratorAccess'
RETURN func.name, func.arn, role.name, policy.name
网络路径分析
MATCH (vpc:AWSVpc)-[:RESOURCE]->(subnet:EC2Subnet)-[:MEMBER_OF_SUBNET]->(instance:EC2Instance)
WHERE instance.publicipaddress IS NOT NULL
RETURN vpc.id, subnet.subnetid, subnet.cidr_block, instance.instanceid,
       instance.publicipaddress, instance.state

安排定期同步

基于 Cron 的同步
# Add to crontab - sync every 6 hours
0 */6 * * * /usr/local/bin/cartography \
  --neo4j-uri bolt://localhost:7687 \
  --neo4j-user neo4j \
  --neo4j-password-env-var NEO4J_PASSWORD \
  >> /var/log/cartography/sync.log 2>&1
Docker Compose 部署
version: '3.8'
services:
  neo4j:
    image: neo4j:5-community
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      NEO4J_AUTH: neo4j/securepwd123
      NEO4J_PLUGINS: '["apoc"]'
      NEO4J_dbms_memory_heap_max__size: 4G
    volumes:
      - neo4j_data:/data

  cartography:
    image: ghcr.io/cartography-cncf/cartography:latest
    depends_on:
      - neo4j
    environment:
      NEO4J_PASSWORD: securepwd123
      AWS_DEFAULT_REGION: us-east-1
    command: >
      --neo4j-uri bolt://neo4j:7687
      --neo4j-user neo4j
      --neo4j-password-env-var NEO4J_PASSWORD

volumes:
  neo4j_data:

数据模型概述

关键节点类型
  • AWSAccount、GCPProject、AzureSubscription
  • EC2Instance、S3Bucket、RDSInstance、AWSLambda
  • AWSUser、AWSRole、AWSGroup、AWSPolicy
  • EC2SecurityGroup、EC2Subnet、AWSVpc
  • GCPInstance、GCSBucket、GCPRole
关键关系类型
  • RESOURCE:账户拥有资源
  • POLICY:主体附加了策略
  • STS_ASSUME_ROLE_ALLOWS:主体可以担任角色
  • MEMBER_OF_EC2_SECURITY_GROUP:实例属于安全组
  • TRUSTS_AWS_PRINCIPAL:跨账户信任

参考资料

评论

支持 Markdown