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

如何授权所有用户访问DynamoDB的GSI(以userIndex为例)

问题排查与解决方案

核心逻辑区分

首先明确两类权限的本质差异:

  • 前端用户直接访问DynamoDB(如通过Amplify、API Gateway集成):依赖Cognito用户池的授权策略(即你提到的AuthStack配置)。
  • Lambda服务端发起DynamoDB请求:依赖Lambda执行角色的IAM权限,和AuthStack的用户授权配置完全无关。

针对GSI(userIndex)授权无效的排查步骤

1. 检查Lambda执行角色的IAM权限(若为Lambda调用GSI)

如果是Lambda需要访问GSI,确认其执行角色的权限策略是否包含GSI的资源路径:

{
    "Effect": "Allow",
    "Action": [
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:GetItem"
        // 根据实际业务需求添加操作
    ],
    "Resource": [
        "arn:aws:dynamodb:你的区域:账号ID:table/你的表名",
        "arn:aws:dynamodb:你的区域:账号ID:table/你的表名/index/userIndex"
    ]
}

注意:GSI必须单独指定ARN,仅配置表的ARN不会自动覆盖索引权限。

2. 检查Cognito用户授权策略(若为前端用户访问GSI)

如果是前端用户通过授权访问GSI,确认AuthStack中的用户池授权策略是否明确包含GSI资源:

{
    "Effect": "Allow",
    "Action": [
        "dynamodb:Query"
        // 前端常用操作,按需添加
    ],
    "Resource": [
        "arn:aws:dynamodb:你的区域:账号ID:table/你的表名/index/userIndex"
    ],
    "Condition": {
        // 按需添加业务条件,比如限制用户仅访问自身数据
        "ForAllValues:StringEquals": {
            "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"]
        }
    }
}

主索引的授权若仅指定表ARN会自动生效,但GSI必须单独配置索引ARN。

3. 验证DynamoDB表的资源策略

如果表本身附加了IAM资源策略,确认该策略未拒绝针对GSI的访问请求,确保允许对应主体(Lambda角色或Cognito身份)访问GSI资源。

4. 确认请求参数正确性

  • 若为GSI查询请求,检查是否正确指定了IndexName为userIndex。
  • 若为写入操作,确认写入数据包含GSI的分区键(及排序键,若有),否则GSI不会同步数据,易被误判为授权无效。

关键误区提示

Lambda调用DynamoDB时,使用的是自身的执行角色身份,而非Cognito用户身份,因此修改AuthStack的用户授权配置对Lambda的请求完全没有作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:01:28