我有一个5行的Python脚本失败了。
GCP表示GCP-API权限问题。 我不确定它是在告诉我真相。
这是Python语法:
import googleapiclient.discovery
compute = googleapiclient.discovery.build('compute', 'v1')
project_s = 'shining-sol-241621'
zone_s = 'us-central1-a'
result = compute.instances().list(project=project_s, zone=zone_s).execute()
以上语法取决于此env变量设置:
export GOOGLE_APPLICATION_CREDENTIALS=$HOME/secret.json
当我运行Python语法时,我看到:
$ python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import googleapiclient.discovery
>>> compute = googleapiclient.discovery.build('compute', 'v1')
>>> project_s = 'shining-sol-241621'
>>> zone_s = 'us-central1-a'
>>> result = compute.instances().list(project=project_s, zone=zone_s).execute()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
return wrapped(*args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/googleapiclient/http.py", line 851, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/compute/v1/projects/shining-sol-241621/zones/us-central1-a/instances?alt=json returned "Required 'compute.instances.list' permission for 'projects/shining-sol-241621'">
>>> >>>
上面,我在错误中看到此味精:
“'projects / shining-sol-241621'所需的'compute.instances.list'权限”“
在此URL:
https://console.cloud.google.com/iam-admin/iam?project=shining-sol-241621
当我查看secret.json文件附带的服务帐户权限时,我发现我已将这些权限附加到该帐户:
当我将权限附加到服务帐户时,没有看到如下所示的可用权限: 'compute.instances.list'
我确实注意到Compute Admin权限具有以下描述:
“完全控制所有Compute Engine资源”
该描述向我暗示,该许可应该能够执行:“ compute.instances.list”
我怀疑GCP告诉我我有权限问题,但问题出在其他地方。
根据我的描述,为了摆脱这种不良的API行为,有什么好问题要问?
答案 0 :(得分:1)
我以为GCP服务器缓存了错误的信息后就能够解决此问题。
我创建了一个以前从未使用过的名称的服务帐户。
我只授予了一个权限:项目-所有者
我要求它创建一个JSON密钥。
我将密钥复制到$ HOME / secret.json
我发出了shell命令:
export GOOGLE_APPLICATION_CREDENTIALS=$HOME/secret.json
我尝试了6行Python:
$ python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> import googleapiclient.discovery
>>> compute = googleapiclient.discovery.build('compute', 'v1')
>>> project_s = 'shining-sol-241621'
>>> zone_s = 'us-central1-a'
>>> result = compute.instances().list(project=project_s, zone=zone_s).execute()
>>> result['items'][0]['status']
'RUNNING'
>>>
>>>
如您所见,它起作用了。 是的!