【发布时间】:2019-05-15 19:40:57
【问题描述】:
使用来自 AppEngine flex 的 Python Google API 客户端库,我正在调用 GCP ML Engine API。 当我列出不同的模型、获取它们的默认版本和所有“只读”操作时,它工作正常,但是当我尝试为模型创建新版本时,它不起作用。我收到“拒绝访问模型”的 403 禁止错误。
我使用服务帐户拨打电话。在 IAM 中,我的服务帐号拥有“ML Engine 管理员”权限。
这就是我打电话的方式
from google.oauth2.service_account import Credentials
credentials = Credentials.from_service_account_file(PATH_TO_MY_JSON)
ml_client = discovery.build(u'ml', u'v1', credentials=credentials)
body = {
u"name": version_name,
u"description": description,
u"runtimeVersion": current_default_version.get(u"runtimeVersion"),
u"framework": current_default_version.get(u"framework"),
u"pythonVersion": current_default_version.get(u"pythonVersion"),
u"deploymentUri": deployment_uri
}
request = ml_client.projects().models().versions().create(parent=get_query_name(model_name), body=body)
request.execute()
错误
<HttpError 403 when requesting https://ml.googleapis.com/v1/projects/XXX/models/YYY/versions?alt=json returned "Access to model denied.">
它与服务帐户有关,因为当我在 Cloud Shell 中运行此代码并在没有凭据 (ml_client = discovery.build(u'ml', u'v1')) 的情况下构建我的 ml_client 时,它可以正常工作。
【问题讨论】:
-
你是
gcloud auth login和gcloud auth application-default login吗? -
不确定这会如何影响已部署的版本,但无论如何,我没有
-
可能是服务帐号没有读取桶的权限。即使帐户是 Cloud ML 管理员,部署/创建模型也需要存储权限,因为 Cloud ML 需要读取存储在此类存储桶中的训练文件。您能否确认您是否按照文档中的说明设置了the storage permissions?
标签: google-cloud-platform google-cloud-ml google-app-engine-python app-engine-flexible