gpt4 book ai didi

python - 无法使用 python 脚本切换 gcloud 平台帐户

转载 作者:行者123 更新时间:2023-11-28 21:32:05 25 4
gpt4 key购买 nike

有人可以帮我查询与 Google 云平台上的权限相关的问题吗?我意识到这只是松散的编程相关,所以如果这是错误的论坛,我深表歉意!

我有一个用 Python 编写的项目(“ProjectA”),它使用 Google 的云存储和计算引擎。该项目有各种存储桶,可以使用来自计算实例和我家用计算机的 python 代码访问这些存储桶。该项目使用一个作为项目“所有者”的服务帐户,我相信它已启用所有 API,并且该项目运行良好。服务帐户名称是“master@projectA.iam.gserviceaccount.com”。

最近我开始了一个需要类似资源(存储、计算)等的新项目,但我想将它们分开。新项目称为“ProjectB”,我设置了一个名为 master@projectB.iam.gserviceaccount.com 的新主服务帐户。我在 ProjectB 中的代码生成了一个与访问权限相关的错误,并且即使我将代码剥离为以下几行也会得到演示:

ProjectA 的代码如下所示:

from google.cloud import storage

client = storage.Client(project='projectA')
mybucket = storage.bucket.Bucket(client=client, name='projectA-bucket-name')

currentblob = mybucket.get_blob('somefile.txt')

ProjectB 中的代码如下所示:

from google.cloud import storage

client = storage.Client(project='projectB')
mybucket = storage.bucket.Bucket(client=client, name='projectB-bucket-name')

currentblob = mybucket.get_blob('somefile.txt')

两个桶肯定存在,显然如果“somefile.text”不存在则 currentblob 为 None,这很好,但是当我执行此代码时,我收到以下错误:

Traceback (most recent call last):
File .... .py", line 6, in <module>
currentblob = mybucket.get_blob('somefile.txt')
File "C:\Python27\lib\site-packages\google\cloud\storage\bucket.py", line 599, in get_blob
_target_object=blob,
File "C:\Python27\lib\site-packages\google\cloud\_http.py", line 319, in api_request
raise exceptions.from_http_response(response)
google.api_core.exceptions.Forbidden: 403 GET https://www.googleapis.com/storage/v1/b/<ProjectB-bucket>/o/somefile.txt: master@ProjectA.iam.gserviceaccount.com does not have storage.objects.get access to projectB/somefile.txt.

请注意错误消息是如何显示“ProjectA”服务帐户没有 ProjectB 访问权限的 - 好吧,我有点期待,但我希望在 ProjectB 上使用服务帐户!

阅读 thisthis 等文档和链接后,即使在删除并恢复服务帐户或为其提供有限范围后,它也无济于事。我尝试了一些事情:

1) 确保我的新服务帐户在我的本地机器(目前正在运行代码的地方)上“激活”:

gcloud auth activate-service-account master@projectB.iam.gserviceaccount.com --key-file="C:\my-path-to-file\123456789.json"

这似乎是成功的。

2) 验证认证帐户列表:

gcloud auth list

这列出了两个帐户,一个是我的电子邮件地址(我用于 gmail 等),另一个是 master@projectB.iam.gserviceaccount.com,因此看来我的帐户已正确“注册”。

3) 将服务帐户设置为事件帐户:

gcloud config set account master@projectB.iam.gserviceaccount.com

当我再次查看授权列表时,服务帐户旁边有一个星号“*”,所以大概这是好的。

4) 检查项目是否设置为ProjectB:

gcloud config set project projectB

这看起来也不错。

奇怪的是,当我运行 python 代码时,它正在“使用”我旧项目中的服务帐户,尽管我似乎已经更改了所有内容以引用项目 B - 我已经激活帐户、选择它等。

请有人指出我可能错过的方向吗?我不记得在设置我的原始项目时经历过这么多痛苦,我发现它非常令人沮丧,以至于我认为很简单的事情被证明是非常困难的。

感谢任何能为我提供帮助的人。

最佳答案

我不完全确定,但这个答案来自这里的一个类似问题: Permission to Google Cloud Storage via service account in Python

通过指向代码中的凭据来明确指定帐户。如记录here :

文档页面中的示例:

def explicit():
from google.cloud import storage

# Explicitly use service account credentials by specifying the private key
# file.
storage_client = storage.Client.from_service_account_json(
'service_account.json')

# Make an authenticated API request
buckets = list(storage_client.list_buckets())
print(buckets)

关于python - 无法使用 python 脚本切换 gcloud 平台帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57050482/

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