Cloud ML 服务帐户无法访问 Cloud Storage,并且未在 IAM 和管理面板中列出
Cloud ML Service account cannot access Cloud Storage and is not listed in IAM & admin panel
使用命令创建新版本的 ML 引擎模型时
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存储桶有存储classregional
和位置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 和管理面板中,并且能够访问我的云存储。
是的,该服务帐户不属于您的项目。您可以知道 Cloud ML Engine 的服务帐户。要在 ML Engine 上部署,您需要向该服务帐户授予对 gcs 上模型文件的读取权限。以下是有关如何执行此操作的文档:https://cloud.google.com/ml-engine/docs/access-control#permissions_required_for_storage
我认为问题在于,您试图在另一个项目下创建模型,而该项目与您试图达到的那个桶无关。所以您使用了那个不同项目的服务帐户来访问存储桶,这就是它没有任何权限并且没有出现在您的 AMI 中的原因。
如果这种情况再次发生或者如果其他人有这个问题,您可以使用 gcloud projects list
检查您的项目并使用 gcloud config set project <project name>
进行更改。
如果有人发现这个问题,@freeCris 将解决方案写在问题中。我决定把它写下来,因为我阅读了答案中的所有文档,发现没有任何用处,然后意识到他在问题本身中写了如何解决它。
对于那些想要解决此问题的人,只需运行(确保您在 ML Engine 中没有资源,例如模型和版本):
gcloud services disable ml.googleapis.com
然后运行:
gcloud services enable ml.googleapis.com
您将获得一个新的服务帐户,这次它已列在您的 IAM 控制台中。只需将它添加到您的 GCS 存储桶中即可使用。
使用命令创建新版本的 ML 引擎模型时
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存储桶有存储class
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 和管理面板中,并且能够访问我的云存储。
是的,该服务帐户不属于您的项目。您可以知道 Cloud ML Engine 的服务帐户。要在 ML Engine 上部署,您需要向该服务帐户授予对 gcs 上模型文件的读取权限。以下是有关如何执行此操作的文档:https://cloud.google.com/ml-engine/docs/access-control#permissions_required_for_storage
我认为问题在于,您试图在另一个项目下创建模型,而该项目与您试图达到的那个桶无关。所以您使用了那个不同项目的服务帐户来访问存储桶,这就是它没有任何权限并且没有出现在您的 AMI 中的原因。
如果这种情况再次发生或者如果其他人有这个问题,您可以使用 gcloud projects list
检查您的项目并使用 gcloud config set project <project name>
进行更改。
如果有人发现这个问题,@freeCris 将解决方案写在问题中。我决定把它写下来,因为我阅读了答案中的所有文档,发现没有任何用处,然后意识到他在问题本身中写了如何解决它。
对于那些想要解决此问题的人,只需运行(确保您在 ML Engine 中没有资源,例如模型和版本):
gcloud services disable ml.googleapis.com
然后运行:
gcloud services enable ml.googleapis.com
您将获得一个新的服务帐户,这次它已列在您的 IAM 控制台中。只需将它添加到您的 GCS 存储桶中即可使用。