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

如何获取Amazon Cognito Identity ID 重构Amplify Storage的S3文件路径

解答

获取user_identity_id(Cognito Identity ID)的方法

首先明确:Cognito身份池本身不提供「用户标识-Identity ID」的反向查询、批量查询接口,所有查询逻辑都要结合你自身的业务存储实现:

  • 获取当前认证用户的ID:只要用户通过Cognito完成身份认证,就可以直接从认证返回的凭证中取到该值。在Python等脚本场景下,可以直接通过boto3调用接口获取,示例代码:
import boto3

cognito_id_client = boto3.client('cognito-identity', region_name='<身份池所属区域>')
resp = cognito_id_client.get_id(
    IdentityPoolId='<你的Cognito身份池ID>',
    Logins={
        '<Cognito用户池提供商标识>': '<当前用户的有效ID Token>'
    }
)
current_identity_id = resp['IdentityId']
  • 获取指定用户的ID:需要在用户首次登录应用、首次获取到自身Identity ID时,将业务侧的用户唯一标识(比如Cognito用户池Sub、业务系统用户ID)和对应的user_identity_id写入自己的业务数据库(如DynamoDB、关系型数据库),后续需要查询指定用户的ID时,直接查库读取映射即可,没有原生接口可直接反查。
  • 获取全量用户的ID:同样依赖上述业务库存储的映射关系做全量查询。如果前期没有做映射落库,只能通过遍历S3桶内protected/、private/前缀下的对象路径,从路径片段中提取所有出现过的user_identity_id,但该方法无法覆盖从未访问过存储资源的用户。

非Amplify场景重构Storage.put的S3存储路径

Amplify Storage的S3路径规则是固定的,只要对齐规则拼接就能和前端Storage.put上传的路径完全一致,默认无自定义前缀的规则如下:

  • 公开权限(level: public)文件路径:public/<上传时传入的对象key>
  • 受保护权限(level: protected)文件路径:protected/<所属用户的user_identity_id>/<上传时传入的对象key>
  • 私有权限(level: private)文件路径:private/<所属用户的user_identity_id>/<上传时传入的对象key>

举个实际示例:如果前端调用Storage.put('doc/note.pdf', file, {level: 'private'})时,操作用户的user_identity_id为us-east-1:123e4567-e89b-12d3-a456-426614174000,那该文件在S3中的完整对象Key就是private/us-east-1:123e4567-e89b-12d3-a456-426614174000/doc/note.pdf。

在Python notebook等非Amplify场景下,你只需要提前拿到操作用户的user_identity_id,按照上述规则拼接出完整S3对象Key,再通过boto3等S3 SDK上传即可。

注意:如果你在Amplify项目中给Storage配置了自定义根路径前缀,需要在上述所有路径的最前面拼接该自定义前缀,前缀值可以在项目的Amplify配置文件的Storage模块中查到。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:01:10