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

如何通过Cognito身份池角色配置S3权限实现用户仅访问个人专属目录

S3结合Cognito用户专属目录权限配置方案

1. 确认Cognito身份池的角色关联配置

  • 首先确保你的Cognito身份池的已认证用户角色关联正确,用户登录后获取的临时凭证默认关联该角色,所有权限规则优先配置在这个角色的权限策略中,无需额外在S3桶策略里重复配置(除非你需要限制更细的全局规则)
  • 必须在Cognito身份池的「身份验证提供者」配置中,开启使用默认角色,或者配置对应的角色映射规则,确保用户能正确拿到你创建的角色的临时凭证
  • 如果你的场景仅允许已登录用户访问,不要给未认证用户角色配置任何S3相关权限

2. 修正角色权限策略的关键配置

多数配置错误都是因为变量占位符写错,你可以直接用下面的策略模板替换你当前角色的权限策略,注意替换占位符:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::你的桶名称/${cognito-identity.amazonaws.com:sub}/*",
                "arn:aws:s3:::你的桶名称"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": ["${cognito-identity.amazonaws.com:sub}/", ""]
                }
            }
        }
    ]
}
  • 这里的${cognito-identity.amazonaws.com:sub}就是Cognito为每个已认证用户生成的唯一身份ID,会自动和用户的专属目录名匹配,无需手动给每个用户创建规则
  • ListBucket权限要额外加桶根路径的资源,同时用Condition限制只能查询自己目录下的对象,避免用户遍历整个桶的内容

3. 排查S3桶的额外限制

  • 确认你的S3桶没有开启「阻止所有公共访问」之外的额外限制规则,如果桶本身有拒绝类的桶策略,优先级会高于角色权限,会直接拦截合法请求
  • 确认你上传文件的时候,路径前缀完全匹配用户的Cognito身份ID,比如用户ID是us-east-1:xxxx-xxxx-xxxx,那上传路径必须是s3://你的桶名/us-east-1:xxxx-xxxx-xxxx/文件名,前缀多一个字符少一个字符都会触发权限拒绝

4. 权限验证方式

可以先在IAM政策模拟器里选择你创建的Cognito角色,模拟s3:PutObject操作,资源填你测试用户的对应路径,看是否允许,能快速定位是策略配置错误还是前端请求的路径错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:02