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

使用SAM为Lambda附加CloudFormationDescribeStacksPolicy失败求助

问题分析:SAM模板中Lambda附加CloudFormationDescribeStacksPolicy失败

问题场景

我尝试在SAM模板中为名为getEnvironment的Lambda函数附加CloudFormationDescribeStacksPolicy策略,模板配置如下:

getEnvironment:
    Type: AWS::Serverless::Function
    DependsOn: AppTable
    Properties:
      Handler: src/getEnvironment.handler
      Description: Get environment details
      Policies:
        - DynamoDBCrudPolicy:
            TableName: !Ref AppTable
        - CloudFormationDescribeStacksPolicy
      Events:
        ClientApi:
          Type: Api
          Properties:
            RestApiId: !Ref ClientApi
            Path: /environment
            Method: GET

部署失败,报错信息:

CREATE_IN_PROGRESS       AWS::IAM::Role           getEnvironmentRole       ARN CloudFormationDescribeStacksPolicy is not valid. (Service: Iam, Status Code: 400, Request ID:

原因

SAM的预定义策略列表里根本没有CloudFormationDescribeStacksPolicy这个内置名称,IAM服务识别不了这个不存在的策略标识,所以抛出ARN无效的错误。你是误把自定义策略的命名逻辑套到了SAM预定义策略上,SAM并没有为CloudFormation的DescribeStacks操作单独提供简写的预定义策略。

解决方案

有两种可行的处理方式:

方式1:使用SAM内置的全量CloudFormation权限策略

如果你的Lambda确实需要完整的CloudFormation操作权限,可以直接替换成SAM官方提供的预定义策略:

Policies:
  - DynamoDBCrudPolicy:
      TableName: !Ref AppTable
  - CloudFormationFullAccess

方式2:自定义最小权限策略(推荐)

遵循IAM最小权限原则,只授予Lambda需要的DescribeStacks权限,配置如下:

Policies:
  - DynamoDBCrudPolicy:
      TableName: !Ref AppTable
  - Version: '2012-10-17'
    Statement:
      - Effect: Allow
        Action: cloudformation:DescribeStacks
        Resource: "*" # 可根据实际需求限制为特定栈ARN,比如!Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/${AWS::StackName}/*"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:02:33