gpt4 book ai didi

python - 如何在 Python 中列出 Google Storage 中的存储桶?

转载 作者:行者123 更新时间:2023-12-02 00:32:52 25 4
gpt4 key购买 nike

我在 Python 脚本中有以下代码:

from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = 'JSON_AUTH_FILE'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = SERVICE_ACCOUNT_FILE

这会与 google 进行身份验证。

现在我想列出所有的桶:

from google.cloud import storage
storage_client = storage.Client()
buckets = list(storage_client.list_buckets())
print(buckets)

但这行不通。我得到:

google.api_core.exceptions.Forbidden: 403

xxx@yyy.iam.gserviceaccount.com does not have storage.buckets.list access to project

当我点击它时它也有一个链接我看到了(这很奇怪因为它说 403 但这里显示 401:

{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Anonymous caller does not have storage.buckets.list access to project NUMBER.",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Anonymous caller does not have storage.buckets.list access to project NUMBER."
}
}

我做错了什么?

最佳答案

关于此链接的一些建议: https://cloud.google.com/storage/docs/reference/libraries#client-libraries-install-python

您可以通过多种方式为服务帐户设置角色以访问 Google Storage: https://cloud.google.com/iam/docs/understanding-roles#cloud_storage_roles

创建服务帐户时使用默认角色

创建服务帐户时,选择项目角色:存储 -> 存储管理员。设置此角色将允许您的服务帐号访问和操作 Cloud Storage 中的对象。使用 Storage Admin 角色可确保您为服务帐户授予最少的权限,使其无法访问其他服务。

如果您在身份验证方面遇到问题,或许可以考虑将角色设置为 Project -> Editor,这应该会为服务帐户提供对大多数 GCP 服务的编辑权限。请注意,如果服务帐户遭到泄露,用户将可以访问 GCP 项目中的大部分服务。

使用custom role继承多个角色

通过设置自定义角色,您可以继承授予许多默认角色的权限。执行此操作的一个好方法是使用 IAM & Admin -> Roles 中的“根据选择创建角色” GCP Console 的部分。

例如,您可以将 BigQuery AdminStorage Object Admin 组合成一个自定义角色,方法是选中每个角色的复选框并创建您自己的自定义角色然后,您可以在 IAM section of GCP 中分配给您的服务帐户.


一旦您拥有具有正确权限的服务帐户,您应该能够设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量并使用 google库以访问您的存储桶。

在您拥有具有正确角色的服务帐户后,尝试对您的代码进行此修改以测试它是否可以 list all the buckets该帐户有权访问

import os
from google.cloud import storage

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "/home/user/Downloads/[FILE_NAME].json"

# Instantiates a client
storage_client = storage.Client()

# List all the buckets available
for bucket in storage_client.list_buckets():
print(bucket)

关于python - 如何在 Python 中列出 Google Storage 中的存储桶?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51137714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com