本实验旨在通过 AWS 管理控制台为 Amazon S3 存储桶中的对象配置访问控制列表(ACL),验证不同用户或服务对 S3 存储桶对象的访问权限。实验将模拟多角色场景(如所有者、匿名用户、其他 AWS 账户),测试对象级别的读写权限是否按 ACL 策略生效,帮助理解 S3 对象 ACL 的精细化权限管理机制。
Amazon S3 的 ACL(Access Control List)是一种基于对象的权限控制方式,允许用户为单个对象定义读(READ)和写(WRITE)权限。
ACL 可授权给以下两类主体:
预定义组:如所有用户(http://acs.amazonaws.com/groups/global/AllUsers,即匿名公开访问)。
AWS 账户:通过 Canonical ID 或 ARN 指定其他账户的用户或角色。
ACL 与存储桶策略(Bucket Policy)的区别:
作用范围:ACL 仅控制单个对象的权限,而存储桶策略可管理整个存储桶或前缀路径的权限。
权限粒度:ACL 仅支持基础读写权限,存储桶策略支持更复杂的条件(如 IP 限制、时间窗口)。
优先级:当对象 ACL 与存储桶策略冲突时,拒绝(Deny)规则优先,其次为显式允许(Allow)。
步骤一:准备实验环境
登录 AWS 控制台,导航至 S3 服务,创建一个新存储桶(如 acl-experiment-bucket-2024),保持默认配置。
上传一个测试对象(如 test.txt 文件)至存储桶。
步骤二:配置对象 ACL
在存储桶中找到 test.txt,点击右侧权限选项卡,选择访问控制列表。
添加新权限:
场景 1:允许匿名用户读取对象
在 Grantee 输入 http://acs.amazonaws.com/groups/global/AllUsers,勾选 Read 权限。
场景 2:授权另一个 AWS 账户写入对象
输入目标账户的 Canonical ID(可在目标账户的 IAM 控制台获取),勾选 Write 权限。
保存 ACL 配置。
步骤三:对比存储桶策略(可选)
若需测试优先级,可在存储桶的 权限 > 存储桶策略 中添加一条拒绝匿名读写的策略(示例如下):
json { "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::acl-experiment-bucket-2024/test.txt" }] }
1. 测试匿名读取权限
在浏览器中直接访问 test.txt 的公开 URL
例如:https://acl-experiment-bucket-2024.s3.amazonaws.com/test.txt
预期结果:
若仅 ACL 允许匿名读且无存储桶策略拒绝,页面应显示文件内容。
若存储桶策略显式拒绝匿名访问,则返回 403 Forbidden。
2. 测试跨账户写入权限
使用被授权的 AWS 账户,通过 AWS CLI 或控制台尝试上传文件至 acl-experiment-bucket-2024/test.txt。
预期结果:
若 ACL 授予写入权限且无存储桶策略阻止,上传成功。
若存储桶策略拒绝跨账户写入,则操作失败。
3. 检查 ACL 记录
返回对象的 访问控制列表 页面,确认权限列表与配置一致,验证主体和权限类型是否正确。
通过本实验,可直观理解 S3 对象 ACL 的权限分配逻辑,并掌握如何结合存储桶策略实现多层级访问控制,满足企业级数据安全需求。