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
相关产品推荐
相关产品推荐

