gsutil ServiceException:401匿名调用者没有对存储桶的storage.objects.list访问权限,即使我已登录gcloud

Dan*_*nca 9 google-cloud-storage gsutil gcloud

我正在尝试创建一个内部应用程序以将文件上传到Google Cloud。我不希望每个用户或该应用程序都登录,所以我使用的是服务帐户。我登录到服务帐户,一切正常,但是当我尝试上载时,出现此错误:ServiceException:401匿名调用者无权访问bucket的storage.objects.list

这是我得到的错误

如您所见,我已使用服务帐户登录,并且我的帐户(无论服务还是个人)均有效

小智 42

gcloud auth login 解决了我的问题。您需要两个步骤:

gcloud auth login
gcloud auth application-default login
Run Code Online (Sandbox Code Playgroud)


小智 14

我遇到了类似的问题,而且和往常一样,我花了2个小时,但解决方案却微不足道,只要将它写在某个地方... 除了要获得授权,我还需要登录(或授权适合您的身份)到gsutilgcloud。我以为他们有联系或其他什么,但是不。gsutil config通过提供的链接(和粘贴回控制台的代码)运行并授权后,它开始为我工作。

请注意,我也登录到gcloud通过链接到我的项目,具有服务帐户的服务帐户以.json键本地保存(见gcloud auth activate-service-account --help)。希望这可以帮助任何为此苦苦挣扎的人!

  • 现在这也可以通过 google cloud auth `gcloud auth login` 来完成 (3认同)
  • 是!您是正确的,没有记录在任何地方,他们只是建议您使用`gcloud`进行身份验证!?!? (2认同)
  • 我不明白解决方案是什么。我已经通过“gcloud auth login”进行了身份验证,但“gcsfs”仍然不使用我的帐户。 (2认同)

Jai*_*eri 8

这发生在我身上,因为我在运行gcloud init. 我使用gcloud init命令重新初始化了配置,它工作正常。

  • 类似:我必须运行 `gcloud auth list` 来确定我没有用户登录(我很惊讶),然后运行 ​​`gcloud auth login 'my@email.com'` (2认同)

小智 7

使用此命令可以解决一些问题

gsutil config
Run Code Online (Sandbox Code Playgroud)

按照浏览器获取代码,然后将其设置在终端中。


mho*_*lum 5

我只想到可能导致您看到此错误的几件事:

  1. 也许您为单独安装的gsutil(不与gcloud共享凭据)设置了别名?
    编辑:也可能是您调用了错误的gsutil入口点-确保您使用<path-to-cloud-sdk>/google-cloud-sdk/bin/gsutil,而不是<path-to-cloud-sdk>/google-cloud-sdk/platform/gsutil/gsutil。该platform路径不会自动知道您配置的gcloud auth选项。
  2. 也许您的服务帐户凭据已移动/现在无效?如果您的Boto文件引用的是密钥文件路径,并且密钥文件已移动,则可能会发生这种情况。
  3. 也许gcloud boto文件(当您运行时创建的gcloud与gsutil一起使用的文件gcloud auth login)已经消失了。您可以运行gsutil version -l查看它是否显示在您的配置路径中。如果存在gcloud的boto文件,则应该看到类似于以下内容的行:

    配置路径:/Users/Daniel/.config/gcloud/legacy_credentials/email@domain.tld/.boto

您可以运行gsutil version -l以获取更多信息,并研究上述可能性。特别是,从输出这些属性将可能是最有帮助的:using cloud sdkpass cloud sdk credentials to gsutilconfig path(s),和gsutil path


小智 5

我遇到了同样的问题,尝试这样做,gsutil config然后它推荐我gcloud auth login在浏览器中打开谷歌。登录后,我可以下载gsutil cp -r gs://my_bucket/Directory local_save_path整个存储桶并将其保存在本地。