Tag: google storage api

带有Java服务帐户的Google云端存储 – 403 Caller没有对存储桶的storage.objects.list访问权限

我们希望从我们的应用服务器中的Google Storage下载文件。 重要的是对单个存储桶具有只读受限访问权限,而不是其他任何内容。 起初我使用了一个常规用户帐户(不是服务帐户),它有权访问我们的Google Cloud项目中的所有存储桶,一切正常 – 我的Java代码打开存储桶并下载文件没有问题。 Storage storage = StorageOptions.getDefaultInstance().getService(); Bucket b = storage.get( “mybucketname” ); 然后我想切换到使用专门创建的服务帐户,该帐户只能访问一个存储桶。 所以我创建了一个服务帐户,授予读取单个存储桶的权限,并下载了其密钥文件。 Google Cloud Console中的权限命名为: 存储对象查看器(3个成员)读取对GCS对象的访问权限。 gsutil命令行实用程序可以正常使用此帐户 – 从命令行可以访问此存储桶但不能访问其他存储桶。 使用以下命令从命令行初始化: gcloud –project myprojectname auth activate-service-account files-viewer2@myprojectname.iam.gserviceaccount.com –key-file=/…/keyfilename.json 我甚至尝试了两个可以访问不同存储桶的不同服务帐户,从命令行我可以在它们之间切换,gsutil只能访问相关的存储桶,而对于任何其他存储器,它会返回错误: “AccessDeniedException:403 Caller没有对bucket xxxxxxxxxx的storage.objects.list访问权限。” 所以,从命令行一切正常。 但在Java中,身份validation存在一些问题。 我以前与常规用户帐户一起使用的默认身份validation停止工作 – 它报告错误: com.google.cloud.storage.StorageException:匿名用户没有对bucket xxxxxxxxxx的storage.buckets.get访问权限。 然后我尝试了以下代码(这是最简单的变体,因为它依赖于关键的json文件,但我已经尝试了在各种论坛中找到的许多其他变体,但没有成功): FileInputStream fis = new FileInputStream( “/path/to/the/key-file.json” ); ServiceAccountCredentials credentials […]