モデルの共有

AI Platform Prediction は、Identity and Access Management(IAM)を使用してリソースへのアクセスを管理します。リソースへのアクセス権を付与するには、ユーザー、グループ、またはサービス アカウントに 1 つ以上のロールを割り当てます。モデルを共有するには、モデルとそのバージョンにアクセスできるようにするロールを付与します。

このガイドでは、モデルリソースへのアクセス権の付与に使用できる、2 つの事前定義された AI Platform Prediction のロールに焦点を当てています。

  • AI Platform Prediction モデルオーナー
  • AI Platform Prediction モデルユーザー

他のロールの詳細については、AI Platform Prediction で使用できるすべての IAM のロールに関する説明をご覧ください。

始める前に

モデルのロール

AI Platform Prediction のモデルオーナーとモデルユーザーのロールを使用すると、特定のモデルリソースに対してさまざまな権限を付与できます。

個人やサービスにモデルユーザーのロールを付与することで、個人やサービスとモデルを共有できます。

ロールのタイトル ロール名 機能
AI Platform Prediction モデルオーナー

roles/ml.modelOwner

モデルとそのバージョンへの完全アクセス権。このロールは、モデルを作成するユーザーに自動的に付与されます。

AI Platform Prediction モデルユーザー

roles/ml.modelUser

モデルとそのバージョンを読み取り、予測に使用する権限。このロールを付与することで、特定のモデルを簡単に共有できます。

モデルへのアクセス権を個人アカウントとサービス アカウントに付与する

この例では、特定のモデルの IAM ポリシーを編集し、個人とサービス アカウントにモデルオーナーとモデルユーザーのロールを付与する方法を示します。ポリシー ファイルの編集には、API、gcloud または Google Cloud コンソールを使用します。

コンソール

モデルをユーザーまたはサービス アカウントと共有する

  1. AI Platform Prediction の [モデル] ページを開きます。

    AI Platform Prediction の [モデル] ページを開く

  2. 共有したいモデルのチェックボックスをオンにします。

  3. 右上隅にある [情報パネルを表示] ボタンをクリックして、[権限] タブを表示します。

  4. [メンバーを追加] フィールドに、モデルを共有するユーザーの Google アカウントを追加します。たとえば、「email1@gmail.com」と入力します。

  5. [ロールを選択] プルダウン リストから、ユーザーに追加するロールを選択します。モデルリソースを共有するため、[ML Engine モデルオーナー] または [ML Engine モデルユーザー] を選択します。

    選択する役割が不明な場合は、モデルの役割をご覧ください。

  6. [ロールを選択] プルダウン リストの横にある [追加] ボタンをクリックして、ロールの選択を確定します。

  7. Google Cloud コンソールのページが更新され、[権限] タブで割り当てたロールとそのロールに関連付けられているメンバーのリストが表示されます。

ユーザーまたはサービス アカウントとのモデルの共有を停止するには、アカウント ID の横にあるゴミ箱アイコンをクリックします。

gcloud

ポリシー ファイルを直接編集してモデルポリシーを変更する

gcloud コマンドで JSON または YAML ファイルを使用できます。この例では 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 モデルオーナーのロールを割り当てて、オンライン予測にアクセスできるようにしています。

     {
        "bindings": [
        {
            "role": "roles/ml.modelOwner",
            "members": [
                "serviceAccount:my-other-app@appspot.gserviceaccount.com",
                "user:email1@gmail.com"
            ]
        }
        ],
        "etag": "BwVUJYGz8M4=",
     }
    
  3. テキスト エディタで、次のように iam.json ファイルを更新します。グループ メンバーとそれらのメンバーのロールを定義する新しいオブジェクトを bindings 配列に追加します。たとえば、roles/ml.modelUser ロールをユーザー email2@gmail.com に付与するには、次のようにサンプルを変更します。

     {
        "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-binding コマンドと remove-iam-policy-binding コマンドを使用して、モデルへのアクセス権の付与、取り消し、更新を行います。

モデルをユーザーと共有する

  1. 既存の AI Platform Prediction モデルポリシーにユーザーを追加するには、次のように add-iam-policy-binding コマンドを使用します。

    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. 既存の AI Platform Prediction モデルポリシーにサービス アカウントを追加するには、次のように add-iam-policy-binding コマンドを使用します。

    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 モデルポリシーからユーザーまたはサービスを削除します。この例では、モデルポリシーからモデルオーナー 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 というユーザーを追加しました。

        {
           "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