Cartography项目实战教程:使用Neo4j进行云资产安全分析
前言
Cartography是一款强大的云基础设施资产图谱工具,能够将复杂的云环境资源关系可视化。本教程将带您深入了解如何使用Cartography进行云资产的安全分析,特别关注AWS环境中的常见安全场景。
环境准备
在开始之前,请确保您已经完成了Cartography的安装和数据同步。完成后,您可以通过访问本地7474端口来使用Neo4j的Web界面。
基础查询示例
1. 查询所有AWS账户中的RDS实例
MATCH (aws:AWSAccount)-[r:RESOURCE]->(rds:RDSInstance)
return *
这个查询会返回所有AWS账户与其关联的RDS实例之间的关系。在结果可视化界面中,您可以看到清晰的节点连接图。
2. 查询未加密的RDS实例
MATCH (a:AWSAccount)-[:RESOURCE]->(rds:RDSInstance{storage_encrypted:false})
RETURN a.name, rds.id
此查询使用了属性过滤,只返回storage_encrypted
属性为false的RDS实例,帮助您快速识别潜在的安全风险。
可视化界面自定义技巧
在Neo4j的可视化界面中,您可以轻松自定义节点显示方式:
- 点击节点类型图标(如"AWSAccount")选择节点类型
- 在底部出现的菜单中调整颜色、大小和标签显示
- 对于表格形式的结果,可以点击列头进行排序
高级安全分析
1. 识别暴露在互联网的EC2实例
MATCH (instance:EC2Instance{exposed_internet: true})
RETURN instance.instanceid, instance.publicdnsname
Cartography通过数据增强添加了exposed_internet
字段,帮助您快速识别可能面临外部威胁的实例。
2. 查找允许匿名访问的S3存储桶
MATCH (s:S3Bucket)
WHERE s.anonymous_access = true
RETURN s
同样,anonymous_access
是Cartography添加的增强字段,用于标记可能不安全的访问权限配置。
数据聚合分析
统计各AWS账户中未加密的RDS实例数量
MATCH (a:AWSAccount)-[:RESOURCE]->(rds:RDSInstance)
WHERE rds.storage_encrypted = false
RETURN a.name as AWSAccount, count(rds) as UnencryptedInstances
这种聚合查询可以帮助您从宏观角度了解各账户的安全状况。
探索数据关系
1. 发现与DNS记录相关的所有节点类型
match (d:DNSRecord)--(n)
return distinct labels(n);
2. 查看特定类型节点的所有属性
match (n:S3Bucket) return properties(n) limit 1;
这些探索性查询可以帮助您更好地理解数据模型,为构建更复杂的查询打下基础。
Cartography的数据增强功能
Cartography通过分析作业为节点添加了多个安全相关的自定义属性:
-
exposed_internet - 标记资源是否暴露在互联网
- 适用于ELB、ALB、EC2实例和ElasticSearch域
- 判断逻辑包括安全组规则、负载均衡器配置等
-
anonymous_access - 标记资源是否允许匿名访问
- 主要应用于S3存储桶
- 分析ACL策略中的特殊权限组
扩展分析能力
Cartography支持通过分析作业进行扩展,您可以:
- 添加自定义属性和关系
- 实现更复杂的权限映射分析
- 创建针对特定场景的安全检查
实用小技巧:永久链接书签
您可以创建一个浏览器书签,快速生成当前查询的永久链接,方便团队协作和知识共享。
总结
通过本教程,您已经学会了使用Cartography进行云资产安全分析的基本方法。从简单的资源查询到复杂的安全状况分析,Cartography提供了强大的工具来帮助您理解和保护云环境。建议您结合实际环境,尝试构建更多有针对性的查询,充分发挥图谱分析的优势。