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

通过CFT/SAM模板为RDS实例授权调用Lambda的问题排查

问题分析与解决:RDS实例通过SAM模板获取Lambda调用权限的错误处理

两次错误的原因

第一次错误:Policies字段无效

AWS::RDS::DBInstance资源的Properties中不存在Policies属性,该属性仅适用于IAM角色、用户等身份类资源,直接在RDS实例配置里添加会触发属性校验失败,报错提示extraneous key [Policies] is not permitted。

第二次错误:RoleArn格式错误

在AssociatedRoles中使用!Ref RootRole返回的是IAM角色的名称,而RDS要求RoleArn必须是完整的ARN格式,因此需要改用!GetAtt RootRole.Arn来获取角色的ARN值。另外,FeatureName参数需设置为Lambda(而非InvokeLambda),这是RDS关联Lambda调用权限的标准值。

修正后的SAM模板示例

Description: 包含处理邮件路由的Lambda函数服务
Resources: 
  RootRole: 
    Type: AWS::IAM::Role
    Properties: 
      AssumeRolePolicyDocument: 
        Version: "2012-10-17"
        Statement: 
          - Effect: "Allow"
            Principal: 
              Service: 
                - "rds.amazonaws.com"
            Action: 
              - "sts:AssumeRole"
      Path: "/"
      Policies:
        - PolicyName: RDSLambdaCrud
          PolicyDocument: 
            Version: "2012-10-17"
            Statement:
              - Sid: LambdaCrudPolicy
                Effect: Allow
                Action:
                  - lambda:InvokeFunction
                Resource: "*" # 建议替换为具体Lambda的ARN,提升安全性
  DBInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      DBName: dbname
      Engine: postgres
      MasterUsername: dbuser
      DBInstanceClass: db.t3.micro
      DBInstanceIdentifier: artifacts
      AllocatedStorage: 5
      MasterUserPassword: qwert1234
      AssociatedRoles:
        - FeatureName: Lambda
          RoleArn: !GetAtt RootRole.Arn

额外注意事项

  • 若使用PostgreSQL引擎,需确保实例已启用aws_lambda扩展,否则无法通过RDS调用Lambda
  • 建议将Policy中的Resource从*改为具体Lambda函数的ARN,遵循最小权限原则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:01:37