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

DynamoDB结合用户组实现AWS Amplify应用细粒度访问控制咨询

问题解答

你的理解存在偏差:AWS DynamoDB的细粒度访问控制(FGAC)并没有强制要求主键必须为user_id,只要你能在IAM策略/Amplify的授权规则中匹配到请求者的用户组属性和DynamoDB主键的值即可实现需求。

具体实现方案

方案1:基于Amplify GraphQL API的授权规则(最便捷,适用于Amplify GraphQL对接DynamoDB的场景)

  • 如果你是通过Amplify的GraphQL API自动生成DynamoDB表和resolvers,直接在模型的@model指令后配置@auth规则即可,示例规则如下:
type GroupData @model @auth(rules: [
  { allow: groups, groupsField: "user group", operations: [read] }
]) {
  "user group": ID! @primaryKey
  # 其他组相关存储字段
}
  • 这个规则会自动校验当前登录用户的Cognito用户组列表,是否和该条数据主键user group的值匹配,只有匹配的用户才有权限读取对应数据。

方案2:基于DynamoDB IAM细粒度访问策略(适用于Amplify REST API或者直接调用DynamoDB的场景)

  • 你可以直接为登录用户关联的IAM角色添加如下DynamoDB访问策略,通过${cognito-identity.amazonaws.com:groups}动态变量匹配主键值:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["dynamodb:GetItem", "dynamodb:Query"],
      "Resource": "arn:aws:dynamodb:<你的区域>:<你的账号ID>:table/<你的表名>",
      "Condition": {
        "ForAllValues:StringEquals": {
          "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:groups}"]
        }
      }
    }
  ]
}
  • 注意如果用户可能属于多个用户组,你需要把ForAllValues调整为ForAnyValue,匹配任意一个用户组对应的数据即可。

方案3:自定义Resolver校验(兜底通用方案)

  • 如果以上两种方式不符合你的业务逻辑,你可以给Amplify API添加自定义resolver,在请求resolver中手动获取当前登录用户的用户组,然后拼接DynamoDB查询条件,仅返回对应用户组的结果,从代码层面做权限拦截。

内容的提问来源于stack exchange,提问作者Francesco-Gastone Ferrara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:36:03