Google compute engine Python GCP-API权限问题:compute.instances.list
我有一个失败的5行Python脚本 GCP表示GCP-API权限问题。 我不确定它是否告诉了我真相 以下是Python语法:Google compute engine Python GCP-API权限问题:compute.instances.list,google-compute-engine,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().li
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'">
>>> >>>
$python3
Python 3.5.2(默认值,2018年11月12日,13:43:14)
[GCC 5.4.0 20160609]在linux上
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入GoogleAppClient.discovery
>>>compute=googleapiclient.discovery.build('compute','v1')
>>>项目_s='shining-sol-241621'
>>>分区_s='us-central1-a'
>>>结果=compute.instances().list(项目=项目,区域=区域)。执行()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
位置包装中的文件“/usr/local/lib/python3.5/dist packages/googleapiclient/_helpers.py”,第130行
已包装退货(*args,**kwargs)
文件“/usr/local/lib/python3.5/dist-packages/googleapiclient/http.py”,执行中的第851行
raise HttpError(resp,content,uri=self.uri)
GoogleAppClient.errors.HttpError:
>>> >>>
在上面,我在错误中看到此消息:
“需要'compute.instances.list'对'projects/shining-sol-241621'的权限”
在此URL:
当我查看secret.json文件附带的服务帐户权限时,我发现我已将这些权限附加到该帐户:
- 计算机管理员
- 计算实例管理(测试版)
- 计算实例管理(v1)
- 计算机查看器
- 安全管理员
- 所有者
根据我的描述,为了克服这种糟糕的API行为,有什么好问题可以问吗?在我假设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'
>>>
>>>
正如你所看到的,它成功了。
耶 在我假设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'
>>>
>>>
正如你所看到的,它成功了。
耶