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

Node.js+Serverless+DynamoDB批量写入遇权限错误,单条写入正常求助

解决Lambda批量写入DynamoDB的AccessDeniedException问题

你的问题其实很典型:单条PutItem能正常执行,但批量的BatchWriteItem触发权限拒绝,核心原因就是你的Lambda执行角色的IAM策略缺少了dynamodb:BatchWriteItem权限。

为什么会出现这个差异?

DynamoDB的单条写入(PutItem/DeleteItem)和批量写入(BatchWriteItem)是两个独立的权限动作,IAM不会因为你拥有单条操作权限就自动赋予批量操作的权限。所以哪怕PutItem能跑通,没有显式配置BatchWriteItem的话,批量写入肯定会被拦截。

具体修复步骤:

  1. 定位Lambda的执行角色
    打开AWS控制台的Lambda服务,找到你的目标函数,切换到「配置」标签页,在「权限」板块找到「执行角色」,点击角色名称跳转到IAM控制台。

  2. 更新IAM权限策略
    在IAM角色的「权限」页面,找到给你授权PutItem的那个DynamoDB策略,编辑策略内容,添加dynamodb:BatchWriteItem动作。

    修改后的策略示例如下:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "dynamodb:PutItem",
                    "dynamodb:BatchWriteItem"  // 新增这个权限项
                ],
                "Resource": "arn:aws:dynamodb:你的区域ID:你的账号ID:table/你的表名"
            }
        ]
    }
    
  3. 验证权限生效
    保存策略后,等待1-2分钟让IAM权限同步(偶尔会有延迟),然后重新测试你的批量写入逻辑。

额外注意事项:

  • 确认策略中的Resource ARN完全正确,包括区域、账号ID和表名,不要出现拼写错误。
  • 如果你的策略包含Condition条件语句,要确保这些条件不会对BatchWriteItem操作造成限制。
  • 如果你用Serverless Framework部署,检查serverless.yml里的IAM角色配置,确保已经包含dynamodb:BatchWriteItem,比如:
    provider:
      name: aws
      iamRoleStatements:
        - Effect: Allow
          Action:
            - dynamodb:PutItem
            - dynamodb:BatchWriteItem
          Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/${self:custom.tableName}"
    

完成以上操作后,你的Lambda应该就能顺利执行DynamoDB批量写入了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:21:24