共享模型

AI Platform Prediction 使用 Identity and Access Management (IAM) 管理资源访问权限。如需授予对某项资源的访问权限,请为用户、群组或服务账号分配一个或多个角色。要共享模型,请授予一个提供对模型及其版本的访问权限的角色。

本指南着重介绍了可用于授予对模型资源的访问权限的两个预定义 AI Platform Prediction 角色

  • AI Platform Prediction Model Owner
  • AI Platform Prediction Model User

如需详细了解其他角色,请参阅可用于 AI Platform Prediction 的全部 IAM 角色的完整说明

准备工作

  • 训练您的机器学习模型。
  • 将模型部署到 AI Platform Prediction。

模型角色

AI Platform Prediction Model Owner 和 Model User 角色可以授予针对特定模型资源的不同权限。

如需与个人或服务共享模型,您可以向个人或服务授予 Model User 角色

角色名称 角色名称 技能
AI Platform Prediction Model Owner

roles/ml.modelOwner

拥有模型及其版本的完整访问权限。此角色会自动授予给创建该模型的用户。

AI Platform Prediction Model User

roles/ml.modelUser

拥有读取模型及其版本并将其用于预测的权限。通过授予此角色,您可以轻松共享特定模型。

授予个人和服务账号对模型的访问权限

此示例展示如何通过向个人和服务账号授予 Model Owner 或 Model User 角色来修改特定模型的 IAM 政策。您可以使用 API、gcloud 或 Google Cloud 控制台来修改政策文件。

控制台

与用户或服务账号共享模型

  1. 打开 AI Platform Prediction“模型”页面。

    打开 AI Platform Prediction“模型”页面

  2. 针对您要共享的每个模型,选中相应的复选框。

  3. 点击右上角的显示信息面板按钮以显示权限标签页。

  4. 添加成员字段中,添加您要与其共享模型的用户的 Google 账号。例如“email1@gmail.com”。

  5. 选择角色下拉字段中,选择要为用户添加的角色。如需共享模型资源,请选择 ML Engine Model OwnerML Engine Model User

    如果您不确定选择哪个角色,请参阅模型角色以了解详情。

  6. 点击选择角色下拉字段旁边的添加按钮,完成角色选择。

  7. Google Cloud 控制台页面将刷新,显示您已在权限标签页中分配的角色,还会列出与该角色相关联的成员列表。

如需停止与用户或服务账号共享模型,请点击账号 ID 旁边的垃圾桶图标。

gcloud

通过直接修改政策文件来修改模型政策

您可以将 JSON 或 YAML 文件与 gcloud 命令结合使用。本示例使用 JSON。

  1. 获取要修改的政策,并将其写入 JSON 文件。

    gcloud ai-platform models get-iam-policy <MODEL_NAME> --format json > iam.json
    
  2. 打开政策文件(本例中为 iam.json),或运行 cat iam.json 查看政策。在以下政策示例中,系统会为服务账号分配 AI Platform Prediction Model Owner 角色,使其能够访问在线预测。

     {
        "bindings": [
        {
            "role": "roles/ml.modelOwner",
            "members": [
                "serviceAccount:my-other-app@appspot.gserviceaccount.com",
                "user:email1@gmail.com"
            ]
        }
        ],
        "etag": "BwVUJYGz8M4=",
     }
    
  3. 使用文本编辑器,按如下方式更新 iam.json 文件。向 bindings 数组添加一个新对象以定义群组成员以及这些成员的角色。例如,如需向用户 email2@gmail.com 授予 roles/ml.modelUser 角色,请按如下方式更改上面所示的示例:

     {
        "bindings": [
        {
            "role": "roles/ml.modelOwner",
            "members": [
                "serviceAccount:my-other-app@appspot.gserviceaccount.com",
                "user:email1@gmail.com"
            ]
        },
        {
            "role": "roles/ml.modelUser",
            "members": [
                "user:email2@gmail.com"
            ]
        }
        ],
        "etag": "BwVUJYGz8M4=",
     }
    
  4. 通过运行以下命令来更新项目的政策:

    gcloud ai-platform models set-iam-policy <MODEL_NAME> iam.json
    
  5. 该命令会以 YAML 形式输出更新后的政策:

    bindings:
    - members:
      - user:email1@gmail.com
      - serviceAccount:otherapp@appspot.gserviceaccount.com
      role: roles/ml.modelOwner
    - members:
      - user:email2@gmail.com
      role: roles/ml.modelUser
    etag: BwVUJYGz8M4=
    

使用政策绑定命令来修改政策

使用 add-iam-policy-bindingremove-iam-policy-binding 命令授予、撤消及更新对模型的访问权限。

与用户共享模型

  1. 使用 add-iam-policy-binding 命令将用户添加到现有 AI Platform Prediction 模型政策,如下所示:

    gcloud ai-platform models add-iam-policy-binding <MODEL_NAME> \
        --member user:email3@gmail.com --role roles/ml.modelUser
    

    该命令会输出更新后的政策:

        bindings:
        - members:
          - user:email1@gmail.com
          - serviceAccount:otherapp@appspot.gserviceaccount.com
          role: roles/ml.modelOwner
        - members:
          - user:email2@gmail.com
          - user:email3@gmail.com
          role: roles/ml.modelUser
        etag: BwVUJYGz8M4=
    

与服务共享模型

  1. 使用 add-iam-policy-binding 命令向现有 AI Platform Prediction 模型政策添加一个服务账号,如下所示:

    gcloud ai-platform models add-iam-policy-binding <MODEL_NAME> \
        --member=serviceAccount:newserviceapp@appspot.gserviceaccount.com \
        --role=roles/ml.modelOwner
    

    该命令会输出更新后的政策:

      bindings:
      - members:
        - user:email1@gmail.com
        - serviceAccount:otherapp@appspot.gserviceaccount.com
        - serviceAccount:newserviceapp@appspot.gserviceaccount.com
        role: roles/ml.modelOwner
      - members:
        - user:email2@gmail.com
        - user:email3@gmail.com
        role: roles/ml.modelUser
      etag: BwVUJYGz8M4=
    

停止共享模型

  1. 如需停止与用户或服务共享模型,请使用 remove-iam-policy-binding 命令从现有的 AI Platform Prediction 模型政策中移除用户或服务。在此示例中,我们从模型政策中移除 Model Owner email1@gmail.com

    gcloud ai-platform models remove-iam-policy-binding <MODEL_NAME> \
          --member=user:email1@gmail.com \
          --role=roles/ml.modelOwner
    

    该命令会输出更新后的政策:

      bindings:
      - members:
        - serviceAccount:otherapp@appspot.gserviceaccount.com
        - serviceAccount:newserviceapp@appspot.gserviceaccount.com
        role: roles/ml.modelOwner
      - members:
        - user:email2@gmail.com
        - user:email3@gmail.com
        role: roles/ml.modelUser
      etag: BwVUJYGz8M4=
    

REST API

通过 JSON API 修改政策

  1. 通过发送以下请求来获取现有政策:

    GET https://ml.googleapis.com/v1/projects/<project>/models/<model>:getIamPolicy
    

    该命令会在响应中返回当前政策:

       {
          "bindings": [
          {
              "role": "roles/ml.modelOwner",
              "members": [
                  "serviceAccount:my-other-app@appspot.gserviceaccount.com",
                  "user:email1@gmail.com"
              ]
          }
          ]
       }
    
  2. 修改完政策后,您可以通过发送以下请求来更新政策:

    POST https://ml.googleapis.com/v1/projects/<project>/models/<model>:setIamPolicy
    

    该命令会在响应中返回更新后的政策。在此示例中,我们添加了用户 email2@gmail.com 作为 Model User:

        {
           "policy": {
               "bindings": [
               {
                   "role": "roles/ml.modelOwner",
                   "members": [
                       "serviceAccount:my-other-app@appspot.gserviceaccount.com",
                       "user:email1@gmail.com"
                   ]
               },
               {
                   "role": "roles/ml.modelUser",
                   "members": [
                       "user:email2@gmail.com"
                   ]
               }
               ]
           }
        }
    
  1. 如需获取访问令牌,请运行以下命令:

    gcloud auth print-access-token
    
  2. 调用相应 API 时,在 Authorization 标头中以不记名令牌形式传递令牌值:

    curl -s -H 'Authorization: Bearer <ACCESS_TOKEN>' \
        https://ml.googleapis.com/v1/projects/<project>/models/<model>:getIamPolicy