应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载本篇技术指南围绕 tfsec 内置安全检查规则aws-dynamodb-table-customer-key展开说明该规则为何要求 DynamoDB 表在静态加密中使用 AWS KMS Customer Managed KeyCMK、不满足要求时的影响以及如何通过 Terraform 配置server_side_encryption块通过检查。读者读完本文后能够直接识别并修复不满足该规则的 DynamoDB 表定义并掌握在 tfsec 命令行与配置文件中定位、过滤、忽略该规则的具体做法。规则概述为什么要使用 Customer Managed KeyDynamoDB 表在默认情况下即启用静态数据加密encryption at rest使用的是AWS 托管的加密密钥AWS managed encryption keys。这意味着即使你不写任何加密配置数据也会被加密但这套机制存在一个关键限制使用 AWS 托管密钥无法对加密进行细粒度控制fine grained control。例如你无法自主管理密钥的轮换周期、无法按团队或项目隔离密钥的使用权限、无法在审计与合规场景中证明密钥的完整生命周期归属。为此tfsec 提供了aws-dynamodb-table-customer-key这一内置检查强制要求 DynamoDB 表使用Customer Managed Key客户托管密钥CMK进行静态加密以便把密钥的管理权如enable_key_rotation轮换掌握在自己手中。该规则在仓库中的定义信息如下规则标识aws-dynamodb-table-customer-key旧版 IDlegacy IDAWS092映射关系定义于 internal/pkg/legacy/map.go所属云平台/分类aws / dynamodb登记于 rules.md默认严重级别low低其中旧版 IDAWS092的存在意味着如果你的历史代码或 CI 配置中使用了tfsec:ignore:AWS092之类的旧式忽略注释tfsec 仍能通过 internal/pkg/legacy/map.go 中的FindIDs反向映射将其解析到新规则 ID旧规则可以通过--migrate-ignores迁移到新结构详见 docs/guides/usage.md。检查详情说明、影响与建议修复Explanation规则说明DynamoDB 表默认使用 AWS 托管密钥进行静态加密。为了增强对加密过程的控制并自主管理密钥轮换等要素应改用 Customer Managed Key。Possible Impact潜在影响使用 AWS 托管密钥无法提供细粒度的加密控制组织在密钥管理、合规审计方面会受限。Suggested Resolution建议修复方式为 DynamoDB 表启用服务端加密server side encryption并指定一个 Customer Managed Key即 KMS 客户主密钥。不安全的示例将触发检查失败以下 Terraform 配置会触发aws-dynamodb-table-customer-key检查失败。表虽然配置了流、副本等属性但完全没有声明server_side_encryption块因此加密密钥落回 AWS 托管密钥resource aws_dynamodb_table bad_example { name example hash_key TestTableHashKey billing_mode PAY_PER_REQUEST stream_enabled true stream_view_type NEW_AND_OLD_IMAGES attribute { name TestTableHashKey type S } replica { region_name us-east-2 } replica { region_name us-west-2 } }安全的示例将顺利通过检查以下配置会通过aws-dynamodb-table-customer-key检查。要点是先创建aws_kms_key资源并开启enable_key_rotation true保证密钥定期轮换在aws_dynamodb_table中声明server_side_encryption块设置enabled true并把kms_key_arn指向该 KMS 密钥。resource aws_kms_key dynamo_db_kms { enable_key_rotation true } resource aws_dynamodb_table good_example { name example hash_key TestTableHashKey billing_mode PAY_PER_REQUEST stream_enabled true stream_view_type NEW_AND_OLD_IMAGES attribute { name TestTableHashKey type S } replica { region_name us-east-2 } replica { region_name us-west-2 } server_side_encryption { enabled true kms_key_arn aws_kms_key.dynamo_db_kms.key_id } }关于server_side_encryption块中的两个参数结合 Terraform AWS Provider 的常见用法补充说明enabled布尔值是否启用服务端加密。此处必须显式为true否则检查会认为表未使用客户托管密钥kms_key_arnKMS 密钥的 ARN 或 ID。示例中引用aws_kms_key.dynamo_db_kms.key_id即引用同文件中 KMS 资源的属性。只要该参数指向一个 Customer Managed Key即可满足客户托管密钥的要求。如何在实际项目中定位与处理该规则运行扫描并过滤结果tfsec 默认会对当前目录下的 Terraform 文件执行全部内置检查详见 docs/guides/quickstart.md# 扫描当前目录 tfsec # 扫描指定目录 tfsec ./tf/prod如果只想查看与 DynamoDB 客户密钥相关的告警可使用--filter-results参数只输出指定规则的命中结果tfsec --filter-results aws-dynamodb-table-customer-key .若规则误报、或你确认某些表允许使用 AWS 托管密钥也可以使用-e/--exclude在本次运行中排除该规则或用-m/--minimum-severity设置最低报告级别CRITICAL/HIGH/MEDIUM/LOW该规则默认级别为low需要注意如果设置--minimum-severity MEDIUM本规则的 low 级告警将不会出现在输出中。完整参数说明见 docs/guides/usage.md。在配置文件中统一管理该规则更推荐的做法是把规则纳入 tfsec 配置文件统一管理。配置文件默认放在.tfsec/config.json或.tfsec/config.yml也可用--config-file显式指定详见 docs/guides/configuration/config.md--- # 提高该规则的严重级别使其在团队中引起足够重视 severity_overrides: aws-dynamodb-table-customer-key: HIGH # 或者从运行中排除该规则 exclude: - aws-dynamodb-table-customer-key按需忽略该规则对于确实无法改造的存量表可以用行内注释忽略详见 docs/guides/configuration/ignores.md。注意 tfsec 同时支持新 ID 与旧 IDAWS092resource aws_dynamodb_table legacy_table { #tfsec:ignore:aws-dynamodb-table-customer-key # 或使用旧 ID#tfsec:ignore:AWS092 name legacy hash_key TestTableHashKey attribute { name TestTableHashKey type S } }还可以为忽略规则附加过期日期防止忽略被永久遗忘#tfsec:ignore:aws-dynamodb-table-customer-key:exp:2026-12-31与同目录其他 DynamoDB 检查的协同aws-dynamodb-table-customer-key属于 DynamoDB 主题下的三组检查之一汇总页见 docs/checks/aws/dynamodb/index.md检查 ID严重级别关注点enable-at-rest-encryptionhighDAX 集群与表应始终启用静态加密enable-recoverymedium应启用时间点恢复Point in time recovery保护表数据table-customer-key本文low表应使用 Customer Managed Key 进行静态加密实际加固时建议把三项检查一起纳入基线先保证加密开启high再保证恢复能力medium最后把密钥升级为客户托管并控制轮换low。三者共同覆盖 DynamoDB 数据保护的加密、可恢复、可控密钥三个维度。小结aws-dynamodb-table-customer-key是 tfsec 对 DynamoDB 静态加密更细粒度控制诉求的落地规则默认加密并不足够密钥管理权同样重要。通过在其 Terraform 定义中显式添加server_side_encryption { enabled true, kms_key_arn ... }并配合开启自动轮换的aws_kms_key即可通过该检查。结合 tfsec 的--filter-results、配置文件severity_overrides/exclude以及带过期时间的行内忽略注释团队可以在不打断既有工作流的前提下将这一规则纳入日常的 IaC 安全扫描。赞分享应用安全SASTIaC【免费下载链接】tfsecTfsec is now part of Trivy项目地址https://gitcode.com/gh_mirrors/tf/tfsec点击查看免费下载相关推荐深入解析 tfsec 的 AWS EBS 卷加密检查规则aws-ebs-enable-volume-encryption 与 aws-ebs-encryption-customer-key深入解析 tfsec 的 AWS EBS 卷加密检查规则aws ebs enable volume encryption 与 aws ebs encrypti应用安全SASTIaC解密Plaid OAuth流程本地测试到生产环境的无缝迁移指南解密Plaid OAuth流程本地测试到生产环境的无缝迁移指南 Plaid OAuth流程是连接金融机构与应用程序的关键环节本指南将帮助开发者从本地测试平滑后端前端示例工程金融科技Nanobot OpenAI 兼容 API 完整指南用 /v1/chat/completions 把本地 Agent 接入任何应用Nanobot OpenAI 兼容 API 完整指南用 /v1/chat/completions 把本地 Agent 接入任何应用 Nanobot 内置了一套应用安全SASTIaC创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考