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

如何在AWS Lambda中获取客户端的CognitoAWSCredentials访问DynamoDB?

Lambda访问DynamoDB的凭证方案

一、能否获取客户端的CognitoAWSCredentials?

默认情况下做不到,而且强烈不建议尝试。客户端调用Lambda时,不会自动把自身的Cognito凭证传给Lambda执行环境。如果硬要让客户端把凭证信息(AccessKeyId、SecretKey这些敏感内容)塞进请求参数里传给Lambda,会直接暴露密钥,属于严重的安全漏洞,生产环境绝对不能这么干。

二、Lambda访问DynamoDB的正确姿势

1. Lambda执行角色(最常用、最安全)

给你的Lambda函数配置一个IAM执行角色,在角色的权限策略里添加对目标DynamoDB表的读写权限(比如dynamodb:GetItem、dynamodb:PutItem)。Lambda运行时会自动使用这个角色的临时凭证,你直接调用DynamoDB SDK就行,完全不用手动处理凭证。

示例Python代码:

import boto3

# 初始化DynamoDB资源,自动使用Lambda执行角色的凭证
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTargetTable')

def lambda_handler(event, context):
    # 示例:读取数据
    item = table.get_item(Key={'user_id': '123'})
    # 示例:写入数据
    table.put_item(Item={'user_id': '123', 'data': 'test content'})
    return {'statusCode': 200, 'body': '操作完成'}

2. 用户粒度权限控制(需隔离用户数据时)

如果需要让Lambda以当前登录用户的权限访问DynamoDB(比如用户只能看自己的数据),可以这么搞:

  • 客户端调用Lambda时,把Cognito生成的ID Token或者Access Token放在请求参数里传过来。
  • Lambda里先验证Token的有效性(用Cognito提供的公钥校验签名,确保Token没被篡改)。
  • 验证通过后,调用AWS STS的AssumeRoleWithWebIdentity接口,用用户的Cognito身份去申请对应的IAM角色临时凭证,再用这个凭证访问DynamoDB。这样能严格控制用户只能访问自己有权限的资源。

3. 基于Cognito身份池的角色联合

如果客户端已经通过Cognito身份池拿到了身份ID,也可以把这个身份ID传给Lambda,Lambda通过STS的AssumeRoleWithWebIdentity接口,基于该身份ID获取对应角色的临时凭证,再操作DynamoDB。这种方式同样能实现用户级别的权限隔离。

内容的提问来源于stack exchange,提问作者Nguyen Hoai Nam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:13