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

配置IAM最小权限:S3读写及文件夹查看所需权限咨询

S3 IAM最小权限配置:分用户读写+个人文件夹访问

针对你的需求,下面是完全贴合最小权限原则的S3 IAM策略配置方案,覆盖读写权限的必要权限细节,以及用户个人文件夹的访问控制:

核心前提

所有策略必须严格限定到用户专属的S3路径,绝对避免全局桶权限,这是防范越权攻击的核心。我们用IAM内置变量${aws:username}自动绑定用户到自己的文件夹,不用逐个手动配置。

一、读权限:除GetObject外还需要什么?

要实现“查看个人文件夹内文件”的功能,仅GetObject是不够的:

  • 必须加s3:ListBucket:S3的“文件夹”是虚拟对象,ListBucket是获取文件列表的唯一操作。注意这个权限的资源是整个桶的ARN,但要通过Condition限定只能列出用户自己文件夹下的内容。
  • 可选:s3:HeadObject:如果需要单独获取文件元数据(比如大小、修改时间),可以加上,但GetObject已经包含下载时的元数据返回,按需添加即可。

二、写权限:除PutObject外还需要什么?

根据实际需求补充:

  • 如果需要覆盖/删除自己的文件:加s3:DeleteObject(非强制,按需开启)。
  • 如果需要修改文件元数据/标签:加s3:PutObjectTagging或s3:PutObjectAcl(仅当业务需要时添加)。
  • 同样需要s3:ListBucket:用户上传后要查看自己的文件列表,还是需要这个权限(和读权限的Condition配置一致)。

三、实操策略示例

假设你的S3桶名为my-app-storage,用户个人文件夹路径为user-data/${aws:username}/:

只读权限策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::my-app-storage",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "user-data/${aws:username}/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-app-storage/user-data/${aws:username}/*"
        }
    ]
}

说明:ListBucket通过Condition限定只能查看自己文件夹下的内容,GetObject直接锁定到用户专属路径,完全符合最小权限。

读写权限策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::my-app-storage",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "user-data/${aws:username}/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Actions": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::my-app-storage/user-data/${aws:username}/*"
        }
    ]
}

说明:新增了PutObject(上传)和DeleteObject(删除),同样严格限定在用户个人路径内。

四、关键注意事项

  • 永远不要给用户配置arn:aws:s3:::my-app-storage/*这种全局权限,所有操作必须锁定到具体路径。
  • 用IAM Access Analyzer验证策略,检查是否存在过度授权的情况。
  • 如果应用使用IAM角色而非独立用户,可将${aws:username}替换为${aws:userid}或其他匹配角色身份的变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:51:16