You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:03:25