GoogleCloudAPIs-Python-Request包含无效参数



使用Google Cloud API和Oauth2,我试图使用Python Desktop应用程序列出项目并显示每个项目的IAM策略。示例代码如下:

appflow = flow.InstalledAppFlow.from_client_secrets_file("client_secrets.json",
scopes=["https://www.googleapis.com/auth/cloud-platform"])
appflow.run_console()
credentials = appflow.credentials
service = googleapiclient.discovery.build(
'cloudresourcemanager', 'v1',  credentials=credentials)
operation1 = service.projects().list().execute()
jason=json.dumps(
operation1,
sort_keys=True,
indent=3)
data = json.loads(jason)
#Gets the list of projects in a Python List object [Proj]
proj=[]
for mem in data['projects']:
print(mem['projectId'])
proj.append(mem['projectId'])
for prj in proj:
resource = 'projects/' + prj

response1 = service.projects().testIamPermissions(resource=resource, body=None, x__xgafv=None).execute()

response2 = service.projects().listOrgPolicies(resource=resource, body=None, x__xgafv=None).execute()
response3 = service.projects().getIamPolicy(resource=resource, body=None, x__xgafv=None).execute()

我在所有3个调用中都得到了类似的错误:googleapiclient.errors.HttpError:<请求时出现HttpError 400https://cloudresourcemanager.googleapis.com/v1/projects/projects%2Fproject-name:testIamPermissions?alt=json返回";请求包含无效参数&";。详细信息:;请求包含无效参数"gt;

论点似乎是正确的。v1/v3版本的服务(cloudresourcemanager(有什么不同吗?我是不是错过了什么?提前感谢。

我认为您不应该像HTTPS示例那样使用projects/解析资源,因为您使用的库应该是抽象的,所以如果您删除resource = 'projects/' + prj并直接使用项目id而不是尝试调用

response1 = service.projects().testIamPermissions(resource=prj, body=None, x__xgafv=None).execute()
response2 = service.projects().listOrgPolicies(resource=prj, body=None, x__xgafv=None).execute()
response3 = service.projects().getIamPolicy(resource=prj, body=None, x__xgafv=None).execute()

如果它起作用,您就不应该再得到错误400,而应该得到403";"拒绝许可";因为您丢失了那些API调用的一些作用域(基于您的代码示例(。

谷歌提供的示例

testIamPermissions

listOrgPolicies

getIamPolicy

相关内容

最新更新