Vertex AI エンドポイントへのアクセスを制御する

このページでは、IAM ポリシーを設定して Vertex AI エンドポイントへのアクセスを制御する方法について説明します。ここでは、IAM による Vertex AI アクセス制御アクセス管理に関連するコンセプトで説明されているポリシー、ロール、権限、プリンシパルなどの IAM のコンセプトにすでに精通されていることを前提としています。

IAM ポリシーには、どの IAM ロールがどのプリンシパルに関連付けられるかを定義する 1 つ以上のロール バインディングが含まれます。ロールは、プリンシパルに付与する権限のコレクションです。Vertex AI には、ポリシーで使用できる事前定義ロールが用意されています。独自のカスタムロールを作成することもできます。

IAM ポリシーを取得する

REST API を使用して、Vertex AI エンドポイントの現在の IAM ポリシーを表示できます。これを行うには、エンドポイントまたはプロジェクトに対する endpoints.getIamPolicy 権限が付与されている必要があります。この権限は、Vertex AI 管理者のロール(roles/aiplatform.admin)によって付与されます。

REST

リソースから IAM ポリシーを取得するには、getIamPolicy メソッドを使用する POST リクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: エンドポイントが配置されているリージョン(例: us-central1)。
  • PROJECT_ID: Google Cloud プロジェクト ID。
  • ENDPOINT_ID: エンドポイントの ID。

HTTP メソッドと URL:

POST http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy"

PowerShell

次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:getIamPolicy" | Select-Object -Expand Content

現在の IAM ポリシーを含む JSON レスポンスが返されます。

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.user",
      "members": [
        "user:[email protected]"
      ]
    }
  ]
}

IAM ポリシーを設定する

REST API を使用して、エンドポイントに IAM ポリシーを設定できます。これを行うには、エンドポイントまたはプロジェクトに対する endpoints.setIamPolicy 権限が付与されている必要があります。この権限は、Vertex AI 管理者のロール(roles/aiplatform.admin)によって付与されます。

REST

リソースに IAM ポリシーを設定するには、setIamPolicy メソッドを使用する POST リクエストを送信します。

IAM ポリシーを設定すると、既存のポリシーがオーバーライドされます(変更は追加されません)。リソースの既存のポリシーを変更するには、getIamPolicy メソッドを使用して既存のポリシーを取得し、変更します。setIamPolicy リクエストに、変更したポリシーを etag と一緒に含めます。

409 エラーコードが返された場合は、同時実行 setIamPolicy リクエストによってポリシーがすでに更新されていることを示しています。getIamPolicy メソッドを使用して、更新されたポリシーの etag を取得してから、新しい etagsetIamPolicy リクエストを再試行します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: エンドポイントが配置されているリージョン(例: us-central1)。
  • PROJECT_ID: Google Cloud プロジェクト ID。
  • ENDPOINT_ID: エンドポイントの ID。
  • ROLE: 付与する権限を含む IAM ロール(roles/aiplatform.user など)。
  • PRINCIPAL: ロールの権限を付与するプリンシパル(user:[email protected] など)。
  • ETAG: ポリシーの同時更新による相互上書きを防止する文字列値。この値は、getIamPolicy レスポンスの一部として返されます。

HTTP メソッドと URL:

POST http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy

リクエストの本文(JSON):

{
  "policy": {
    "bindings": [
      {
        "role": "ROLE",
        "members": [
          "PRINCIPAL"
        ]
      },
      ...
    ],
    "etag": "ETAG"
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:setIamPolicy" | Select-Object -Expand Content

現在の IAM ポリシーを含む JSON レスポンスが返されます。

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.user",
      "members": [
        "user:[email protected]"
      ]
    }
  ]
}

エンドポイントに対するユーザーの IAM 権限を確認する

現在認証されているユーザーに、エンドポイントに対する特定の IAM 権限が付与されているかどうかを確認できます。

REST

ユーザーにリソースに対する特定の IAM 権限が付与されているかどうかを確認するには、testIamPermissions メソッドを使用する POST リクエストを送信します。次の例では、現在認証されているユーザーにエンドポイントに対する一連の IAM 権限が付与されているかどうかをテストできます。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION_ID: エンドポイントが配置されているリージョン(例: us-central1)。
  • PROJECT_ID: Google Cloud プロジェクト ID。
  • ENDPOINT_ID: エンドポイントの ID。

HTTP メソッドと URL:

POST http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d

リクエストの本文(JSON):

{
  "permissions": [
    "aiplatform.googleapis.com/aiplatform.endpoints.get",
    "aiplatform.googleapis.com/aiplatform.endpoints.predict"
  ]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "http://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:testIamPermissions -d" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。レスポンスには、現在認証されているユーザーが利用できるリクエストの JSON 本文の権限のみが含まれます。
{
  "permissions": [
    "aiplatform.googleapis.com/aiplatform.endpoints.get",
    "aiplatform.googleapis.com/aiplatform.endpoints.predict"
  ]
}