如何允许授予对上传到 AWS S3 的对象的公共读取访问权限?

2023-12-22

我创建了一个策略,允许访问我的帐户中的单个 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: enter image description here

代理错误似乎无关,但本质上上传被卡住并且没有任何反应。如果他们不选择授予公共访问权限选项,上传会立即完成(尽管也会显示代理错误)。


为了重现您的情况,我执行了以下操作:

  • 创建了一个新的亚马逊 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(使用前将#替换为@)

如何允许授予对上传到 AWS S3 的对象的公共读取访问权限? 的相关文章

随机推荐