升级cfn-lint遇W1031警告:解析Fn::Sub时需指定'*'
解决cfn-lint W1031警告的方法
针对你遇到的W1031 '*' was expected when 'Fn::Sub' is resolved警告,原因是cfn-lint的规则判定:当BucketPolicy的Principal字段使用Fn::Sub时,解析后的结果应包含通配符*;如果是单个明确ARN,建议避免用Fn::Sub,改用其他方式构造ARN。以下是两种可行的解决方式:
方式一:替换Fn::Sub为Fn::Join构造ARN
把Principal的!Sub写法改成用Fn::Join拼接字符串,既保留账号ID的动态替换,又不会触发W1031警告:
- Sid: AllowAthenaAndQuickSight Effect: Allow Principal: Fn::Join: - '' - - 'arn:aws:iam::' - !Ref AWS::AccountId - ':role/service-role/aws-quicksight-service-role-v0' Action: - s3:ListBucket - s3:GetObject Resource: - Fn::Sub: 'arn:aws:s3:::${SOURCE_BUCKET_NAME}' - Fn::Sub: 'arn:aws:s3:::${SOURCE_BUCKET_NAME}/*'
方式二:禁用W1031规则
如果你认为当前用!Sub的写法合理(比如该ARN确实需要动态生成),可以在模板中针对这个BucketPolicy条目添加注释,禁用W1031检查:
- Sid: AllowAthenaAndQuickSight Effect: Allow # cfn-lint:disable=W1031 Principal: !Sub 'arn:aws:iam::${AWS::AccountId}:role/service-role/aws-quicksight-service-role-v0' Action: - s3:ListBucket - s3:GetObject Resource: - Fn::Sub: 'arn:aws:s3:::${SOURCE_BUCKET_NAME}' - Fn::Sub: 'arn:aws:s3:::${SOURCE_BUCKET_NAME}/*'
也可以在项目的.cfnlintrc配置文件中全局禁用该规则,但不推荐,除非你确定该规则完全不适用你的场景。
内容的提问来源于stack exchange,提问作者Andreas Lundgren
相关产品推荐
相关产品推荐

