Python GCP-API权限问题:compute.instances.list

时间:2019-05-27 06:47:40

标签: google-compute-engine

我有一个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文件附带的服务帐户权限时,我发现我已将这些权限附加到该帐户:

  • 计算管理员
  • 计算实例管理员(测试版)
  • 计算实例管理员(v1)
  • 计算查看器
  • 安全管理员
  • 所有者

当我将权限附加到服务帐户时,没有看到如下所示的可用权限: 'compute.instances.list'

我确实注意到Compute Admin权限具有以下描述:

“完全控制所有Compute Engine资源”

该描述向我暗示,该许可应该能够执行:“ compute.instances.list”

我怀疑GCP告诉我我有权限问题,但问题出在其他地方。

根据我的描述,为了摆脱这种不良的API行为,有什么好问题要问?

1 个答案:

答案 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'
>>> 
>>> 

如您所见,它起作用了。 是的!