资讯动态

tfsec 检查项解析:强制 AWS DocumentDB 集群使用客户管理密钥(CMK)加密

发布时间:2026/10/16 22:11:17 来源:尧图企业网站定制
应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载导读aws-documentdb-encryption-customer-key是 tfsec 内置的 AWS 静态检查规则用于在 Terraform 配置中识别未指定kms_key_id的aws_docdb_cluster资源从而强制 DocumentDB 底层存储使用客户管理密钥Customer Managed KeyCMK加密。本文将围绕该检查的判定逻辑、默认严重级别、不安全/安全示例展开并结合 tfsec 源码说明如何运行、过滤与定制该检查帮助读者在 CI 流水线中落地更细粒度的 KMS 加密控制。一、检查项概览属性值检查 IDaws-documentdb-encryption-customer-key适用资源aws_docdb_clusterAmazon DocumentDB 集群默认严重级别low文档位置docs/checks/aws/documentdb/encryption-customer-key/index.md该检查隶属于 tfsec 的 AWS DocumentDB 检查组。同一组的其他检查还包括aws-documentdb-enable-log-exportDocumentDB 日志导出应开启文档aws-documentdb-enable-storage-encryptionDocumentDB 存储必须加密文档。三个检查的完整目录索引见 docs/checks/aws/documentdb/index.mdmkdocs 站点导航中的组织方式见 mkdocs.yml。二、检查原理AWS 托管密钥 vs 客户管理密钥检查文档的 Explanation 明确阐述了规则背后的安全动机Encryption using AWS keys provides protection for your DocumentDB underlying storage. To increase control of the encryption and manage factors like rotation use customer managed keys.AWS DocumentDB 对底层存储含备份与快照的静态加密默认由 AWS 托管的 KMS 密钥完成这能提供基础的数据保护但若需要更细粒度的控制——例如自定义密钥生命周期、独立审计、按组织规范管理密钥轮换rotation策略——则应改用客户管理密钥CMK并在 Terraform 资源中通过kms_key_id显式指定。对应地Possible Impact 指出不满足要求时的风险Using AWS managed keys does not allow for fine grained control即仅使用 AWS 托管密钥时密钥的创建、轮换、禁用与删除均由 AWS 全权管理无法满足合规或审计上对加密密钥自主可控的诉求。Suggested Resolution 给出的修复方向是 Enable encryption using customer managed keys。值得注意的是aws-documentdb-encryption-customer-key关注的是密钥归属与控制权而姊妹检查aws-documentdb-enable-storage-encryption关注的是存储加密开关本身是否开启通过storage_encrypted参数判定见 enable-storage-encryption/index.md。两者可以组合使用先保证storage_encrypted true再进一步要求kms_key_id指向客户管理密钥构成加密已启用 密钥可自主管理的完整防线。三、不安全示例未指定 kms_key_id 将触发告警以下 Terraform 配置无法通过aws-documentdb-encryption-customer-key检查判定为 FAILresource aws_docdb_cluster docdb { cluster_identifier my-docdb-cluster engine docdb master_username foo master_password mustbeeightchars backup_retention_period 5 preferred_backup_window 07:00-09:00 skip_final_snapshot true }逐项解读engine docdb指明这是 Amazon DocumentDB 集群master_username/master_password用于初始化管理员账号backup_retention_period与preferred_backup_window定义备份保留与时间窗口skip_final_snapshot true表示删除集群时跳过最终快照生产环境通常不建议关键缺陷整个资源块中没有kms_key_id参数。tfsec 扫描器解析到aws_docdb_cluster资源后若发现缺少该参数或该参数为空值即判定本次检查失败——这意味着集群将回退到 AWS 托管密钥加密失去密钥控制权。四、修复方案显式引用客户管理密钥以下配置可以通过该检查判定为 PASSresource aws_kms_key docdb_encryption { enable_key_rotation true } resource aws_docdb_cluster docdb { cluster_identifier my-docdb-cluster engine docdb master_username foo master_password mustbeeightchars backup_retention_period 5 preferred_backup_window 07:00-09:00 skip_final_snapshot true kms_key_id aws_kms_key.docdb_encryption.arn }修复要点新建 KMS 密钥资源aws_kms_key docdb_encryption即客户管理密钥建议同时设置enable_key_rotation true让 KMS 自动按年度轮换密钥材料——这正是文档中manage factors like rotation的直接落地建立引用在aws_docdb_cluster中通过kms_key_id aws_kms_key.docdb_encryption.arn把集群加密绑定到该 CMK实践建议在真实生产代码中通常通过data aws_kms_key引用既有密钥或把 KMS ARN 收敛为变量如kms_key_id var.docdb_kms_key_arn以便多环境复用同时建议结合aws_docdb_cluster的参数别名parameter group与备份配置统一治理。参数名、取值范围与行为细节以 Terraform AWS Provider 的aws_docdb_cluster资源文档kms_key_id字段和 AWS DocumentDB 加密相关官方文档为准。五、在 tfsec 中运行与验证该检查1. 基础扫描在当前目录或指定目录运行扫描tfsec . # 或指定路径 tfsec ./path/to/terraform入口流程见 internal/app/tfsec/cmd/root.go命令解析目录后通过scanner.New(options...)构建 defsec 的 Terraform 扫描器再调用ScanFSWithMetrics完成资源解析与规则匹配。2. 只保留本条检查使用--filter-results仅输出指定检查源码实现见 internal/app/tfsec/cmd/flags.go内部转换为ScannerWithIncludedRulestfsec . --filter-results aws-documentdb-encryption-customer-key3. 按严重级别过滤默认严重级别为low可使用--minimum-severity提高门槛合法值为CRITICAL/HIGH/MEDIUM/LOW校验逻辑见 internal/app/tfsec/cmd/flags.go# 只报告 MEDIUM 及以上此时 low 级别的本检查将被忽略 tfsec . --minimum-severity MEDIUM4. 在配置文件中覆盖严重级别tfsec 支持在项目.tfsec/config.yml或config.json/config.yaml中通过severity_overrides提升或降低该检查的严重级别例如把低风险的 CMK 缺失提升为MEDIUM以便纳入准入控制。配置加载与覆盖逻辑见 internal/app/tfsec/cmd/flags.go。5. 与退出码联动tfsec 依据结果计算退出码internal/app/tfsec/cmd/root.go全部通过 →0存在失败但全部为 LOW 级别→ 特殊失败码2存在任何 CRITICAL/HIGH/MEDIUM 失败 → 失败码1。由于本检查默认是 LOW单独触发时通常得到退出码2若通过severity_overrides提升为 MEDIUM 及以上则会使流水线以1失败。这一机制使团队可以按风险偏好决定低风险项仅告警还是强制阻断。六、源码视角该检查在 tfsec 体系中的定位文档组织每条检查的说明页位于docs/checks/aws/documentdb/目录由 mkdocs.yml 的documentdb小节统一渲染成站点导航形成检查目录页 单条检查页的文档结构ID 映射在 internal/pkg/legacy/map.go 的旧版 ID 映射表如AWS061→aws-api-gateway-enable-access-logging中未出现documentdb 相关条目可以推断该检查属于较新加入的规则集合不存在旧版短 ID因此排障/忽略时应直接使用长 IDaws-documentdb-encryption-customer-key扫描管线检查规则本身由底层 defsec 的嵌入式策略集提供options.ScannerWithEmbeddedPolicies(true)见 internal/app/tfsec/cmd/flags.gotfsec CLI 负责目录发现、HCL 解析、结果过滤与多格式输出项目状态tfsec 现已并入 Trivy 生态迁移路径与差异说明见仓库根目录的 tfsec-to-trivy-migration-guide.md在 Trivy 中使用时请注意检查 ID 与输出格式的对应关系。七、快速自查清单在提交 DocumentDB 相关 Terraform 变更前建议对照以下清单aws_docdb_cluster已设置storage_encrypted true对应aws-documentdb-enable-storage-encryption已创建或引用客户管理 KMS 密钥并通过kms_key_id显式绑定到集群KMS 密钥已开启enable_key_rotation符合轮换管理要求已在 CI 中运行tfsec或 Trivy确认aws-documentdb-encryption-customer-key通过若暂无法修复已通过.tfsec/config.yml的exclude或注释tfsec:ignore显式登记例外并评估了风险等级。通过以上配置即可在 IaC 阶段提前拦截DocumentDB 加密密钥不可控的配置漂移将加密控制权牢牢掌握在团队手中。赞分享应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载相关推荐tfsec 检查规则详解EBS 卷加密应使用客户托管密钥aws-ec2-volume-encryption-customer-keytfsec 检查规则详解EBS 卷加密应使用客户托管密钥aws ec2 volume encryption customer key tfsec 是用于扫应用安全SASTIaCBoto3 结合 AWS KMS 实现文件信封加密数据密钥与客户主密钥CMK的加密解密实战Boto3 结合 AWS KMS 实现文件信封加密数据密钥与客户主密钥CMK的加密解密实战 AWS Key Management ServiceAWS后端云原生tfsec 检查详解为 Amazon EKS 集群启用 Secrets 加密aws-eks-encrypt-secretstfsec 检查详解为 Amazon EKS 集群启用 Secrets 加密aws eks encrypt secrets 本篇技术指南围绕 tfsec应用安全SASTIaC创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑