Vertex AI Feature Store(従来版)リソースへのアクセスを制御する

Vertex AI Feature Store(従来版)リソースへのアクセスを制御するには、リソース階層のさまざまなレベルで IAM ポリシーを設定します。次に例を示します。

  • プロジェクトレベルのポリシー IAM は、プロジェクト内のすべてのリソースに適用されます。プロジェクトレベルのポリシーを設定して、プロジェクト内のすべての featurestore を読み取る権限をユーザーに付与できます。

  • リソースレベルの IAM ポリシーを使用すると、特定のリソースにアクセスできるユーザーを指定できます。ユーザーのサブセットに対しては、リソースレベルのポリシーを設定して、プロジェクト内の特定の featurestore への書き込み権限を付与できます。

リソースレベルの Identity and Access Management(IAM)ポリシーは、次の Vertex AI Feature Store(従来版)リソースに設定できます。

  • featurestore: featurestore に Identity and Access Management ポリシーを設定すると、そのポリシーは featurestore と、その featurestore 内に作成されるすべてのエンティティ タイプに適用されます。

  • エンティティ タイプ: エンティティ タイプに Identity and Access Management ポリシーを設定すると、ポリシーはエンティティ タイプと、そのエンティティ タイプが作成された featurestore にのみ適用されます。

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

考慮事項

条件付きリソース ポリシーは設定できません。たとえば、testing のような特定の文字列で始まる名前のリソース(今後作成されるリソースも含む)へのアクセスを許可するポリシーを作成することはできません。

サンプルのユースケース

たとえば、組織に 2 つユーザーセットが存在するとします。1 つのセットで、DevOps 管理者のロールでコア インフラストラクチャを管理します。別のセットでは、特定のエンティティ タイプとその特徴を管理します(データ エンジニアなど)。

DevOps 管理者は、プロジェクト レベルで featurestore とエンティティ タイプを管理します。データ エンジニアが新しいエンティティ タイプをリクエストすると、DevOps 管理者はそのエンティティ タイプを作成し、データ エンジニアに所有権を委任できます。データ エンジニアは、所有するエンティティ タイプの特徴を自由に管理できますが、featurestore やその他のエンティティ タイプに対するオペレーションは実行できません。この制御により、DevOps 管理者は機密情報を含むエンティティ タイプへのアクセスを制限できます。

このシナリオでは、DevOps 管理者にプロジェクト レベルで aiplatform.featurestoreAdmin ロールが付与されています。次に、データ エンジニアが新しいエンティティ タイプをリクエストすると、管理者は新しいエンティティ タイプを作成し、そのエンティティ タイプでデータ エンジニアに aiplatform.entityTypeOwner ロールを(リソースレベルのポリシーとして)割り当てます。

IAM ポリシーの取得

Google Cloud コンソールまたは API を使用して、featurestore またはエンティティ タイプの現在の IAM ポリシーを表示できます。

ウェブ UI

  1. Google Cloud Console の [Vertex AI] セクションで、[特徴] ページに移動します。

    [特徴] ページに移動

  2. [リージョン] プルダウン リストからリージョンを選択します。
  3. 特徴テーブルの [Featurestore] 列または [エンティティ タイプ] 列から featurestore またはエンティティ タイプを選択します。
  4. [権限] をクリックします。
  5. リソースレベルの権限を表示するには、[継承された権限を表示] をオフにします。

    選択したリソースにアクセスできるプリンシパルは、ロールごとにグループ化されています。

  6. ロールを開くと、そのロールに割り当てられているプリンシパルが表示されます。

REST

リソースから IAM ポリシーを取得するには、getIamPolicy メソッドを使用する POST リクエストを送信します。次の例では、エンティティ タイプ ポリシーを取得します。

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

  • LOCATION_ID: featurestore が配置されているリージョン(us-central1 など)。
  • PROJECT_ID: 実際のプロジェクト ID
  • FEATURESTORE_ID: featurestore の ID。
  • ENTITY_TYPE_ID: エンティティ タイプの ID。

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:getIamPolicy

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

curl

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

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:getIamPolicy"

PowerShell

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

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

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:getIamPolicy" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.entityTypeOwner",
      "members": [
        "user:example@example.com"
      ]
    }
  ]
}

IAM ポリシーを設定する

IAM ポリシーは、featurestore またはエンティティ タイプに設定できます。

ウェブ UI

  1. Google Cloud Console の [Vertex AI] セクションで、[特徴] ページに移動します。

    [特徴] ページに移動

  2. [リージョン] プルダウン リストからリージョンを選択します。
  3. 特徴テーブルの [Featurestore] 列または [エンティティ タイプ] 列から featurestore またはエンティティ タイプを選択します。
  4. [権限] をクリックします。
  5. [プリンシパルを追加] をクリックします。
  6. プリンシパルを指定し、プリンシパルに関連付けるロールを 1 つ以上指定します。
  7. [保存] をクリックします。

REST

リソースに IAM ポリシーを設定するには、setIamPolicy メソッドを使用する POST リクエストを送信します。次の例では、エンティティ タイプにポリシーを設定しています。

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

409 エラーコードが返された場合、ポリシーを更新した SetIamPolicy リクエストが同時に発生しています。GetIamPolicy を作成してポリシーの更新 etag を取得し、新しい etag を含めて SetIamPolicy リクエストを再試行します。

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

  • LOCATION_ID: featurestore が配置されているリージョン(us-central1 など)。
  • PROJECT_ID: 実際のプロジェクト ID
  • FEATURESTORE_ID: featurestore の ID。
  • ENTITY_TYPE_ID: エンティティ タイプの ID。
  • ROLE: 付与する権限を含む IAM ロール(roles/aiplatform.featurestoreDataViewer など)。
  • PRINCIPAL: ロールの権限を付与するプリンシパル(user:myuser@example.com など)。
  • ETAG: ポリシーの同時更新による相互上書きを防止する文字列値。この値は、getIamPolicy レスポンスの一部として返されます。

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_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 \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_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 "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:setIamPolicy" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "version": 1,
  "etag": "BwXTmICm7mI",
  "bindings": [
    {
      "role": "roles/aiplatform.entityTypeOwner",
      "members": [
        "user:user1@example.com"
      ]
    },
    {
      "role": "roles/aiplatform.featurestoreDataViewer",
      "members": [
        "user:user2@example.com",
        "user:user3@example.com"
      ]
    },
    {
      "role": "roles/aiplatform.featurestoreDataWriter",
      "members": [
        "user:user4@example.com",
      ]
    }
  ]
}

リソースの IAM 権限を確認する

現在認証されているユーザーに featurestore またはエンティティ タイプに対する特定の IAM 権限があるかどうかを確認できます。

REST

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

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

  • LOCATION_ID: featurestore が配置されているリージョン(us-central1 など)。
  • PROJECT_ID: 実際のプロジェクト ID
  • FEATURESTORE_ID: featurestore の ID。
  • ENTITY_TYPE_ID: エンティティ タイプの ID。

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:testIamPermissions -d

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

{
  "permissions": [
    "aiplatform.googleapis.com/entityTypes.get",
    "aiplatform.googleapis.com/entityTypes.readFeatureValues",
    "aiplatform.googleapis.com/entityTypes.writeFeatureValues"
  ]
}

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

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 \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_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 "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/featurestores/FEATURESTORE_ID/entityTypes/ENTITY_TYPE_ID:testIamPermissions -d" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。レスポンスには、現在認証されているユーザーが利用できるリクエストの JSON 本文の権限のみが含まれます。
{
  "permissions": [
    "aiplatform.googleapis.com/entityTypes.get",
    "aiplatform.googleapis.com/entityTypes.readFeatureValues",
    "aiplatform.googleapis.com/entityTypes.writeFeatureValues"
  ]
}