如何为特定用户授予私有S3存储桶内指定文件的访问权限
S3私有存储桶向特定用户授予部分对象访问权限的实现方案
根据授权对象的不同,可选择以下对应方案:
场景1:授权对象为同一AWS账号下的IAM用户
两种实现方式可选:
- 方式1:给目标IAM用户附加权限策略
直接在IAM控制台找到对应用户,新增权限策略即可,无需修改存储桶配置,参考策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::你的存储桶名称", "Condition": { "StringLike": { "s3:prefix": ["允许访问的前缀/*", "允许访问的前缀"] } } }, { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::你的存储桶名称/允许访问的前缀/*" } ] }
- 方式2:配置S3桶策略
在S3控制台的存储桶「权限」tab下找到桶策略配置项,填入对应策略即可,无需修改IAM用户的原有权限配置,参考策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的AWS账号ID:user/目标用户名" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::你的存储桶名称", "Condition": { "StringLike": { "s3:prefix": ["允许访问的前缀/*", "允许访问的前缀"] } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的AWS账号ID:user/目标用户名" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::你的存储桶名称/允许访问的前缀/*" } ] }
场景2:授权对象为其他AWS账号下的用户/身份
直接使用上述桶策略方案即可,将策略中Principal字段的ARN替换为目标用户/角色的对应ARN即可,注意目标账号侧也需要给对应用户放开对应S3操作的权限,才可以正常访问资源。
场景3:授权对象为无AWS账号的外部用户
使用预签名URL即可,你可以通过AWS CLI、SDK生成指定对象的临时访问链接,持有链接的所有人都可以在有效期内访问对应对象,无需拥有AWS身份。
参考CLI命令:aws s3 presign s3://存储桶名称/对象路径 --expires-in 3600
上述命令可生成有效期为1小时的访问链接,使用永久IAM密钥生成时最长可设置7天有效期,使用临时安全凭证生成时有效期不超过凭证本身的有效期。
注意事项
- 所有权限配置遵循最小权限原则,仅授予必要的操作权限,不要随意放开
s3:*类的全量权限 - 如果不需要用户列出存储桶内的对象,可以直接删除
s3:ListBucket相关的配置项 - 不推荐使用对象级ACL做权限管控,目前AWS官方优先推荐使用IAM策略、桶策略做统一权限管理,避免出现权限配置冲突
内容的提问来源于stack exchange,提问作者Hacker
相关产品推荐
相关产品推荐

