Cloud ML Service帐户无法访问云存储,并且未在IAM&管理面板

时间:2018-03-01 16:19:08

标签: google-cloud-platform google-cloud-ml

使用命令

创建ML Engine Model的新版本时
gcloud ml-engine versions create 'v1' --model=model_name --origin=gs://path_to_model/1/ --runtime-version=1.4

我收到以下错误:

ERROR: (gcloud.ml-engine.versions.create) FAILED_PRECONDITION: Field: version.deployment_uri Error: Read permissions are required for Cloud ML service account cloud-ml-service@**********.iam.gserviceaccount.com to the model file gs://path_to_model/1/saved_model.pb.
- '@type': type.googleapis.com/google.rpc.BadRequest
  fieldViolations:
  - description: Read permissions are required for Cloud ML service account cloud-ml-service@**********.iam.gserviceaccount.com to the model file gs://path_to_model/1/saved_model.pb.
  field: version.deployment_uri

此服务帐户未列在IAM&管理面板并且不属于我的项目,因此我不想手动为此帐户授予权限。

还有其他人也经历过这个吗?关于我应该做什么的任何建议?

其他信息:

  • Google存储分区的存储分类为regional,位置为europe-west1

  • 我已尝试使用命令

    禁用(并重新启用)ML Engine服务
    gcloud services disable ml.googleapis.com
    

    但是这导致了以下错误:

    ERROR: (gcloud.services.disable) The operation with ID tmo-acf.********-****-****-****-************ resulted in a failure.
    

更新信息:

  • 存储桶不属于其他项目

  • 命令

    gcloud iam service-accounts get-iam-policy cloud-ml-service@**********.iam.gserviceaccount.com
    

    给出错误:

    ERROR: (gcloud.iam.service-accounts.get-iam-policy) PERMISSION_DENIED: Permission iam.serviceAccounts.getIamPolicy is required to perform this operation on service account projects/-/serviceAccounts/cloud-ml-service@**********.iam.gserviceaccount.com.
    

    此错误消息中路径projects/-/serviceAccounts/...中的破折号对我来说似乎非常错误。

问题已解决

我删除了所有模型后终于能够禁用ML Engine服务了。重新启用该服务后,我获得了一个新的服务帐户,该帐户显示在我的IAM&管理面板,并能够访问我的云存储。

3 个答案:

答案 0 :(得分:2)

如果有人发现此问题,@ freeCris在问题中写了解决方案。当我阅读答案中的所有文档时,我决定记下来,以至于找不到任何有用的东西,然后意识到他写了如何解决问题本身的方法。

对于那些想解决此问题的人,只需运行即可(确保ML Engine中没有模型和版本等资源)

gcloud services disable ml.googleapis.com

然后运行:

gcloud services enable ml.googleapis.com

您将获得一个新的服务帐户,这一次将在您的IAM控制台中列出。只需将其添加到您的GCS存储桶中,即可立即使用。

答案 1 :(得分:0)

是的,该服务帐户不属于您的项目。您可以知道Cloud ML Engine的服务帐户。要在ML Engine上进行部署,您需要将gcs上的模型文件的读访问权授予该服务帐户。以下是有关如何执行此操作的文档:https://cloud.google.com/ml-engine/docs/access-control#permissions_required_for_storage

这可能也很有用:https://cloud.google.com/ml-engine/docs/working-with-data#using_a_cloud_storage_bucket_from_a_different_project

答案 2 :(得分:0)

我认为问题是,您试图在另一个项目下创建模型,而该项目与您尝试达到的那个存储桶没有关联。因此,您使用了另一个项目的服务帐户来访问存储桶,这就是为什么它没有任何权限并且没有出现在AMI中的原因。

如果再次发生这种情况,或者其他人遇到该问题,则可以使用gcloud config set project <project name>检查项目,并使用$FileIn = '.\file.csv' $FileOut= '.\file2.csv' $csv = Import-Csv $FileIn $csv | Select-Object -First ($csv.count -1) | Export-Csv $FileOut -NoTypeInformation 进行更改。