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

如何通过AWS STS AssumeRole会话策略隐藏指定文件夹?

问题翻译

我创建了带有仅列出特定文件夹策略的STS AssumeRole会话令牌,但如何隐藏无访问权限的其余文件夹?

示例:
假设我有AWS S3对象路径s3://<bucketName>/folder1/{files…}和s3://<bucketName>/folder2/{files…}

我生成的STS令牌包含Action(即S3:List*)和Condition过滤策略(即"StringEquals" : "folder1/*")

在我的应用中使用上述生成的STS会话令牌调用AWS SDK(Javascript),当尝试列出根路径(s3://<bucketName>/)下的对象时,响应同时返回folder1/和folder2/。

如何基于当前STS会话策略隐藏folder2/?(注意:尽管已限制进入folder2/的列表权限,我仍不希望SDK在前端显示folder2/。)


解决方法

问题出在STS策略的配置逻辑上,当前的条件过滤没有对桶根目录的列表操作做精准限制,导致S3返回了所有根前缀。要让无权限的文件夹直接从服务端响应中消失,需要调整策略的资源和条件规则:

正确的STS AssumeRole策略配置

替换原有策略为以下配置,让S3服务端直接过滤掉无权限的前缀:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::<bucketName>",
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "",
            "folder1/",
            "folder1/*"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:List*",
        "s3:Get*"
      ],
      "Resource": "arn:aws:s3:::<bucketName>/folder1/*"
    }
  ]
}

策略逻辑说明

  • 第一条声明针对桶级列表操作(s3:ListBucket):
    • 通过s3:prefix条件限制,允许根目录列表但仅返回匹配folder1/的前缀
    • 同时授权对folder1/及其子路径的列表权限
  • 第二条声明授权对folder1/*路径下对象的具体列表、读取操作

原有策略无效的原因

你之前的策略只限制了folder1/*路径的操作权限,但未对桶根目录的ListBucket操作添加前缀过滤。S3默认会返回根目录下所有前缀(包括folder2/),仅在尝试访问无权限路径时才会拒绝请求。通过给ListBucket添加s3:prefix条件,S3服务端会直接在响应中过滤不符合条件的前缀,不会让folder2/出现在SDK的返回结果里。

验证效果

使用修改后的STS令牌调用AWS SDK的listObjectsV2方法(推荐使用V2版本),指定目标桶后,返回的CommonPrefixes或Contents集合中只会包含folder1/相关内容,folder2/会被服务端直接过滤。


内容的提问来源于stack exchange,提问作者ǨÅVËĔŊ RĀǞĴĄŅ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:35:26