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

已配置全权限IAM角色仍无法调用DAX的BatchGetItem权限错误

解决DAX集群BatchGetItem权限报错问题

问题背景

部署DAX集群缓存DynamoDB查询后,除BatchGetItem操作外其余功能均正常运行,报错信息如下:

[ERROR] DaxServiceError: An error occurred (Unknown) when calling the BatchGetItem operation: Client does not have permission to invoke BatchGetItem

已为Lambda及DAX集群配置dynamodb:*、dax:*通配符权限,也曾尝试单独添加dax:BatchGetItem权限,均未解决问题。

DAX集群IAM角色定义:

DynamoDAXCacheClusterIamRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Statement:
            - Action:
              - sts:AssumeRole
              Effect: Allow
              Principal:
                Service:
                - dax.amazonaws.com
          Version: '2012-10-17'
        RoleName: ${file(env.yml):${opt:stage}.DAX_CLUSTER_ROLE}
        Policies:
          -
            PolicyName: ${file(env.yml):${opt:stage}.DAX_POLICY_NAME}-dax
            PolicyDocument:
              Version: '2012-10-17'
              Statement:
                - Effect: Allow
                  Resource: '*'
                  Action:
                    - 'dax:*'

          -
            PolicyName: ${file(env.yml):${opt:stage}.DAX_POLICY_NAME}-dynamo
            PolicyDocument:
              Version: '2012-10-17'
              Statement:
                - Effect: Allow
                  Resource: '*'
                  Action:
                    - 'dynamodb:*'
        ManagedPolicyArns:
          - arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole

Lambda权限策略:

- Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
        - dynamodb:BatchGetItem
      Resource: "arn:aws:dynamodb:us-east-1:*:*"
    - Effect: Allow
      Action:
        - sqs:SendMessage
        - sqs:PurgeQueue
        - sqs:ListQueues     
      Resource: "arn:aws:sqs:us-east-1:*:*"
    - Effect: "Allow"
      Action:
        - "execute-api:Invoke"
      Resource: ["arn:aws:execute-api:*:*:**/@connections/*"]
    - Effect: "Allow"
      Resource: "arn:aws:sns:us-east-1:*:*"
      Action:
        - "sns:*"
    - Effect: Allow
      Resource: "arn:aws:dax:us-east-1:*:*/*"
      Action:
        - 'dax:*'

解决思路

  • 验证DAX对BatchGetItem的支持:先确认DAX官方文档中的API支持列表,排除功能本身不支持的可能性。
  • 细化IAM权限资源范围:将Lambda中DAX权限的资源从通配符arn:aws:dax:us-east-1:*:*/*替换为具体的DAX集群ARN(格式为arn:aws:dax:us-east-1:ACCOUNT_ID:cache/CLUSTER_NAME),避免通配符格式不匹配导致的权限识别问题。
  • 绕过DAX测试原生调用:用Lambda直接调用DynamoDB的BatchGetItem接口,如果成功则问题出在DAX集群侧;如果同样报错,排查DynamoDB表的权限配置。
  • 等待IAM权限生效:IAM权限变更后可能需要5-10分钟同步,等待足够时间后重新测试。
  • 确认DAX角色的DynamoDB权限覆盖:DAX执行BatchGetItem时会通过自身IAM角色调用DynamoDB,可尝试将该角色的dynamodb:*权限替换为具体表ARN,验证是否存在资源匹配问题。
  • 检查请求参数格式:部分场景下服务会将参数错误(如表名拼写错误、主键格式不符)返回为权限错误,核对BatchGetItem的请求参数是否符合DAX和DynamoDB的要求。
  • 排查VPC安全组配置:确认Lambda所在安全组允许访问DAX集群的默认端口(8111),DAX集群安全组允许来自Lambda的入站流量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:55:23