python - 如何解决 "HttpError: Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object., 401"错误?

标签 python json google-cloud-platform google-cloud-storage http-error

问题: 我正在尝试使用 google colab python notebook 读取存储在我项目的一个云存储桶中的 .gz JSON 文件,但我不断收到此错误:

HttpError: Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object., 401

我的代码:

fs = gcsfs.GCSFileSystem(project='my-project')
with fs.open('bucket/path.json.gz') as f:
    gz = gzip.GzipFile(fileobj=f) 
    file_as_string = gz.read()
    json_a = json.loads(file_as_string)

我已经尝试了所有这些身份验证方法,但仍然遇到相同的 401 错误:

!gcloud auth login
!gcloud auth list
!gcloud projects list
!gcloud config set project 'myproject-id'

from google.colab import auth
auth.authenticate_user()

!gcloud config set account 'my GCP email'

!gcloud auth activate-service-account

!gcloud auth application-default login

!gsutil config

!gcloud config set pass_credentials_to_gsutil false

!gsutil config -a

我还将我的 GCP IAM 权限设置为:

  • 编辑
  • 所有者
  • 存储管理员
  • 存储对象管理员
  • 存储对象创建者
  • 存储对象查看器
  • 存储传输管理员

最佳答案

您的问题并不完全清楚,但是:

  1. gcloud 和 Google SDK 都使用 Google 的 identity|auth 平台它们不共享状态。您通常 (!) 无法使用 gcloud 登录并期望使用 SDK 的代码也能通过身份验证
  2. @john-hanley 正确地指出,在 gcloud 和使用 Google SDK 的代码之间共享状态的一种(通常令人困惑的)方法是使用 gcloud auth application-default-login。但是,这仅适用于 gcloud 在本地写入其状态,并且当以同一用户身份在同一主机上运行时使用 Google SDK 的代码将能够访问该状态。我认为(!?)这不适用于基于浏览器的协作
  3. 我不熟悉 gcsfs.GCSFileSystem 但它不是 Google SDK。除非其开发人员特别周到,否则它将无法利用 Google SDK 使用 auth.authenticate_user() 完成的身份验证。

所以...

我认为你应该:

  1. 确保您的用户帐户(you@gmail.com 或其他)具有roles/storage.objectAdmin(或任何允许存储的predefined role。 objects.get).
  2. 使用 google.collab.authauth.authenticate_user() 获取浏览器登录用户的凭据(即 you@gmail.com).
  3. 使用 Google 云存储库,例如google-cloud-storage访问 GCS 对象。 Google 图书馆可以利用在上一步中获得的凭据。

更新

这是一个 example .

注意:它使用 API 客户端库而不是 Cloud 客户端库,但它们在功能上是等效的。

关于python - 如何解决 "HttpError: Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object., 401"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71505271/

相关文章:

python - 审核文件中的行

json - 无法使用 OPENJSON 和 SQL Server 2017 解析具有动态键的对象数组

json - Azure 逻辑应用 - 验证 JSON 文件中的内容

Spring MVC 中的 Java 到 JSON 对象映射结果 400 Bad request 错误

firebase - 使用 firebase API 创建项目时出现 403(作为所有者用户,而不是服务帐户)

google-cloud-platform - GCP : How to get compute engine access token?

google-cloud-storage - 如何更新 .boto 文件中的项目 ID

python - 在 apache zeppelin 中找不到 pyspark 解释器

Python和DynamoDB十进制。不精确

python - _,在Python中做什么?