Controlar el acceso a los recursos de Vertex AI Feature Store (antigua)

Puedes controlar el acceso a los recursos de Vertex AI Feature Store (antigua) configurando políticas de gestión de identidades y accesos en distintos niveles de la jerarquía de recursos. Por ejemplo:

  • Una política de gestión de identidades y accesos a nivel de proyecto se aplica a todos los recursos de un proyecto. Puedes definir una política a nivel de proyecto para conceder permisos a los usuarios para leer todos los almacenes de características de tu proyecto.

  • Una política de gestión de identidades y accesos a nivel de recurso te permite especificar qué usuarios pueden acceder a recursos concretos. En el caso de un subconjunto de usuarios, puedes definir una política a nivel de recurso para conceder permisos de escritura a almacenes de características específicos de tu proyecto.

Puedes definir políticas de gestión de identidades y accesos (IAM) a nivel de recurso en los siguientes recursos de Vertex AI Feature Store (antigua):

  • Featurestore: cuando defines una política de Gestión de Identidades y Accesos en una featurestore, la política se aplica a la featurestore y a todos los tipos de entidades creados en ella.

  • Tipo de entidad: cuando defines una política de gestión de identidades y accesos en un tipo de entidad, la política se aplica solo al tipo de entidad y a la feature store en la que se crea el tipo de entidad.

Una política de gestión de identidades y accesos incluye una o varias vinculaciones de roles que definen qué roles de gestión de identidades y accesos están asociados a qué principales. Un rol es un conjunto de permisos que se concede a una entidad principal. Vertex AI proporciona roles predefinidos que puedes usar en tus políticas. También puedes crear tus propios roles personalizados.

Cuestiones importantes

No puedes definir políticas de recursos condicionales. Por ejemplo, no puedes crear una política que conceda acceso a ningún recurso que tenga o vaya a tener un nombre que empiece por una cadena concreta, como testing.

Ejemplo de caso práctico

Por ejemplo, supongamos que tu organización tiene dos conjuntos de usuarios. Un conjunto gestiona tu infraestructura principal con el rol de administrador de DevOps. Otro conjunto gestiona tipos de entidades concretos y sus funciones, como un ingeniero de datos.

Un administrador de DevOps gestiona los almacenes de características y los tipos de entidades a nivel de proyecto. Cuando los ingenieros de datos solicitan un nuevo tipo de entidad, un administrador de DevOps puede crear y delegar la propiedad de ese tipo de entidad a los ingenieros de datos. Los ingenieros de datos pueden gestionar libremente las funciones de los tipos de entidades que les pertenecen, pero no pueden operar en el almacén de funciones ni en otros tipos de entidades. Este control, por ejemplo, permite a los administradores de DevOps limitar el acceso a tipos de entidades que contengan información sensible.

En este caso, el administrador de DevOps tiene el rol aiplatform.featurestoreAdmin a nivel de proyecto. Después, cuando un ingeniero de datos solicite un nuevo tipo de entidad, el administrador creará un nuevo tipo de entidad y, a continuación, asignará el rol aiplatform.entityTypeOwner al ingeniero de datos a nivel del tipo de entidad (como una política a nivel de recurso).

Obtener política de IAM

Puedes ver la política de gestión de identidades y accesos actual de un almacén de características o un tipo de entidad mediante la Google Cloud consola o la API.

UI web

  1. En la sección Vertex AI de la Google Cloud consola, ve a la página Funciones.

    Ir a la página Funciones

  2. Selecciona una región en la lista desplegable Región.
  3. En la tabla de características, seleccione un almacén de características o un tipo de entidad de la columna Almacén de características o Tipo de entidad.
  4. Haz clic en Permisos.
  5. Para mostrar los permisos a nivel de recurso, desactiva Mostrar permisos heredados.

    Las principales que tienen acceso al recurso seleccionado se agrupan por rol.

  6. Despliega un rol para ver qué principales tienen asignado ese rol.

REST

Para obtener la política de gestión de identidades y accesos de un recurso, envía una solicitud POST que utilice el método getIamPolicy. En el siguiente ejemplo se obtiene una política de tipo de entidad.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION_ID: región en la que se encuentra el almacén de características, como us-central1.
  • PROJECT_ID: tu ID de proyecto.
  • FEATURESTORE_ID: ID del almacén de características.
  • ENTITY_TYPE_ID: ID del tipo de entidad.

Método HTTP y URL:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el comando siguiente:

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

Ejecuta el comando siguiente:

$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

Deberías recibir una respuesta JSON similar a la siguiente:

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

Definir una política de gestión de identidades y accesos

Puedes definir una política de gestión de identidades y accesos en un almacén de características o en un tipo de entidad.

UI web

  1. En la sección Vertex AI de la Google Cloud consola, ve a la página Funciones.

    Ir a la página Funciones

  2. Selecciona una región en la lista desplegable Región.
  3. En la tabla de características, seleccione un almacén de características o un tipo de entidad de la columna Almacén de características o Tipo de entidad.
  4. Haz clic en Permisos.
  5. Haz clic en Añadir principal.
  6. Especifica una cuenta principal y uno o varios roles que se asociarán a la cuenta principal.
  7. Haz clic en Guardar.

REST

Para definir la política de gestión de identidades y accesos de un recurso, envía una solicitud POST que utilice el método setIamPolicy. En el siguiente ejemplo se define una política en un tipo de entidad.

Si se define una política de gestión de identidades y accesos, se anula cualquier política que ya exista (los cambios no se añaden). Si quieres modificar la política de un recurso, usa el método getIamPolicy para obtener la política actual y, a continuación, haz los cambios que quieras. Incluya la política modificada junto con la etag en su solicitud setIamPolicy.

Si recibes el código de error 409, significa que se ha enviado una solicitud SetIamPolicy simultánea que ha actualizado la política. Haz una GetIamPolicy para obtener el etag actualizado de la política y, a continuación, vuelve a intentar la solicitud SetIamPolicy incluyendo el nuevo etag.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION_ID: región en la que se encuentra el almacén de características, como us-central1.
  • PROJECT_ID: tu ID de proyecto.
  • FEATURESTORE_ID: ID del almacén de características.
  • ENTITY_TYPE_ID: ID del tipo de entidad.
  • ROLE: rol de gestión de identidades y accesos que incluye los permisos para conceder, como roles/aiplatform.featurestoreDataViewer.
  • PRINCIPAL: la entidad a la que se le conceden los permisos del rol, como user:myuser@example.com.
  • ETAG: valor de cadena que se usa para evitar que las actualizaciones simultáneas de una política se sobrescriban entre sí. Este valor se devuelve como parte de la respuesta getIamPolicy.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "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",
      ]
    }
  ]
}

Verificar los permisos de gestión de identidades y accesos de un recurso

Puedes verificar si el usuario autenticado tiene permisos de gestión de identidades y accesos específicos para un almacén de características o un tipo de entidad.

REST

Para verificar si un usuario tiene permisos de IAM específicos para un recurso, envía una solicitud POST que utilice el método testIamPermissions. En el siguiente ejemplo, se comprueba si el usuario autenticado tiene un conjunto de permisos de gestión de identidades y accesos para un tipo de entidad.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION_ID: región en la que se encuentra el almacén de características, como us-central1.
  • PROJECT_ID: tu ID de proyecto.
  • FEATURESTORE_ID: ID del almacén de características.
  • ENTITY_TYPE_ID: ID del tipo de entidad.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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
Deberías recibir una respuesta JSON similar a la siguiente. La respuesta solo incluye los permisos del cuerpo JSON de la solicitud que están disponibles para el usuario autenticado.
{
  "permissions": [
    "aiplatform.googleapis.com/entityTypes.get",
    "aiplatform.googleapis.com/entityTypes.readFeatureValues",
    "aiplatform.googleapis.com/entityTypes.writeFeatureValues"
  ]
}