tfsec 规则精讲:AWS IAM 组启用 MFA 强制(aws-iam-enforce-mfa)
应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载本文围绕 tfsec 内置的aws-iam-enforce-mfa检查规则展开系统讲解该规则检测的 IAM 配置问题、默认严重级别、不安全的 Terraform 写法与通过检查的安全写法并结合仓库内的真实示例模块terraform-module/enforce-mfa/aws给出可直接落地的修复方案。读完本文你将掌握如何编写让 tfsec 放行的 IAM 组配置以及在本地与 CI 中运行该规则的完整方法。规则概览检查什么、为何重要aws-iam-enforce-mfa是 tfsec 内置的 AWS IAM 安全规则之一其对应的规则文档位于 docs/checks/aws/iam/enforce-mfa/index.md并在 mkdocs.yml 中注册到文档站点导航。该规则的检查对象是 AWS IAM 组aws_iam_group及关联的组策略检查项IAM 组是否启用了多因素认证MFA强制默认严重级别medium中等检测逻辑扫描 Terraform 配置中声明的aws_iam_group判断其是否通过组策略中的条件键aws:MultiFactorAuthPresent对 MFA 提出强制要求。MFA 强制要求在用户通过密码登录或使用访问密钥执行操作时额外提供第二个认证因素如 TOTP 动态令牌、硬件密钥从而在密码泄露的场景下为账户加一道安全闸门。IAM 用户账户一旦缺少 MFA 保护攻击者仅需拿到一组口令即可接管账户权限这正是该规则以medium严重级别提示风险的原因。该规则与同目录下的 enforce-group-mfa 规则 语义相近后者检查对象与措辞侧重 IAM groups should have MFA enforcement activated两者共同构成 tfsec 对 AWS IAM 组 MFA 配置的双保险。完整的 IAM 检查清单可参考 docs/checks/aws/iam/index.md。可能的隐患不加 MFA 的账户风险tfsec 对该规则给出的 Possible Impact 说明是User accounts are more vulnerable to compromise without multi factor authentication activated.翻译过来即未启用多因素认证的 IAM 用户账户更容易被攻破。具体表现为密码一旦泄露弱口令爆破、钓鱼、凭据复用攻击者可无阻碍登录控制台或调用 API缺乏第二认证因素时安全团队难以通过异常登录设备/位置来阻断攻击合规审计如 SOC 2、ISO 27001通常要求特权账户具备 MFA 强制能力。因此该规则建议所有 IAM 组尤其是包含高权限用户的组都应绑定带 MFA 条件键的策略。不安全的示例这条配置必然失败原规则文档给出的失败示例非常简单直观data aws_caller_identity current {} resource aws_iam_group developers { name developers }这段配置只会导致aws-iam-enforce-mfa检查失败原因在于它创建了 IAM 组developers但没有为组附加任何策略组内用户在执行任意 AWS API 操作时不受aws:MultiFactorAuthPresent条件的约束因此在 tfsec 的判定中该组不具备 MFA 强制能力命中medium级别告警。在本地验证时可直接对该文件运行 tfsectfsec .tfsec 默认扫描当前工作目录详见 README.md发现此类问题时退出码非零在 CI 中即会阻断构建。安全的示例用条件键约束 MFA要修复上述问题需要为 IAM 组附加一份包含aws:MultiFactorAuthPresent条件键的组策略。原规则文档给出的安全示例通过给组绑定aws_iam_group_policy在策略的条件块中强制要求调用者已完成 MFA 认证resource aws_iam_group support { name support } resource aws_iam_group_policy mfa { group aws_iam_group.support.name policy EOF { Version: 2012-10-17, Statement: [ { Sid: , Effect: Allow, Action: ec2:*, Resource: *, Condition: { Bool: { aws:MultiFactorAuthPresent: [true] } } } ] } EOF }关键点解析元素作用aws_iam_group_policy将策略内联附加到指定 IAM 组组内所有用户继承该策略Condition.Bool.aws:MultiFactorAuthPresent [true]IAM 上下文键声明仅当请求中携带有效的 MFA 认证结果时才允许Allow语句生效Effect: Allow 条件键组合未通过 MFA 的请求会被隐式拒绝达到无 MFA 即无法执行操作的强制效果注意示例中Action为ec2:*在实际生产环境中应遵循最小权限原则将 Action 与 Resource 收敛到业务实际需要的范围这与 tfsec 的 no-policy-wildcards 规则 的检查思路一致。推荐实践直接使用 enforce-mfa 官方模块手写策略模板虽然可以绕过检查但维护成本高。tfsec 原规则文档的 Suggested Resolution 明确推荐使用 Terraform 社区模块terraform-module/enforce-mfa/aws来统一落实 MFA 强制。仓库中提供了两份可直接复用的完整示例_examples/mfa/group.tf_examples/mfa-module/main.tf两份示例内容一致核心配置如下data aws_caller_identity current {} resource aws_iam_group support { name support } resource aws_iam_group developers { name developers } module enforce_mfa { source terraform-module/enforce-mfa/aws version 0.12.0 policy_name managed-mfa-enforce account_id data.aws_caller_identity.current.id groups [aws_iam_group.support.name] manage_own_signing_certificates true manage_own_ssh_public_keys true manage_own_git_credentials true }该模块的入参含义与用途参数说明source/version模块来源与版本示例固定为terraform-module/enforce-mfa/aws的0.12.0版本policy_name生成的托管策略名称示例为managed-mfa-enforceaccount_id当前 AWS 账户 ID通过data.aws_caller_identity.current.id动态获取groups需要强制 MFA 的 IAM 组名列表示例仅对support组启用manage_own_signing_certificates是否允许用户管理自己的签名证书置为true时策略会放开对应的自管理权限manage_own_ssh_public_keys是否允许用户管理自己的 SSH 公钥manage_own_git_credentials是否允许用户管理自己的 Git 凭据用于 CodeCommit 等场景注意示例中创建的developers组不在groups列表内说明该模块支持按组粒度选择启用范围——未被纳入的组不受 MFA 强制tfsec 会继续对其报出aws-iam-enforce-mfa告警。在仓库的测试数据 test/testdata/external-module/main.tf 中可以看到该模块在外部模块引用场景下的另一种写法不显式传入groups与account_id可用于验证 tfsec 对模块化配置的解析行为。在 CI 中落地运行、忽略与排除将规则接入流水线只需要三步本地扫描tfsec .扫描指定目录不传目录则扫当前工作目录发现问题时退出码非零容器化运行docker run --rm -it -v $(pwd):/src aquasec/tfsec /src镜像选项详见 README.md按需豁免对于确需豁免的告警可在对应行添加#tfsec:ignore:aws-iam-enforce-mfa注释若希望整个模块内的该类告警全部忽略可将注释置于 module 块上方如需设置过期时间可使用#tfsec:ignore:aws-iam-enforce-mfa:exp:2025-01-02格式详见 README.md。若团队暂时不启用该规则也可通过-e参数在命令行中整体排除tfsec . -e aws-iam-enforce-mfa。小结aws-iam-enforce-mfa以medium级别守护 AWS IAM 组的 MFA 底线凡是未通过策略条件键强制 MFA 的 IAM 组都会被标记。修复路径有两条——手写带aws:MultiFactorAuthPresent条件键的组策略或直接引入terraform-module/enforce-mfa/aws模块参考 _examples/mfa/group.tf 的完整参数。将本规则与同目录的密码策略类规则set-minimum-password-length、set-max-password-age 等组合使用可系统性地加固 AWS IAM 的身份与访问管理防线。赞分享应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载相关推荐tfsec 检查详解aws-iam-enforce-group-mfa——为 AWS IAM 用户组强制启用 MFA 防护tfsec 检查详解aws iam enforce group mfa——为 AWS IAM 用户组强制启用 MFA 防护 导读 aws iam enforc应用安全SASTIaCtfsec 规则深度解析强制 AWS Elasticsearch 域启用 HTTPSaws-elastic-search-enforce-httpstfsec 规则深度解析强制 AWS Elasticsearch 域启用 HTTPSaws elastic search enforce https 本篇应用安全SASTIaCtfsec 规则详解使用 aws-iam-set-minimum-password-length 强制 IAM 密码最小长度为 14 位tfsec 规则详解使用 aws iam set minimum password length 强制 IAM 密码最小长度为 14 位 本文是一篇面向 Te应用安全SASTIaC上一篇iTorrentiPhone上最强大的种子下载器终极指南下一篇Netease_url开发指南如何为网易云无损解析项目贡献代码和新功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考