我正在尝试使用Java客户端列出Google云存储分区的ACL。我正在创建这样的客户端:
// create client
GoogleCredential credential = GoogleCredential.fromStream(jsonCredentialsString));
if(credential.createScopedRequired()) {
credential = credential.createScoped(StorageScopes.all());
}
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
return new Storage.Builder(httpTransport, jsonFactory, credential)
.setApplicationName("app")
.build();
现在使用此客户端我 200 OK 执行Buckets.List
请求,但在运行Storage.BucketAccessControls.List
请求时出现 403 错误。< / p>
我正在使用服务帐户凭据。这是我得到的错误
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Forbidden",
"reason" : "forbidden"
} ],
"message" : "Forbidden"
}
在这种情况下验证请求的正确方法是什么?
答案 0 :(得分:2)
你的代码很好。造成403的原因是您的服务帐户的权限。看看你如何authenticate for Storage使用IAM。 您也可以在资源级别(逐桶)执行此操作,以允许更细粒度的访问。
基本上,要允许对Storage进行任何API调用,您可以为其指定Storage Admin角色。最简单的方法是导航到Console-IAM&amp;管理员。