我创建了一个策略,允许访问我的帐户中的单个 S3 存储桶。然后,我创建了一个仅包含此策略的组和一个属于该组的用户。
用户可以按预期查看、删除文件并将文件上传到存储桶。然而,用户似乎无法授予对上传文件的公共读取权限.
当。。。的时候授予对此对象的公共读取访问权限选择选项后,上传失败。
该存储桶托管一个静态网站,我希望允许前端开发人员上传文件并将其公开。
用户角色的策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::my-bucket"
},
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
This is what happens when the IAM user tries to grant public access to the uploaded file:
代理错误似乎无关,但本质上上传被卡住并且没有任何反应。如果他们不选择授予公共访问权限选项,上传会立即完成(尽管也会显示代理错误)。
为了重现您的情况,我执行了以下操作:
- 创建了一个新的亚马逊 S3 存储桶使用默认设置(阻止公共访问 = 开)
- 创建了一个IAM User(不附政策)
- 创建了一个IAM集团(不附政策)
- 将 IAM 用户添加到 IAM 组
- 将您的策略(来自问题)附加到 IAM 组(更新存储桶名称)作为内嵌策略
- 以新 IAM 用户身份登录 Amazon S3 管理控制台
此时,用户收到一条Access Denied
错误,因为他们无权列出所有 Amazon S3 存储桶。因此,控制台无法使用。
相反,我运行了以下 AWS CLI 命令:
aws s3 cp foo.txt s3://new-bucket/ --acl public-read
结果是:
调用 PutObject 操作时发生错误 (AccessDenied):访问被拒绝
然而,操作成功了:
aws s3 cp foo.txt s3://new-bucket/
这意味着--acl
是被拒绝的组件。
然后我去了阻止公共访问并关闭名为“阻止对通过新访问控制列表 (ACL) 授予的存储桶和对象的公共访问”的选项。我的设置是:
然后我再次运行这个命令:
aws s3 cp foo.txt s3://new-bucket/ --acl public-read
有效!
为了验证这一点,我回到阻止公共访问并打开所有选项(通过顶部复选框)。我重新运行命令,结果是拒绝访问 again, 确认原因是阻止公共访问设置.
底线:关闭第一个阻止公共访问设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)