如何配置terraform-compliance仅拦截aws_s3_bucket_policy放行aws_iam_policy_document
解决方案
你要实现的需求核心是区分根模块用户显式声明的aws_s3_bucket_policy和S3模块内部自动创建的aws_s3_bucket_policy,使用terraform-compliance的地址正则过滤能力即可实现,正确的特性文件配置如下:
Feature: Force proper S3 bucket policy use Scenario: Block direct root-level aws_s3_bucket_policy resource usage Given I have aws_s3_bucket_policy resource defined with address not matching regex "^module\..*" Then it fails
规则原理
- 所有在Terraform模块内部创建的资源,地址都会以
module.为前缀,比如你S3模块内部创建的桶策略地址格式为module.my_s3_bucket.aws_s3_bucket_policy.s3_policy - 所有用户直接在根目录声明的
aws_s3_bucket_policy资源,地址没有module.前缀,格式为aws_s3_bucket_policy.xxx - 规则中的
with address not matching regex "^module\..*"过滤条件,会排除所有模块内部的aws_s3_bucket_policy资源,仅命中根目录下用户直接声明的非法资源,命中后直接触发失败
场景验证
- 非法场景(用户直接声明
aws_s3_bucket_policy):资源地址无module.前缀,命中规则,拦截成功 - 合法场景(用户使用
aws_iam_policy_document传参给S3模块):根目录无aws_s3_bucket_policy资源,模块内部的桶策略被过滤排除,规则校验通过
内容的提问来源于stack exchange,提问作者170730350
相关产品推荐
相关产品推荐

