资讯详情

资讯详情

ThreatMapper 集成 AWS S3:将扫描结果归档为 JSON 的完整配置指南

网络安全应用安全云原生漏洞扫描【免费下载链接】ThreatMapperOpen Source Cloud Native Application Protection Platform (CNAPP)项目地址https://gitcode.com/gh_mirrors/th/ThreatMapper点击查看免费下载导读ThreatMapperDeepfence 开源云原生应用保护平台 CNAPP支持将漏洞、恶意软件、敏感信息Secret、合规与云合规等扫描结果通过集成通知机制持续归档到 AWS S3 桶中文件格式为 JSON。本文以官方文档 docs/docs/integrations/s3.md 为主线结合仓库中 S3 集成的完整后端实现与前端表单详细讲解如何在 ThreatMapper 控制台配置 S3 归档集成、理解每个配置参数的含义与校验规则并深入剖析数据从扫描完成到落盘 S3 的完整调用链帮助你在生产环境中安全、可靠地搭建扫描结果长期归档方案。S3 集成能做什么在 ThreatMapper 中S3 集成属于资源归档Archiving类集成把选定的扫描结果资源如漏洞扫描结果以 JSON 文件形式写入你指定的 AWS S3 桶与文件夹。与 Slack、Teams、PagerDuty 等即时消息类集成不同S3 集成的目的不是实时告警而是持久化保存扫描结果便于后续审计、合规留档与数据回溯。这一点可以从源码得到印证在 deepfence_server/pkg/integration/integration.go 中IsMessagingFormat只把 Slack、Teams、PagerDuty、Email、Jira 视为消息格式而SupportsSummaryLink仅对 Slack、Teams 返回 trueintegration.go。也就是说S3 集成既不参与消息格式转换也不发送扫描摘要链接而是把完整扫描结果明细以结构化 JSON 写入桶中。S3 集成由S3类型实现其配置结构定义在 deepfence_server/pkg/integration/s3/types.go核心发送逻辑在 deepfence_server/pkg/integration/s3/s3.go。在控制台添加 S3 集成的操作步骤按照官方文档在 ThreatMapper 控制台的操作路径如下填写 S3 桶名称Bucket 必须提前在 AWS 创建好ThreatMapper 不会自动创建桶设置 S3 文件夹名称如果桶内不存在该文件夹会由 S3 隐式创建S3 的文件夹本质是对象 Key 前缀提供 Access Key 与 Secret Access Key由 AWS 控制台IAM为你的账号生成选择 Region选择桶所在的 AWS 区域选择资源即选择要归档的扫描结果类型Vulnerability / Secret / Malware / Compliance / Cloud Compliance点击 Add 按钮完成集成创建。前端表单实现在 deepfence_frontend/apps/dashboard/src/features/integrations/components/IntegrationForm.tsx字段包括 Bucket Name、Folder、AWS Account ID、Region、以及Use AWS IAM Role复选框——勾选后切换为 IAM Role 认证可填写 Target Account Role ARN不勾选则要求填写 Access Key 与 Secret Key。添加成功后你可以通过GET /integration查看已有集成含 LastErrorMsg 状态也可以使用PUT /integration/{integration_id}更新、DELETE /integration/{integration_id}删除该集成路由定义见 deepfence_server/router/router.go。配置参数详解与校验规则S3 集成的每个配置字段都在后端有严格校验定义于 deepfence_server/pkg/integration/s3/types.go字段JSON 名含义校验规则s3_bucket_nameS3 桶名称需提前创建必填长度 3–63s3_folder_name桶内归档文件夹/前缀必填长度 1–128aws_access_keyAWS Access Key可选使用 IAM Role 时留空长度 16–128aws_secret_keyAWS Secret Key可选使用 IAM Role 时留空长度 16–128aws_region桶所在区域必填必须在 AWS 区域白名单内详见下文use_iam_role是否使用 IAM Role 认证必填取值仅true/falseaws_account_idAWS 账户 ID必填长度 10–12target_account_role_arn跨账户访问时的目标角色 ARN可选必须以arn开头长度 ≥8其中aws_region的合法取值由oneof校验约束覆盖所有主流区域包括us-east-1、us-east-2、us-west-1、us-west-2、af-south-1、ap-east-1、ap-south-1、ap-northeast-1/2/3、ap-southeast-1/2/3、ca-central-1、eu-central-1、eu-west-1/2/3、eu-south-1、eu-north-1、me-south-1、me-central-1、sa-east-1、us-gov-east-1、us-gov-west-1。ValidateConfigtypes.go的逻辑要点当use_iam_role ! true时Access Key 与 Secret Key必须同时提供否则返回errAccessKeyMissing随后调用validate.Struct完成上述字段级校验。这意味着你可以在两种认证方式中二选一静态凭证填写aws_access_keyaws_secret_keyIAM Role设置use_iam_role true可选填写target_account_role_arn实现跨账户访问例如 S3 桶属于其他 AWS 账户。底层实现原理从配置到落盘会话创建与凭证选择SendNotificationdeepfence_server/pkg/integration/s3/s3.go是 S3 集成的核心发送逻辑若use_iam_role true基于当前环境 IAM 身份创建 AWS Session若同时指定了target_account_role_arn则通过stscreds.NewCredentials使用 STS AssumeRole 切换到目标账户s3.go——这正对应前端AWS Account ID / Target Account Role ARN字段所服务的S3 属于其他 AWS 账户场景否则使用credentials.NewStaticCredentials(accessKey, secretKey, )创建静态凭证会话s3.go。IsValidCredentials3.go在添加/更新集成时执行凭证校验创建同样的 Session 后调用svc.ListBuckets(nil)只要能够成功列出桶即视为凭证有效。这也解释了为什么官方文档要求桶应提前创建——校验阶段只验证凭证与区域配置并不依赖目标桶是否存在。数据打包与上传发送流程分四步s3.go将扫描结果消息json.Marshal序列化为字节流使用gzip.NewWriterLevel默认压缩级别将 JSON 压缩通过s3.New(sess)创建 S3 客户端调用svc.PutObject上传同时设置ContentEncoding: gzip。上传的对象 Key 格式为S3FolderName / 时间戳 .json其中时间戳由utils.GetDatetimeNow()生成格式为 UTC 时间的2006-01-02T15:04:05.000加Z后缀见 deepfence_utils/utils/utils.go。因此实际写入桶的每个文件形如folder/2026-10-12T07:28:06.123Z.json文件名带毫秒级时间戳天然保证不重名、可按时间排序归档。同时对象带有Content-Encoding: gzip头下载后解压即得到完整的 JSON 明细。触发链路扫描结果如何被送到 S3S3 集成并非由扫描完成后即时触发而是由 Worker 的定时通知任务轮询驱动deepfence_worker/cronjobs/notification.go 中的TriggerSendNotifications周期性扫描数据库中的集成记录为每个集成投递异步任务SendNotificationsnotification.go取出集成配置按Resource分发Vulnerability / Secret / Malware / Compliance / Cloud Compliance 五种扫描类型分别对应不同处理函数notification.go资源类型常量见 deepfence_utils/utils/constants.goprocessIntegration按updated_at增量筛选自上次通知以来状态为成功的扫描notification.go拉取扫描明细由于IsMessagingFormat(s3)为 false结果不会做消息化转换而是逐条ToMap转成 map 并注入节点数据notification.go最终调用integrationModel.SendNotification(ctx, updatedResults, extras)即上文所述的 S3 上传逻辑发送结果会回写集成状态last_error_msg与发送指标供控制台展示。实用建议与注意事项桶需预先创建ThreatMapper 只做PutObject不会自动建桶建议按官方文档先在 AWS 创建好目标桶。最小权限原则若使用静态凭证建议为专用 IAM 用户授予仅针对该桶的s3:PutObject权限避免使用高权限密钥Secret Key 属于敏感字段服务端在返回集成列表时会通过RedactSensitiveFieldsInConfig脱敏相关敏感字段清单见 deepfence_server/pkg/constants/constants.go。跨账户场景桶在其他 AWS 账户时勾选 Use AWS IAM Role 并填写目标账户角色 ARNThreatMapper 将通过 STS AssumeRole 上传。文件格式归档文件为 gzip 压缩的 JSONContent-Encoding: gzip适合用aws s3 cp下载后gunzip查看或接入 Athena / 数据管道做进一步分析。失败可观测每次发送失败会在控制台集成列表的 LastErrorMsg 中体现并计入发送指标便于及时发现凭证过期或权限变更。小结ThreatMapper 的 S3 集成是一条扫描结果 → Worker 轮询 → JSON 打包 → gzip → PutObject的完整归档链路控制台表单负责收集配置s3/types.go 负责校验s3/s3.go 负责凭据会话与上传notification.go 负责按扫描类型增量驱动。理解了这些环节你就能根据自己的 AWS 账号结构单账户或跨账户、安全要求静态凭证或 IAM Role与归档频率灵活配置出可靠、可审计的扫描结果长期存储方案。赞分享网络安全应用安全云原生漏洞扫描【免费下载链接】ThreatMapperOpen Source Cloud Native Application Protection Platform (CNAPP)项目地址https://gitcode.com/gh_mirrors/th/ThreatMapper点击查看免费下载相关推荐xberg C 冒烟测试实战用 DisableOcr 快速提取 PNG 图片元数据xberg C 冒烟测试实战用 DisableOcr 快速提取 PNG 图片元数据 本文围绕 xberg 仓库中的 C 冒烟测试文档 smoke_image_网络安全应用安全云原生漏洞扫描NAML与Kind集成本地测试Kubernetes Go应用的最佳实践NAML与Kind集成本地测试Kubernetes Go应用的最佳实践 在云原生开发领域快速验证Kubernetes应用的正确性是提升开发效率的关键。NAM掌握OpenVAS Scanner扫描插件结果数据归档从入门到精通的完整指南掌握OpenVAS Scanner扫描插件结果数据归档从入门到精通的完整指南 OpenVAS Scanner作为Greenbone Community Edi漏洞扫描网络安全上一篇sequence-labeling-BiLSTM-CRF配置指南如何自定义你的序列标注模型参数下一篇TDengine 查询引擎深度剖析执行计划、并行化与缓存查询实现原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →