如何更新AWS S3对象的ACL访问权限?

时间:2019-10-11 11:24:49

标签: go amazon-s3

我已在具有“公共”访问权限的AWS S3存储桶中插入了对象。我想更新此对象,使其在某些拒绝工作流程中具有“私有”访问权限。

在下面尝试过并且可以很好地执行,但是仍然可以访问文件。

func updateAccessPolicyForObject(filename string, folder string, awsAccess string) (bool, error) {
    _, err := bigS3.PutObjectAclRequest(&s3.PutObjectAclInput{
        ACL:    aws.String("private"),
        Bucket: aws.String(bucket),
        Key:    aws.String(folder + filename),
    })

    if err != nil {
        return false, fmt.Errorf("Error updating acl of an object: %v", err)
    }
    return true, nil
}

预期输出是::文件应不可访问。

1 个答案:

答案 0 :(得分:0)

我不是Go使用者,因此我尝试通过AWS CLI重现您的情况:

  • 将文件上传到没有 没有存储桶策略的Amazon S3存储桶
  • 尝试通过匿名URL(例如https://my-bucket.s3-ap-southeast-2.amazonaws.com/foo)访问文件:访问被拒绝
  • 运行此命令:
aws s3api put-object-acl --bucket my-bucket --key foo --acl public-read
  • 尝试通过匿名URL访问文件:成功
  • 运行此命令:
aws s3api put-object-acl --bucket my-bucket --key foo --acl private
  • 尝试通过匿名URL访问文件:拒绝访问

因此,您描述的方法应该能够再次将该对象设为私有。因此,要么ACL更新没有执行,要么其他方法授予了对该对象的访问权限(例如存储桶策略)。