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

使用AWS SAM部署Lambda遇policyArn长度校验错误如何解决?

问题

使用AWS SAM通过CloudFormation部署Lambda,该Lambda调用StartInstancesCommand、StopInstancesCommand和DescribeInstancesCommand API实现EC2实例定时启停。执行sam deploy时,使用EC2DescribePolicy或EC2FullAccessPolicy SAM策略模板遇到以下错误:

1 validation error detected: Value 'EC2DescribePolicy' at 'policyArn' failed to satisfy constraint: Member must have length greater than or equal to 20 (Service: AmazonIdentityManagement; Status Code: 400; Error Code: ValidationError;

相关template.yaml配置:

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: >
  test-function

Resources:
  TestFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: test-function/
      Handler: app.lambdaHandler
      Runtime: nodejs16.x
      MemorySize: 512
      Timeout: 60
      Policies:
        - AWSLambdaBasicExecutionRole
        - AWSLambdaVPCAccessExecutionRole
        - EC2DescribePolicy
      Architectures:
        - x86_64
      Events:
        ScheduledEvent:
          Type: Schedule
          Properties:
            Schedule: cron(0 8 * * ? *)
            Enabled: True

环境版本信息:

$ sam --version
SAM CLI, version 1.60.0
$ node --version
v16.17.0
$ docker --version
Docker version 20.10.17, build 100c701
$ python3 --version
Python 3.9.6
解决方案

错误原因

EC2DescribePolicy和EC2FullAccessPolicy并非SAM官方预定义的策略模板名称,SAM无法识别这些名称,会错误地将其当作IAM策略ARN处理,而这些字符串长度远小于ARN要求的最小20字符,因此触发验证错误。

修复方法

有两种可选修复方式:

方式1:使用SAM官方预定义的EC2策略模板

SAM提供了合规的EC2相关策略模板,比如:

  • AWSEC2StartStopPolicy:包含StartInstances、StopInstances和DescribeInstances权限,刚好匹配你的需求
  • AmazonEC2FullAccess:对应EC2全权限
  • AmazonEC2ReadOnlyAccess:对应EC2只读权限(包含DescribeInstances操作)

修改后的Policies配置示例:

Policies:
  - AWSLambdaBasicExecutionRole
  - AWSLambdaVPCAccessExecutionRole
  - AWSEC2StartStopPolicy

方式2:自定义内联策略

如果需要更精细的权限控制,可以直接定义内联策略,仅授予Lambda所需的EC2操作权限:

Policies:
  - AWSLambdaBasicExecutionRole
  - AWSLambdaVPCAccessExecutionRole
  - Version: '2012-10-17'
    Statement:
      - Effect: Allow
        Action:
          - ec2:StartInstances
          - ec2:StopInstances
          - ec2:DescribeInstances
        Resource: '*' # 可指定具体EC2实例ARN缩小权限范围

是否必须手动指定policyArn?

不需要。只要使用SAM官方预定义的策略模板名称(如上述AWSEC2StartStopPolicy),SAM会自动关联对应的IAM策略ARN,无需手动填写。只有引用自定义IAM策略或AWS托管策略的ARN时,才需要手动指定完整ARN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:20:30