tfsec 检查规则解析:aws-ssm-secret-use-customer-key 强制 Secrets Manager 使用客户托管密钥(CMK)
应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载导读本文深入解析 tfsec 内置检查规则aws-ssm-secret-use-customer-key旧 IDAWS095AWS Secrets Manager 在默认情况下会使用 AWS 自动创建的服务托管密钥对 secret 进行加密而这条规则要求显式指定客户托管密钥Customer Managed Key, CMK以便对密钥加密获得更强的控制力与细粒度管理能力。阅读本文后你将掌握该规则的确切判定逻辑、低严重级别low的含义、通过/失败的 Terraform 配置写法以及如何在 tfsec 中针对这条规则进行最小严重级别过滤、排除、忽略与自定义覆盖并将其无缝落地到 CI 流程。1. 规则总览项目值规则 ID长期标识aws-ssm-secret-use-customer-key旧版规则 IDLegacy IDAWS095Provider / 服务aws/ssm默认严重级别low规则标题Secrets Manager should use customer managed keys所属文档目录docs/checks/aws/ssm/secret-use-customer-key/index.md该规则在 tfsec 全量规则清单 rules.md 中登记为aws-ssm-secret-use-customer-key | aws | ssm | Secrets Manager should use customer managed keys并在 internal/pkg/legacy/map.go 中与旧版 IDAWS095建立映射关系因此在同时使用新旧两种 ID 的场景下例如--exclude、tfsec:ignore注释、配置文件等都能正确识别同一规则。从源码结构看当前 tfsec 版本基于defsec见 go.mod 中github.com/aquasecurity/defsec v0.84.1规则文档由 cmd/tfsec-docs/webpage.go 中的baseWebPageTemplate模板统一生成该模板定义了“标题、默认严重级别、Explanation、Possible Impact、Suggested Resolution、Insecure Example、Secure Example、Links”的标准文档结构——本文所分析的页面正是该模板输出的一个具体实例。2. 规则背景为什么 Secrets Manager 需要客户托管密钥AWS Secrets Manager 对 secret 的加密默认使用 AWS 自动创建、与账号绑定的默认密钥即 AWS 托管密钥aws/secretsmanager。这种托管方式下密钥的轮换周期、权限边界、删除策略均由 AWS 统一管理用户无法针对特定 secret 定制密钥策略。tfsec 官方文档对该规则的说明如下Explanation规则解释Secrets Manager 默认使用 AWS 创建的默认密钥加密 secret。为了确保对 secret 加密拥有控制力和粒度应当显式使用 CMK。Possible Impact可能影响使用 AWS 托管密钥会降低加密密钥的灵活性与控制力。Suggested Resolution建议修复使用客户托管密钥。简言之该检查属于“加密与密钥管理最佳实践”类规则核心诉求是把密钥的“所有权”与“控制权”交还给资源所有者从而可以按需设置密钥轮换如每 90 天自动轮换独立控制 KMS Key Policy 中允许谁加解密该 secret配合 CloudTrail 对密钥使用情况进行审计在密钥泄露或合规要求变化时独立吊销、禁用或删除该密钥而不影响其他资源。3. 失败示例Insecure Example下面的 Terraform 配置无法通过aws-ssm-secret-use-customer-key检查resource aws_secretsmanager_secret bad_example { name lambda_password }这段代码仅定义了aws_secretsmanager_secret资源的name属性没有设置kms_key_id。tfsec 据此判定该 secret 将回退到 AWS 默认密钥加密从而报告一条 low 级别的告警。对应的完整可运行扫描方式如下在当前仓库 docs/checks/aws/ssm/secret-use-customer-key/index.md 中即为该示例tfsec .4. 安全示例Secure Example下面的 Terraform 配置可以通过aws-ssm-secret-use-customer-key检查resource aws_kms_key secrets { enable_key_rotation true } resource aws_secretsmanager_secret good_example { name lambda_password kms_key_id aws_kms_key.secrets.arn }要点说明先创建一个aws_kms_key资源作为客户托管密钥并开启enable_key_rotation true自动轮换是 CMK 的重要控制手段在aws_secretsmanager_secret中通过kms_key_id显式引用aws_kms_key.secrets.arn一旦kms_key_id被显式设置tfsec 判定该 secret 不再依赖 AWS 默认密钥规则通过。kms_key_id参数对应 Terraform AWS Provider 中aws_secretsmanager_secret资源的官方参数其值可以是 KMS 密钥的 ARN、别名或 ID在 Terraform 中通常直接引用aws_kms_key资源的arn属性如上例所示。关于该参数的完整语义可参考 AWS Provider 官方文档中secretsmanager_secret的kms_key_id说明见本文末尾“参考链接”。5. 检查判定逻辑的源码侧印证虽然 tfsec 当前版本将具体规则的实现下沉到了defsec依赖见 go.mod但可以从仓库中确凿地印证以下几点规则归属rules.md 明确登记该规则属于awsProvider 的ssm服务分类因此它的标准输出格式为aws-ssm-secret-use-customer-key。旧 ID 兼容internal/pkg/legacy/map.go 将AWS095映射到aws-ssm-secret-use-customer-key说明在 ignore、exclude 等场景中新旧 ID 可以互相指代。扫描执行链路tfsec 的命令入口 internal/app/tfsec/cmd/root.go 通过scanner.New(options...)创建 terraform 扫描器并调用ScanFSWithMetrics执行扫描最终结果经过 flags.go 中配置的过滤选项如最低严重级别、排除规则列表后输出规则命中时按 root.go 中的getDetailedExitCode决定退出码。可以推断defsec中对本规则的判定逻辑为解析aws_secretsmanager_secret资源块检查其kms_key_id属性是否缺失或为空缺失即为失败显式设置则为通过。6. 在 CI 与日常扫描中如何用好这条规则6.1 运行前确认规则 ID使用tfsec --help可查看全部命令行参数完整参数表见 docs/guides/usage.md。扫描时以aws-ssm-secret-use-customer-key作为规则 ID 即可。6.2 按最低严重级别过滤由于本规则默认严重级别为low如果你的 CI 只关注MEDIUM及以上问题可以使用--minimum-severity让这类告警不再出现在输出中tfsec . --minimum-severity MEDIUM对应源码见 internal/app/tfsec/cmd/flags.go--minimum-severity的合法取值为CRITICAL、HIGH、MEDIUM、LOW。注意如果全部失败结果都是 LOW 级别tfsec 会返回专门的退出码2见 root.go便于 CI 区分“低危告警”与“高危阻断”。6.3 单独排除该规则在代码迁移期或确实需要临时使用默认密钥的场景下可通过--exclude短参数-e排除tfsec . --exclude aws-ssm-secret-use-customer-key也支持使用旧 IDtfsec . --exclude AWS095该参数解析逻辑位于 internal/app/tfsec/cmd/flags.go会调用ScannerWithExcludedRules过滤对应规则。6.4 通过配置文件管理如果项目里被排除的检查逐渐增多建议在仓库根目录的.tfsec目录放置config.json或config.yml会自动加载或使用--config-file显式指定详见 docs/guides/configuration/config.md。YAML 示例--- exclude: - aws-ssm-secret-use-customer-key支持带过期日期的排除到期后规则自动重新启用--- exclude: - aws-ssm-secret-use-customer-key:2026-12-31配置文件还支持severity_overrides可以将该规则的严重级别上调例如在安全敏感项目里把low提升为HIGH以强制阻断--- severity_overrides: aws-ssm-secret-use-customer-key: HIGH6.5 行内忽略tfsec:ignore如果某处代码确实需要保留 AWS 默认密钥例如临时实验环境可以在资源块行尾或上方添加注释忽略该规则详见 docs/guides/configuration/ignores.mdresource aws_secretsmanager_secret tmp_secret { name tmp_password #tfsec:ignore:aws-ssm-secret-use-customer-key }也支持旧 ID 与过期日期#tfsec:ignore:AWS095:exp:2026-12-31 resource aws_secretsmanager_secret tmp_secret { name tmp_password }7. 常见问题Q1该规则为何属于ssm服务分类而不是单独的secretsmanagerA1这是 tfsec 的历史分类方式。在 rules.md 与 docs/checks/aws/ssm/index.md 中Secrets Manager 相关检查包括avoid-leaks-via-http与本规则统一归在aws/ssm分类下与 AWS 控制台/Provider 中 Secrets Manager 与 SSM Parameter Store 同属“密钥管理”语义一致。Q2是不是所有 AWS 托管密钥场景都会触发A2是的。只要aws_secretsmanager_secret未显式设置kms_key_id规则即判定失败与 secret 的内容、名称无关。Q3只设置kms_key_id但密钥不带轮换是否安全A3kms_key_id是本规则唯一判定依据因此只要显式设置了该属性规则即通过但建议同时为aws_kms_key开启enable_key_rotation true如本文安全示例以获得更完整的密钥生命周期管理。8. 参考链接Terraform AWS Provideraws_secretsmanager_secret资源中kms_key_id参数的官方说明registry.terraform.ioresources/secretsmanager_secret#kms_key_idAWS 文档Secrets Manager 与 KMS 集成、默认密钥与 CMK 的加密行为说明docs.aws.amazon.comkms/latest/developerguide/services-secrets-manager.html#asm-encrypt9. 延伸阅读仓库内规则总清单 rules.mdSSM 分类下全部检查 docs/checks/aws/ssm/index.md配置文件详解 docs/guides/configuration/config.md忽略规则指南 docs/guides/configuration/ignores.md命令行参数总表 docs/guides/usage.md旧 ID 映射表 internal/pkg/legacy/map.go规则文档生成模板 cmd/tfsec-docs/webpage.gotfsec 主命令入口 internal/app/tfsec/cmd/root.go赞分享应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载相关推荐用 AWS CDK 批量创建 Secrets Manager 随机用户名密码密钥aws-doc-sdk-examples secrets-manager 栈实战解析用 AWS CDK 批量创建 Secrets Manager 随机用户名密码密钥aws doc sdk examples secrets manager 栈实示例工程教程后端Nanobot OpenAI 兼容 API 完整指南用 /v1/chat/completions 把本地 Agent 接入任何应用Nanobot OpenAI 兼容 API 完整指南用 /v1/chat/completions 把本地 Agent 接入任何应用 Nanobot 内置了一套应用安全SASTIaC使用 AWS Secrets Manager 集成 Vector在配置中安全托管 API Key 与数据库密码使用 AWS Secrets Manager 集成 Vector在配置中安全托管 API Key 与数据库密码 AWS Secrets Manager 是 A可观测性数据工程数据集成日志分析上一篇Tengine ngx_debug_pool 模块实战内存池占用诊断与逐模块内存剖析指南下一篇从游戏小白到创作大师HS2-HF_Patch如何重塑你的《Honey Select 2》体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

深度学习入门:从核心概念到PyTorch实战训练全流程

深度学习入门:从核心概念到PyTorch实战训练全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:06:36 阅读更多 →
067、RDMA多播通信:UD模式下的多播组管理

067、RDMA多播通信:UD模式下的多播组管理

一、一个让我熬夜到凌晨三点的多播问题 去年做分布式存储集群的节点间心跳同步,我选了RDMA UD多播来广播状态信息。测试环境跑得飞起,一上生产就出幺蛾子——部分节点收不到心跳包,而且不是固定的节点,是随机丢。更诡异的是,用ibv_devinfo看端口状态全绿,用ibv_rc_pingp…

2026/10/15 3:06:36 阅读更多 →
使用 Module Federation Runtime Plugin 实现离线 Remote 容错:offline-remote 示例深度解析

使用 Module Federation Runtime Plugin 实现离线 Remote 容错:offline-remote 示例深度解析

示例工程 【免费下载链接】module-federation-examples Implementation examples of module federation , by the creators of module federation 项目地址: https://gitcode.com/gh_mirrors/mo/module-federation-examples 点击查看 免费下载 本文基于 module-fed…

2026/10/15 3:05:36 阅读更多 →

最新新闻

动态规划:线性DP——多状态DP与子数组专题笔记

动态规划:线性DP——多状态DP与子数组专题笔记

动态规划算法——简单多状态dp问题统一解题模板:线性DP五步法1. 状态表示:以i位置结尾,拆分多种状态(选/不选、持有/不持有、不同颜色)2. 状态转移方程:根据上一步所有合法状态推导,取最值3. 初…

2026/10/15 3:56:45 阅读更多 →
Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端

Redis 从 0 到 1(九):主库宕机 30 秒自动切主——1 主 2 从 3 哨兵 + Go 客户端

我不会起名字322 后端 / 算法 / 数据库 📘 技术栈 | 🧩 力扣 Hot100 | 🐹 Go 项目 | 🟥 Redis | 🐬 MySQL 文章目录Redis 从 0 到 1(九)&#xf…

2026/10/15 3:56:45 阅读更多 →
第 9 篇 · 数值计算与图像处理:NumPy、SciPy、Pillow

第 9 篇 · 数值计算与图像处理:NumPy、SciPy、Pillow

数值计算与图像处理:NumPy、SciPy、Pillow 数据分析链路中,除表格处理外还涉及两类底层能力:数值计算(数组运算、线性代数、插值与优化、信号处理)与图像处理。本节以 NumPy、SciPy、Pillow 三个库为例,说…

2026/10/15 3:56:45 阅读更多 →
【学习记录】DAP调试器电路原理图完全详解:从STM32最小系统到SWD调试接口

【学习记录】DAP调试器电路原理图完全详解:从STM32最小系统到SWD调试接口

【学习记录】DAP调试器电路原理图完全详解:从STM32最小系统到SWD调试接口 DAP调试器(CMSIS-DAP)是嵌入式开发中最常用的调试工具之一。它本质上是一个小型的STM32最小系统 USB接口 目标调试接口。本文从原理图角度,逐模块拆解DA…

2026/10/15 3:56:45 阅读更多 →
Python做微信机器人:个人微信API最小收发闭环实战

Python做微信机器人:个人微信API最小收发闭环实战

用 Python 做微信机器人,最常见的起步方式是:找个示例、复制一段发送代码、在测试好友上点一点。 能发出去当然高兴,但一接到真实业务——自动回、CRM、AI——就会发现:收不稳、回双份、偶发找不到人。 个人微信 API 实战&#x…

2026/10/15 3:56:45 阅读更多 →
IDEA 的命令补全又进化了

IDEA 的命令补全又进化了

我们先来还原一个极其真实的场景 你正在写一个 Java 类,突然想重构一个方法。你明明知道 IDEA 能做到,甚至昨天刚用过。但此刻,你的大脑一片空白——快捷键是什么来着? CtrlAltShiftT?还是 CtrlAltM? 你开始…

2026/10/15 3:55:44 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →