tfsec AWS079 规则解析:用 IMDSv2 会话令牌加固 EC2 实例元数据服务
应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载本文以 tfsec 的aws-ec2-enforce-http-token-imds规则(内部编号 AWS079)为核心,讲清它检查什么、为什么重要、如何在 Terraform 代码中通过检查,并结合 tfsec 仓库中的规则表、遗留 ID 映射、示例配置与测试用例,展示如何用 tfsec 命令行验证修复效果。读完后你可以直接在自己的 Terraform 项目中定位并修复aws_instance的 IMDSv2 配置问题,并掌握忽略、排除与自定义检查这类配套用法。规则概览:aws-ec2-enforce-http-token-imds (AWS079)该规则的定义性描述是:aws_instance should activate session tokens for Instance Metadata Service.(aws_instance应当激活实例元数据服务的会话令牌)。属性值依据规则 IDaws-ec2-enforce-http-token-imds规则总表 rules.md#L71遗留(legacy) IDAWS079internal/pkg/legacy/map.go#L36Provider / Serviceaws / ec2rules.md#L71默认严重级别High规则文档 docs/checks/aws/ec2/enforce-http-token-imds/index.md适用资源aws_instance同上两个 ID 的关系可以从源码确认:tfsec 在 internal/pkg/legacy/map.go 中维护了一张AWS079 - aws-ec2-enforce-http-token-imds的映射表,并提供FindIDs函数做反向查询。这意味着在旧版 tfsec 报告中以AWS079出现的发现,与新版报告中以长 ID 出现的发现是同一条规则——在跨版本对账存量报告时,这张映射表是重要的核对依据。该规则在 EC2 规则族中的位置可以见 docs/checks/aws/ec2/index.md:它与enforce-launch-config-http-token-imds(针对启动模板)并列,共同构成 EC2 侧的 IMDSv2 加固检查。威胁模型:为什么 IMDS 需要会话令牌规则文档给出的解释很简洁:IMDS v2 (Instance Metadata Service) introduced session authentication tokens which improve security when talking to IMDS. By defaultaws_instanceresource sets IMDS session auth tokens to be optional.用中文展开一下背景:IMDS(实例元数据服务)是 EC2 实例内部的本地 HTTP 端点,应用通过它可以获取实例的 Profile、临时安全凭证(IAM Role 凭证)、用户数据等敏感信息。IMDS v1是无状态的:任何能访问该端口的进程发一个 GET 就能拿到元数据。一旦实例上运行着存在 SSRF(Server-Side Request Forgery)漏洞的应用,攻击者就可能借道应用进程去请求本地元数据端点,直接窃取临时 IAM 凭证。IMDS v2引入会话令牌:客户端必须先向元数据端点发PUT请求获取一个会话令牌(设置过期时间),之后的GET请求都必须携带该令牌。这个先 PUT 后 GET的协议特征使得常规 SSRF 载荷难以绕过,从而把元数据访问限定在实例内真正会主动发起令牌交换的合法客户端上。规则文档中列出的可能影响(Possible Impact)是:Instance metadata service can be interacted with freely——即元数据服务可被任意进程自由交互,凭证泄露风险随之而来。建议的修复方式(Suggested Resolution)则是:Enable HTTP token requirement for IMDS——为 IMDS 启用 HTTP 令牌强制要求。判定逻辑与修复方式:metadata_options 块规则文档原文指出,要完全保护 IMDS,需要使用aws_instance的metadata_options块并将其中的http_tokens变量设置为required。不安全的写法(规则会失败)resource aws_instance bad_example { ami ami-005e54dee72cc1d00 instance_type t2.micro }该aws_instance没有声明metadata_options,IMDS 会话令牌保持默认状态(不强制),会触发aws-ec2-enforce-http-token-imds失败。安全的写法(规则会通过)resource aws_instance good_example { ami ami-005e54dee72cc1d00 instance_type t2.micro metadata_options { http_tokens required } }只要http_tokens required,该实例强制使用 IMDS v2,规则检查通过。仓库中的更完整示例tfsec 仓库自带的自定义检查示例 _examples/custom_functions/main.tf#L1-L11 给出了一个更完整的metadata_options配置,展示了该块中其他常用字段:resource aws_instance bastion { metadata_options { http_endpoint enabled http_put_response_hop_limit 1 http_tokens required } tags { Environment test } }从该示例可以看出metadata_options块内通常包含三类字段:http_endpoint(元数据端点是否可用)、http_put_response_hop_limit(元数据响应允许经过的跳转层数,示例中取最小值 1,可进一步收敛元数据可达范围)以及本规则关注的http_tokens。对本规则而言,判定的核心是http_tokens是否等于required;http_endpoint disabled之类的做法虽然从根本上关闭了元数据端点,但不是本规则的预期写法,且会破坏依赖 IMDS 的常规工作负载(如 EC2 IAM 角色),应作为特殊场景对待。兄弟规则:同一防御面上的其他入口IMDSv2 强制要求并不只在aws_instance上设置。从 docs/checks/aws/ec2/index.md 的规则列表与对应文档页可以看到 tfsec 覆盖了 EC2 生态中几个会生成实例元数据的资源:aws-ec2-enforce-http-token-imds(本文主角):针对aws_instance资源。aws-ec2-enforce-launch-config-http-token-imds:针对启动模板(文档页),示例资源为aws_launch_template,修复方式同样是添加metadata_options { http_tokens required }。aws-autoscaling-enforce-http-token-imds:自动扩展域下的同名规则(文档页),同样面向aws_launch_template这类启动配置资源。实际项目里,如果实例是经由aws_launch_template或aws_launch_configuration创建的,aws_instance规则不会命中,但对应资源上的兄弟规则会命中。修复思路完全一致,建议在代码评审时把这三个规则一起纳入检查。用 tfsec 验证:从扫描到修复闭环基本运行tfsec 通过静态分析 Terraform 代码发现潜在误配置。基本用法是扫描指定目录,不传目录时默认扫描当前工作目录(见 README.md 的 Usage 一节):tfsec .退出码语义可以在源码 internal/app/tfsec/cmd/root.go#L139-L154 的getDetailedExitCode中确认:无失败规则返回 0;失败规则全部为 LOW 级别时返回专用退出码 2;存在 CRITICAL/HIGH/MEDIUM 级别的失败则返回 1。aws-ec2-enforce-http-token-imds默认严重级别为 High,因此命中后(未加--soft-fail时)退出码为 1,可以直接用于 CI 卡点。常用的配套参数(定义于 internal/app/tfsec/cmd/flags.go):# 只查看是否通过,把通过项也打印出来 tfsec . --include-passed # JSON 输出便于管道处理 tfsec . --format json # 临时排除某条规则(例如迁移期先豁免) tfsec . -e aws-ec2-enforce-http-token-imds-e/--exclude接收逗号分隔的规则 ID 列表;--format支持lovely、json、csv、checkstyle、junit、sarif、text、markdown、html、gif等格式。文件内忽略与到期时间如果某处确实需要保留默认 IMDS 行为,可以按 README.md 的 Ignoring Warnings 一节,在问题行或块上方添加忽略注释:resource aws_instance legacy { ami ami-005e54dee72cc1d00 instance_type t2.micro #tfsec:ignore:aws-ec2-enforce-http-token-imds:exp:2025-01-02 }忽略注释支持yyyy-mm-dd格式的到期时间(如上面的:exp:2025-01-02),到期后忽略自动失效,避免豁免被无限期遗忘——对安全基线类规则尤其有用。进阶:用自定义检查约束完整的 metadata_options除了内置规则,tfsec 支持用户自定义检查。仓库测试文件 internal/pkg/custom/multiple_submatches_test.go#L13-L52 恰好展示了一个与本主题高度相关的自定义规则:要求aws_instance必须存在metadata_options块,且其中http_endpoint、http_put_response_hop_limit、http_tokens三个子项同时满足(isPresentand子匹配)。对应的通过/失败断言在TestInstanceMetadataEndpointPresent(L55)、TestInstanceMetadataEndpointMissing(L69,缺失块判失败)和TestOneSubmatchHasWrongValue(L78,任一项取值错误判失败)三个用例中,其中最后一个用例明确验证了http_tokens definitely-wrong-not-required会被判为不合规。从测试结构可以看出,tfsec 的自定义检查引擎能够对metadata_options这类嵌套块做存在性 逐项取值的联合判定。如果你所在团队的标准高于内置规则(例如还要求http_put_response_hop_limit 1),可以参照 docs/guides/configuration/custom-checks.md 编写自定义检查,复用同样的判定能力,而无需等待内置规则更新。实现位置说明:规则逻辑在 defsec 引擎中需要说明一点架构事实:本仓库(模块名github.com/aquasecurity/tfsec,见 go.mod)承载的是命令行入口、规则文档、规则表与遗留 ID 映射;实际的扫描与规则判定逻辑由依赖的 defsec 库提供——go.mod#L10 中声明了github.com/aquasecurity/defsec v0.84.1,而 internal/app/tfsec/cmd/root.go#L82-L83 中scanner.New(options...)与scnr.ScanFSWithMetrics(...)就是调用 defsec 的 Terraform 扫描器完成全量规则执行的。从源码结构看,aws-ec2-enforce-http-token-imds的具体判定函数定义在 defsec 依赖包内,tfsec 仓库负责承载、编排与呈现。这一点也解释了为什么仓库内的rules.md、docs/checks/**与internal/pkg/legacy/map.go是规则信息的三个可信来源:分别对应规则清单、规则文档与 ID 映射。另外注意 README.md 开头的迁移公告:tfsec 的扫描能力已并入 Trivy,官方建议社区逐步迁移(仓库内有 tfsec-to-trivy-migration-guide.md 说明对应关系)。如果你是在新项目选型,建议把本文的规则要点与迁移指南一并阅读,在 tfsec 与 Trivy 的 IaC 规则体系之间做映射。小结与核对清单针对aws-ec2-enforce-http-token-imds(AWS079),修复与验收可以归纳为一条清单:为每个aws_instance添加metadata_options块,并设置http_tokens required;对经由启动模板/启动配置创建实例的场景,同步检查aws-ec2-enforce-launch-config-http-token-imds与aws-autoscaling-enforce-http-token-imds;用tfsec .复扫确认命中消除,退出码归 0;确需豁免时使用带:exp:到期时间的#tfsec:ignore:注释;需要更高标准(如限制 hop limit)时,用自定义检查 子匹配扩展判定,参照 internal/pkg/custom/multiple_submatches_test.go。核心参考文件:规则文档:docs/checks/aws/ec2/enforce-http-token-imds/index.md规则总表:rules.md#L71遗留 ID 映射:internal/pkg/legacy/map.go#L36EC2 规则索引:docs/checks/aws/ec2/index.md完整配置示例:_examples/custom_functions/main.tf扫描入口与退出码:internal/app/tfsec/cmd/root.go命令行参数:internal/app/tfsec/cmd/flags.go赞分享应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载相关推荐tfsec aws-ec2-enable-volume-encryption 规则解析Terraform 中 EBS 卷必须启用加密tfsec aws ec2 enable volume encryption 规则解析Terraform 中 EBS 卷必须启用加密 本文围绕 tfsec 内应用安全SASTIaCtfsec aws-ec2-enable-at-rest-encryption 检查详解确保 EC2 实例块设备静态加密tfsec aws ec2 enable at rest encryption 检查详解确保 EC2 实例块设备静态加密 tfsec 将 Terraform应用安全SASTIaCtfsec 规则解析aws-ec2-enable-launch-config-at-rest-encryption 检查未加密的启动配置块设备tfsec 规则解析aws ec2 enable launch config at rest encryption 检查未加密的启动配置块设备 本文围绕 tf应用安全SASTIaC上一篇GraalVM Truffle AOT 编译实战教程让静态语言在零预热下直接生成机器码下一篇Egg.js 安全策略详解版本支持、漏洞披露流程与 Shell 命令注入防护实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

google-api-nodejs-client firebaserules 模块深度解析:从 v0.1.0 到 v10.0.1 的版本演进与 Firebase Rules API 实战

google-api-nodejs-client firebaserules 模块深度解析:从 v0.1.0 到 v10.0.1 的版本演进与 Firebase Rules API 实战

后端 【免费下载链接】google-api-nodejs-client Googles officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included. 项目地址: h…

2026/10/15 3:47:43 阅读更多 →
Zotero Style 实战指南:把文献阅读进度与期刊分区变成列表里的两列

Zotero Style 实战指南:把文献阅读进度与期刊分区变成列表里的两列

Zotero Style 实战指南:把文献阅读进度与期刊分区变成列表里的两列 【免费下载链接】zotero-style Ethereal Style for Zotero 项目地址: https://gitcode.com/GitHub_Trending/zo/zotero-style 读完 30 页 PDF 关掉,再打开时想不起停在哪一页&am…

2026/10/15 3:47:43 阅读更多 →
tfsec DigitalOcean Compute 安全规则全解析:6 项检查的触发条件与修复实战

tfsec DigitalOcean Compute 安全规则全解析:6 项检查的触发条件与修复实战

应用安全SASTIaC 【免费下载链接】tfsec Tfsec is now part of Trivy 项目地址: https://gitcode.com/gh_mirrors/tf/tfsec 点击查看 免费下载 本篇指南以 tfsec 仓库中的 DigitalOcean Compute 检查索引 为骨架,完整讲解其下 6 个安全检查项&#xff0…

2026/10/15 3:47:43 阅读更多 →

最新新闻

延迟优化实战:从毫秒级到微秒级的系统性能提升路径

延迟优化实战:从毫秒级到微秒级的系统性能提升路径

1. 我为什么折腾到微秒级:被延迟拖垮的业务,往往都死得悄无声息很多人做性能优化,跑到“毫秒级”就收工了,觉得接口P99能压到5ms以内已经是了不起的成就。但如果你在真正的高并发业务链路里待过,就会明白:当…

2026/10/15 4:44:53 阅读更多 →
移动端H5浏览器判断:UA解析、特征检测与兼容性实战

移动端H5浏览器判断:UA解析、特征检测与兼容性实战

1. 移动端浏览器判断的底层逻辑与方案选型1.1 为什么H5环境下的浏览器识别如此棘手做过移动端H5的同学大概率都遇到过这样的场景:某个CSS动画在A浏览器上丝滑流畅,到了B浏览器直接卡成幻灯片;某个API在旗舰机上跑得好好的,换到某款…

2026/10/15 4:44:53 阅读更多 →
SIL2认证文档解读:从证书到安全仪表回路落地的关键距离

SIL2认证文档解读:从证书到安全仪表回路落地的关键距离

简介:这份PDF记录了Rockwell Automation ControlLogix PLC在2021年取得的SIL2功能安全认证信息,面向工业自动化安全系统设计、选型与维护人员,主要解决1756系列机架、扩展环境机架及电源在IEC 61508:2010标准下的认证型号与固件版本确认问题。…

2026/10/15 4:44:53 阅读更多 →
ARM基础实验全攻略:从交叉编译到寄存器调试的实战笔记

ARM基础实验全攻略:从交叉编译到寄存器调试的实战笔记

简介:嵌入式入门阶段,ARM体系结构与汇编、C语言混合编程往往是新手面对的第一道坎。一套完整的ARM基础实验合集提取自高校嵌入式实验室常见教学场景,以18个经典实验贯穿底层寄存器操作与汇编程序设计主线,适合刚开始接触嵌入式的初…

2026/10/15 4:44:53 阅读更多 →
基于Django的重庆零售业数据分析可视化系统开发实战

基于Django的重庆零售业数据分析可视化系统开发实战

做这类题目的人我见得挺多,包括不少同学拿着“基于Django的某某数据分析可视化系统”来找我聊思路。说实话,这个题目在毕业设计里算是一个“稳妥但容易翻车”的经典款:稳妥在于技术栈成熟、资料多、工作量清晰,翻车在于很多人做着…

2026/10/15 4:44:53 阅读更多 →
HTML邮件群发实战:从渲染兼容到送达率优化

HTML邮件群发实战:从渲染兼容到送达率优化

1. 邮件群发这件事,远不止“把内容塞进模板”那么简单很多人第一次接到“给客户群发一封HTML邮件”的需求时,脑子里冒出来的画面大概是这样的:写一段漂亮的HTML,把客户邮箱列表往收件人一栏一贴,点发送,完事…

2026/10/15 4:43:53 阅读更多 →

日新闻

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 阅读更多 →