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

创建限制公共访问、仅允许Cognito用户上传的S3桶政策

解决方案:给你的S3桶配置符合需求的权限策略

首先得确认你的S3桶公共访问阻止设置已经完全拉满——就是那四个选项全开启:阻止新的公共ACL、阻止公共ACL、阻止公共桶策略、限制公共桶策略,这是兜底的基础,确保没有任何漏网的公共访问途径。

回头看你现在的桶策略,有几个地方不符合你的需求:

  • 把未授权用户的角色Cognito_katebUnauth_Role也加进去了,这等于允许没注册的人也能碰桶,得去掉
  • 还包含了transcribe-role-k5easa7b这个转录服务角色,如果你的需求里不需要这个角色访问桶,直接删掉就行
  • 给了s3:*全权限,太宽泛了,咱们只需要上传相关的操作就够

下面是改好的策略,精准控制只有Cognito授权用户能上传,同时彻底封死公共访问:

{
  "Version": "2012-10-17",
  "Id": "RestrictToCognitoAuthUsers",
  "Statement": [
    {
      "Sid": "AllowCognitoAuthUsersUpload",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::358110801253:role/Cognito_katebAuth_Role"
      },
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"  // 要是你的应用不需要设置对象ACL,直接删掉这行就行
      ],
      "Resource": "arn:aws:s3:::va-raw-audio-to-transcribe/*"
    },
    {
      "Sid": "DenyPublicAccess",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::va-raw-audio-to-transcribe",
        "arn:aws:s3:::va-raw-audio-to-transcribe/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"  // 可选:强制所有请求用HTTPS,更安全
        }
      }
    }
  ]
}

为啥这么改?给你掰扯清楚:

  • AllowCognitoAuthUsersUpload 这一段:只给Cognito授权用户的角色开了上传对象的权限(s3:PutObject),而且权限范围只限定在桶里的文件(/*),桶本身的权限没给,避免不必要的风险。
  • DenyPublicAccess 这一段:直接拒绝所有人的所有S3操作,但因为针对Cognito_katebAuth_Role的Allow规则优先级会覆盖这个Deny,所以授权用户还是能正常上传。加的aws:SecureTransport条件是额外的安全层,确保所有请求都是加密的HTTPS。

额外提醒:

  • 要是你还需要那个转录角色访问桶(比如要读取音频文件做转录),就在Allow语句的Principal里加上arn:aws:iam::358110801253:role/service-role/transcribe-role-k5easa7b,然后把Action改成需要的,比如s3:GetObject。
  • 别忘了检查你的Cognito身份池配置,确保授权用户能拿到Cognito_katebAuth_Role的临时凭证,应用代码里也得用这些凭证来访问S3才行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:07:42