Google 上传期间设置文件可见性时出现云存储权限错误
Google Cloud Storage permission error while setting file visibility during upload
我正在尝试使用 Laravel GCS wrapper 将图像上传到 GCS。我希望上传的每张图片都对任何人可见。我已将我的存储桶权限设置为对任何人都可读写。
如果我喜欢这个,它可以完美地工作,但图像不是 public:
Storage::disk('gcs')->put($location, $image);
但是,如果这样做,应该上传图片并制作它 public,它会抛出错误
403 Insufficient Permission
Storage::disk('gcs')->setVisibility($filename, 'public')->put($location, $image);
所以 ->setVisibility()
给我错误。
谁能解释一下为什么?是关于代码还是关于存储桶权限?
当您说 "I've set my bucket permissions as read and write to anyone." 时,我怀疑您的意思是您已在旧存储桶 ACL 上授予 allUsers:WRITER/allUsers:READER。
旧版 ACL API 不支持在存储桶级别授予对象级别权限。因此bucket上的allUsers:READER只授予object list权限,不授予object get权限。相反,您需要更改 default_object_acl 以授予对存储桶中创建的新对象的权限。
但是,与其使用旧版 ACL API,您可能更愿意使用 IAM 来授予您想要的权限,因为这些权限将由存储桶中的所有对象继承,而不是设置在创建时的单个对象。
gsutil iam ch allUsers:objectViewer gs://ex-bucket
我正在尝试使用 Laravel GCS wrapper 将图像上传到 GCS。我希望上传的每张图片都对任何人可见。我已将我的存储桶权限设置为对任何人都可读写。
如果我喜欢这个,它可以完美地工作,但图像不是 public:
Storage::disk('gcs')->put($location, $image);
但是,如果这样做,应该上传图片并制作它 public,它会抛出错误
403 Insufficient Permission
Storage::disk('gcs')->setVisibility($filename, 'public')->put($location, $image);
所以 ->setVisibility()
给我错误。
谁能解释一下为什么?是关于代码还是关于存储桶权限?
当您说 "I've set my bucket permissions as read and write to anyone." 时,我怀疑您的意思是您已在旧存储桶 ACL 上授予 allUsers:WRITER/allUsers:READER。
旧版 ACL API 不支持在存储桶级别授予对象级别权限。因此bucket上的allUsers:READER只授予object list权限,不授予object get权限。相反,您需要更改 default_object_acl 以授予对存储桶中创建的新对象的权限。
但是,与其使用旧版 ACL API,您可能更愿意使用 IAM 来授予您想要的权限,因为这些权限将由存储桶中的所有对象继承,而不是设置在创建时的单个对象。
gsutil iam ch allUsers:objectViewer gs://ex-bucket