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

SAM模板创建IAM角色及关联策略时提示Principal字段缺失如何解决

问题原因
  • IAM角色的AssumeRolePolicyDocument结构语法错误:同一条信任策略语句的Effect、Principal、Action属性被错误拆分为3个独立的Statement数组元素,导致首条仅含Effect的语句缺失必填的Principal字段,触发格式校验错误。
  • 策略字段细节错误:一是sts: AssumeRole中存在多余空格,正确值为sts:AssumeRole;二是Principal下的键名应为大写开头的Service,IAM策略字段对大小写敏感。
修复方案

以下是修正后的完整模板代码:

Resources:
  lambdaFullPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action: "*"
            Resource: "*"
  LambdaFullRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
          Action:
          - sts:AssumeRole
      ManagedPolicyArns:
      - !Ref lambdaFullPolicy

#------------------------------output -----------------------#
Outputs:
  PolicyFullLambda:
    Description: Lambda full access managed policy
    Value: !Ref lambdaFullPolicy
    Export:
      Name:
        "Fn::Sub": "${AWS::StackName}-PolicyFullLambda"
  RollFullLambda:
    Value: !Ref LambdaFullRole
    Export:
      Name:
        "Fn::Sub": "${AWS::StackName}-RollFullLambda"
补充说明
  • 原模板中的DependsOn配置可删除,因为角色属性中通过!Ref引用托管策略,CloudFormation会自动建立资源依赖关系,保证策略先创建完成再创建角色。
  • 当前托管策略授予了全服务全资源权限,属于过度授权,生产环境建议按照最小权限原则收敛Action和Resource的范围,降低安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:27:01