Google 创建的云存储桶没有可用的 ACL,因此无法更新

Google Cloud Storage Bucket created with no ACL available so can't update

我正在通过 JSON API 创建一个 Google 云存储桶。

我可以很好地创建它,但是当我查询它的元数据时,我看不到任何指定的 ACL,尽管请求了 "full" 访问权限。通过 UI 创建的另一个存储桶我可以看到所有 ACL。

我需要查看 ACL 以更新存储桶,必填字段是存储桶 ACL,我不太明白为什么需要它,但是没有相同的存储桶提供其 ACL 数据,这意味着我不能更新我创建的存储桶。

我假设我在创建存储桶后拥有对存储桶的完全写入权限,并尝试使用和不使用预定义的 Acl 创建它。

为什么我看不到新存储桶上的 ACL,我是否遗漏了什么?

存储桶的创建者始终是该存储桶的所有者,并且存储桶的所有者始终可以看到该存储桶的 ACL。也就是说,ACL 不是对 storage.objects.get 调用的默认响应的一部分。尝试传入 URL 查询参数 "projection=full",这将导致包含 ACL。

"update" 调用始终设置存储桶元数据的绝对、完整状态,包括 ACL 和其他所有内容。如果您只想修改存储桶的某些 属性,则 "patch" 调用可能就是您想要使用的。

没有返回 ACL,因为它不存在于存储桶中。但是要进行更新,您只需将一个空列表传递给 PATCH 方法即可,即使仍然需要 acl 字段,它也会起作用:

PUT https://www.googleapis.com/storage/v1/b/blahblahblxxxxlifecycle?key={YOUR_API_KEY}


{
 "acl": [
 ],
 "kind": "storage#bucket",
 "id": "blahblahblxxxxlifecycle",
 "selfLink": "https://www.googleapis.com/storage/v1/b/blahblahblahffflifecycle",
 "projectNumber": "1080525199262",
 "name": "blahblahblxxxxlifecycle",
 "timeCreated": "2016-09-09T21:20:56.490Z",
 "updated": "2016-09-09T21:20:56.490Z",
 "metageneration": "1",
 "location": "US",
 "versioning": {
  "enabled": true
 },
 "storageClass": "STANDARD",
 "etag": "CAE="
}