【发布时间】:2021-01-06 09:36:12
【问题描述】:
我正在以编程方式创建一个存储桶,如下所示:
String bucketName = UUID.randomUUID().toString();
List<Acl> aclList = new ArrayList<>();
if (gcsBucketEntity.isPublic()) {
Acl publicAccessAcl = Acl.newBuilder(Acl.User.ofAllUsers(), Acl.Role.READER).build();
aclList.add(publicAccessAcl);
}
BucketInfo bucketInfo = BucketInfo
.newBuilder(bucketName)
.setLocation(gcsBucketEntity.getLocation()) // Multi-regions
.setStorageClass(valueOfStrict(gcsBucketEntity.getStorageType().toString()))
.setAcl(aclList)
.build();
Bucket bucket = this.storage.create(bucketInfo);
我也尝试过设置BucketTargetOption:
Storage.BucketTargetOption bucketTargetOption = Storage.BucketTargetOption
.predefinedAcl(Storage.PredefinedAcl.PUBLIC_READ);
Bucket bucket = this.storage.create(bucketInfo, bucketTargetOption);
结果完全相同。
存储桶已创建,在 GCP 控制台中我可以看到访问权限是公开的。
但是,我无法访问任何文件,而是收到 AccessDenied 错误:
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.</Details>
</Error>
如果我手动创建 bucker,我想我必须为用户 allUsers 添加一个 Storage Object Viewer 角色:
这是我在手动和自动创建的存储桶之间看到的唯一区别,所以我的问题是..
如何以编程方式添加此权限?
【问题讨论】:
标签: google-cloud-platform google-cloud-storage