GCP云存储:执行“Storage.BucketAccessControls.List”请求时出现403-Forbidden

Jat*_*tin 2 google-cloud-storage google-cloud-platform

我正在尝试使用 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();
Run Code Online (Sandbox Code Playgroud)

现在使用这个客户端,我得到200 OK来执行请求,但在运行请求时Buckets.List得到403Storage.BucketAccessControls.List错误。

我正在使用服务帐户凭据。这是我得到的错误

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Forbidden",
    "reason" : "forbidden"
  } ],
  "message" : "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下验证请求的正确方法是什么?

Rob*_*cok 5

你的代码没问题。导致 403 的原因是您的服务帐户的权限。了解如何使用 IAM对存储进行身份验证您还可以在资源级别(逐个存储桶)执行此操作,以允许更精细的访问。

基本上,要允许对存储进行任何 API 调用,您可以为其授予存储管理员角色。最简单的方法是导航到 Console-IAM & Admin。