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

如何在AWS::IAM::Role策略语句中引用SAM Conditions?

问题分析与解决方法

你混淆了CloudFormation模板层面的Conditions和IAM策略内的Condition这两个完全不同的概念:

  • CloudFormation的Conditions是用来控制资源是否被部署的模板逻辑,只能在资源定义的Condition字段中引用(比如决定某个Lambda要不要创建)。
  • IAM策略里的Condition是权限规则的一部分,用来控制权限何时生效,必须遵循IAM策略的语法,不能直接引用CloudFormation的Conditions。

所以你直接在IAM策略里写Condition: TagsPolicy会导致IAM解析失败,因为它不认识这个CloudFormation层面的条件名称。

正确的写法

把IAM策略里的Condition逻辑直接展开,用IAM支持的语法来写:

DownloadBrokerageNotesStateMachineExecutionRole:
  Type: "AWS::IAM::Role"
  Properties:
    AssumeRolePolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Effect: "Allow"
          Principal:
            Service:
              - !Sub states.${AWS::Region}.amazonaws.com
          Action: "sts:AssumeRole"
    Path: "/"
    Policies:
      - PolicyName: LambdaExecute
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Action:
                - "lambda:InvokeFunction"
              Resource: 
                - !GetAtt RicoRobotAuthenticateFunction.Arn
              Condition:
                And:
                  - StringEquals:
                      "aws:ResourceTag/Joba:Product": !Ref Product
                  - StringEquals:
                      "aws:ResourceTag/Joba:Environment": !Ref Environment

关于SAM Validate的警告

W8001 Condition TagsPolicy not used是因为你定义的CloudFormation TagsPolicy条件没有在任何资源的Condition字段中被引用(比如Resource: ... Condition: !Condition TagsPolicy)。如果这个条件只是用来做IAM策略的逻辑,那可以直接删除模板里的Conditions部分;如果其他资源需要用到这个条件判断,保留即可,不影响部署。

内容的提问来源于stack exchange,提问作者JobaDiniz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:11:14