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

问题描述 投票:0回答:2

我创建了一个策略,该策略允许访问我帐户中的单个S3存储桶。然后,我创建了一个仅具有此策略的组,并且该组中包含一个用户。

用户可以按预期查看,删除文件并将其上传到存储桶。但是,用户似乎无法授予公众对上载文件的读取权限

enter image description here

选择授予对此对象的公共公共访问权限选项时,上传失败。

存储桶托管着一个静态网站,我希望前端开发人员可以上传文件并将其公开。

用户角色的策略如下:

{
"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用户尝试授予对上载文件的公共访问权限时,会发生以下情况:enter image description here

代理错误似乎无关,但本质上是上传卡住了,什么也没发生。如果他们没有选择Grant public access选项,则上传会立即进行(尽管也会显示代理错误)。

amazon-web-services amazon-s3 amazon-iam public policy
2个回答
0
投票

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

  • 使用默认设置(阻止公共访问=开)创建了新的Amazon S3存储桶
  • 创建了一个IAM用户(未附加策略)
  • 创建了一个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是被拒绝的组件。

然后我去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,[[确认原因是阻止公共访问设置

底线:

关闭第一个“阻止公共访问”设置。

0
投票
您可以通过AWS CLI更新对象的ACL进行操作
© www.soinside.com 2019 - 2024. All rights reserved.