我创建了一个策略,该策略允许访问我帐户中的单个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/*"
}
]
}
当IAM用户尝试授予对上载文件的公共访问权限时,会发生以下情况:
代理错误似乎无关,但本质上是上传卡住了,什么也没发生。如果他们没有选择Grant public access选项,则上传会立即进行(尽管也会显示代理错误)。
为了重现您的情况,我执行了以下操作:
[此时,用户收到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
是被拒绝的组件。
然后我去Block Public Access
获取存储桶,并关闭了名为“阻止对通过新访问控制列表(ACL)授予的存储桶和对象的公共访问”的选项。我的设置是:<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9nVUVtWS5wbmcifQ==” alt =“阻止公共访问”>
然后我再次运行此命令:
aws s3 cp foo.txt s3://new-bucket/ --acl public-read
成功了!
为了验证这一点,我回到了阻止公共访问
,并打开了所有选项(通过顶部的复选框)。我重新运行了命令,它再次是Access Denied,[[确认原因是阻止公共访问设置。底线:
关闭第一个“阻止公共访问”设置。