如何为AWS IAM用户配置指定S3文件夹的专属操作权限并验证策略有效性
权限配置的位置选择
- 权限既可以在IAM侧绑定给用户/用户组,也可以通过S3桶的资源策略完成配置,生产场景下优先在IAM侧配置,全程不需要修改S3桶的访问权限开关,可避免误操作触发桶的公共访问风险。
- 无需从托管S3策略里逐条挑选读写条目,用自定义策略精确匹配权限范围即可,不需要引入冗余的全桶访问权限。
现有自定义策略的不匹配问题
- 完全不支持登录AWS控制台:现有策略未配置任何控制台基础访问权限,用户无法通过IAM账号登录控制台,更无法跳转进入S3控制台。
- 资源范围配置错误:
s3:ListBucket的合法适用资源是桶本身的ARN(不带/*后缀的arn:aws:s3:::static.XXXXXX.com),当前将该动作绑定到带/*的对象路径资源上,会直接导致列取文件列表的权限失效,用户进入S3控制台后无法加载文件列表。 - 缺少必需的操作权限:
- 未配置
s3:GetObject权限,无法实现目标文件夹内文件的读取、下载操作 - 缺少S3控制台加载依赖的基础权限:
s3:ListAllMyBuckets(用于在控制台展示当前用户有权限的桶列表)、s3:GetBucketLocation(用于控制台获取桶的所在区域信息),缺少这两个权限时控制台会直接返回权限拒绝错误
- 未配置
- MFA条件逻辑失效:使用
BoolIfExists判断时,如果请求不携带MFA相关参数(比如日常命令行调用、控制台默认请求逻辑),条件会直接判定为通过,根本无法实现强制多因素认证的管控效果。
修正后的可用策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ConsoleBasicAccess", "Effect": "Allow", "Action": [ "iam:GetUser", "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource": "*" }, { "Sid": "ListTargetFolder", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::static.XXXXXX.com", "Condition": { "StringLike": { "s3:prefix": [ "images/carousel/", "images/carousel/*" ] } } }, { "Sid": "TargetObjectOperations", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::static.XXXXXX.com/images/carousel/*" } ] }
配置验证要点
- 使用对应IAM用户登录控制台,确认能在S3的桶列表中看到目标存储桶
- 进入桶内
images/carousel/路径,验证是否能正常执行文件上传、下载、删除操作 - 检查是否无法访问同桶下
images/carousel/路径之外的其他文件,确认权限没有越界
提示:如果业务不需要强制多因素认证,可直接移除原有策略中的MFA判断逻辑;如果需要强制MFA,将条件判断从
BoolIfExists调整为Bool类型即可生效。
内容的提问来源于stack exchange,提问作者pmiranda
相关产品推荐
相关产品推荐

