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

如何通过Cognito身份池配置S3策略实现用户私有文件夹访问及报错修复

问题分析与解决方案

错误根源

你混淆了IAM角色策略和S3桶策略的用途:

  • S3桶策略是资源级策略,仅能配置与S3相关的操作,且必须明确指定Principal(允许访问的实体);
  • 你添加的mobileanalytics:PutEvents、cognito-sync:*、execute-api:Invoke等操作不属于S3范畴,因此被拒绝;
  • 桶策略无法直接使用${cognito-identity.amazonaws.com:sub}变量,需通过Condition匹配用户身份ID;
  • 非S3资源的ARN(比如execute-api的ARN)不能出现在S3桶策略中。

正确的S3桶策略

这个策略会允许Cognito身份池的已认证用户角色访问桶内private/${cognito-identity.amazonaws.com:sub}/路径下的对象,且仅能访问自己的子目录:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::你的AWS账户ID:role/Cognito_你的身份池名称Auth_Role"
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::uploads-api-attachmentBucket-123456789/private/${cognito-identity.amazonaws.com:sub}/*",
      "Condition": {
        "StringEquals": {
          "s3:prefix": "private/${cognito-identity.amazonaws.com:sub}/"
        }
      }
    }
  ]
}

配套的IAM身份池角色策略

你需要同时给Cognito身份池的已认证用户角色配置以下IAM策略,用来授权用户执行对应的S3操作(注意替换占位符):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::uploads-api-attachmentBucket-123456789/private/${cognito-identity.amazonaws.com:sub}/*"
    }
  ]
}

注意事项

  • 替换策略中的你的AWS账户ID、Cognito_你的身份池名称Auth_Role为实际的资源信息;
  • 避免使用s3:*这样的全权限操作,仅授予业务需要的最小权限;
  • 如果你使用AWS Amplify,确保Amplify配置文件正确关联Cognito身份池和S3桶,Amplify会自动处理部分权限映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:17:34