Usar una cuenta de servicio personalizada

En esta guía se describe cómo configurar Vertex AI para que use una cuenta de servicio personalizada en los siguientes casos:

Cuándo usar una cuenta de servicio personalizada

Cuando se ejecuta Vertex AI, suele actuar con los permisos de una de las varias cuentas de servicio que Google crea y gestiona para tu proyecto de Google Cloud . Para conceder a Vertex AI un mayor acceso a otros Google Cloud servicios en determinados contextos, puedes añadir roles específicos a los agentes de servicio de Vertex AI.

Sin embargo, personalizar los permisos de los agentes de servicio puede no proporcionar el control de acceso específico que quieres. Algunos casos prácticos habituales son los siguientes:

  • Permitir menos permisos a las tareas y los modelos de Vertex AI. El agente de servicio predeterminado de Vertex AI tiene acceso a BigQuery y Cloud Storage.
  • Permitir que diferentes tareas accedan a diferentes recursos. Puede que quieras permitir que muchos usuarios inicien trabajos en un solo proyecto, pero que los trabajos de cada usuario solo tengan acceso a una tabla de BigQuery o a un bucket de Cloud Storage concretos.

Por ejemplo, puede que quieras personalizar individualmente cada trabajo de entrenamiento personalizado que ejecutes para tener acceso a diferentesGoogle Cloud recursos fuera de tu proyecto.

Además, personalizar los permisos de los agentes de servicio no cambia los permisos disponibles para un contenedor que ofrece predicciones de un Model entrenado de forma personalizada.

Para personalizar el acceso cada vez que realices un entrenamiento personalizado o para personalizar los permisos del contenedor de predicción de un Model con entrenamiento personalizado, debes usar una cuenta de servicio personalizada.

Acceso predeterminado

En esta sección se describe el acceso predeterminado disponible para los contenedores de entrenamiento personalizado y los contenedores de predicción de los recursos Model entrenados de forma personalizada. Cuando usas una cuenta de servicio personalizada, anulas este acceso para un recurso específico de CustomJob, HyperparameterTuningJob, TrainingPipeline o DeployedModel.

Contenedores de entrenamiento

Cuando creas un CustomJob, un HyperparameterTuningJob o un TrainingPipeline personalizado, el contenedor de entrenamiento se ejecuta de forma predeterminada con el agente del servicio de código personalizado de Vertex AI de tuGoogle Cloud proyecto.

Consulta más información sobre el agente de servicio de código personalizado de Vertex AI, incluido cómo darle acceso a recursos adicionales Google Cloud .

Contenedores de predicción

Cuando implementas un Model con entrenamiento personalizado en un Endpoint, el contenedor de predicción se ejecuta con una cuenta de servicio gestionada por Vertex AI. Esta cuenta de servicio es diferente de los agentes de servicio de Vertex AI.

La cuenta de servicio que usa el contenedor de predicción de forma predeterminada tiene permiso para leer artefactos de modelos que Vertex AI pone a disposición en un URI almacenado en la variable de entorno AIP_STORAGE_URI. No confíes en que la cuenta de servicio tenga otros permisos. No puedes personalizar los permisos de la cuenta de servicio.

Configurar una cuenta de servicio personalizada

En las siguientes secciones se describe cómo configurar una cuenta de servicio personalizada para usarla con Vertex AI y cómo configurar un CustomJob, HyperparameterTuningJob, TrainingPipeline o DeployedModel para que use la cuenta de servicio. Ten en cuenta que no puedes configurar una cuenta de servicio personalizada para extraer imágenes de Artifact Registry. Vertex AI usa la cuenta de servicio predeterminada para extraer imágenes.

Configurar una cuenta de servicio personalizada

Para configurar una cuenta de servicio personalizada, sigue estos pasos:

  1. Crea una cuenta de servicio gestionada por el usuario. La cuenta de servicio gestionada por el usuario puede estar en el mismo proyecto que tus recursos de Vertex AI o en otro proyecto.

  2. Concede a tu nueva cuenta de servicio los roles de gestión de identidades y accesos que le permitan acceder a los Google Cloud servicios y recursos que quieras que Vertex AI pueda usar durante el entrenamiento personalizado o la predicción.

  3. Opcional: Si la cuenta de servicio gestionada por el usuario está en un proyecto distinto al de tus trabajos de entrenamiento, debes asignar el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio de Vertex AI del proyecto en el que estés usando Vertex AI.

    gcloud iam service-accounts add-iam-policy-binding \
        --role=roles/iam.serviceAccountTokenCreator \
        --member=serviceAccount:AI_PLATFORM_SERVICE_AGENT \
        CUSTOM_SERVICE_ACCOUNT
    
  4. Opcional: Si también tienes previsto usar la cuenta de servicio gestionada por el usuario para las predicciones, debes asignar el rol Administrador de cuentas de servicio (roles/iam.serviceAccountAdmin) al agente de servicio de Vertex AI del proyecto en el que uses Vertex AI:

    gcloud iam service-accounts add-iam-policy-binding \
      --role=roles/iam.serviceAccountAdmin \
      --member=serviceAccount:AI_PLATFORM_SERVICE_AGENT \
      CUSTOM_SERVICE_ACCOUNT
    

    Haz los cambios siguientes:

    • AI_PLATFORM_SERVICE_AGENT: dirección de correo del agente de servicio de Vertex AI de tu proyecto, que tiene el siguiente formato:

      service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com

      Para encontrar el agente de servicio de Vertex AI, ve a la página Gestión de identidades y accesos de la Google Cloud consola.

      Ir a IAM

    • CUSTOM_SERVICE_ACCOUNT: la dirección de correo de la nueva cuenta de servicio gestionada por el usuario que has creado en el primer paso de esta sección.

Especificar una cuenta de servicio personalizada para los recursos de Vertex AI

El proceso de configuración de Vertex AI para usar una cuenta de servicio específica en un recurso se denomina asociar la cuenta de servicio alrecurso. En las siguientes secciones se describe cómo asignar la cuenta de servicio que has creado en la sección anterior a varios recursos de Vertex AI.

Asociar una cuenta de servicio a un recurso de entrenamiento personalizado

Para configurar Vertex AI de forma que use tu nueva cuenta de servicio durante el entrenamiento personalizado, especifica la dirección de correo de la cuenta de servicio en el campo serviceAccount de un mensaje CustomJobSpec cuando inicies el entrenamiento personalizado. En función del tipo de recurso de entrenamiento personalizado que estés creando, la ubicación de este campo en tu solicitud de API será diferente:

  • Si vas a crear un CustomJob, especifica la dirección de correo de la cuenta de servicio en CustomJob.jobSpec.serviceAccount.

    Más información sobre cómo crear un CustomJob

  • Si vas a crear un HyperparameterTuningJob, especifica la dirección de correo de la cuenta de servicio en HyperparameterTuningJob.trialJobSpec.serviceAccount.

    Más información sobre cómo crear un HyperparameterTuningJob

  • Si vas a crear un TrainingPipeline personalizado sin ajuste de hiperparámetros, especifica la dirección de correo de la cuenta de servicio en TrainingPipeline.trainingTaskInputs.serviceAccount.

  • Si vas a crear un TrainingPipeline personalizado con ajuste de hiperparámetros, especifica la dirección de correo de la cuenta de servicio en TrainingPipeline.trainingTaskInputs.trialJobSpec.serviceAccount.

Asociar una cuenta de servicio a un contenedor que proporcione predicciones online

Para configurar el contenedor de predicciones de un Model entrenado de forma personalizada para que use tu nueva cuenta de servicio, especifica la dirección de correo de la cuenta de servicio cuando implementes el Model en un Endpoint:

Consola

Sigue las instrucciones de la sección Desplegar un modelo con la consolaGoogle Cloud . Cuando especifiques la configuración del modelo, selecciona la cuenta de servicio en la lista desplegable Cuenta de servicio.

gcloud

Sigue las instrucciones de Desplegar un modelo con la API de Vertex AI. Cuando ejecutes el comando gcloud ai endpoints deploy-model, usa la marca --service-account para especificar la dirección de correo de tu cuenta de servicio.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • ENDPOINT_ID: ID del endpoint.
  • LOCATION_ID: la región en la que usas Vertex AI.
  • MODEL_ID: ID del modelo que se va a implementar.
  • DEPLOYED_MODEL_NAME: nombre del DeployedModel. También puedes usar el nombre visible de la Model para la DeployedModel.
  • MACHINE_TYPE: opcional. Los recursos de la máquina que se usan en cada nodo de esta implementación. Su ajuste predeterminado es n1-standard-2. Más información sobre los tipos de máquinas
  • MIN_REPLICA_COUNT: número mínimo de nodos de esta implementación. El número de nodos se puede aumentar o reducir según lo requiera la carga de inferencia, hasta el número máximo de nodos y nunca por debajo de este número.
  • MAX_REPLICA_COUNT: número máximo de nodos de este despliegue. El número de nodos se puede aumentar o reducir según lo requiera la carga de inferencia, hasta este número de nodos y nunca por debajo del número mínimo de nodos.
  • CUSTOM_SERVICE_ACCOUNT: la dirección de correo de la cuenta de servicio. Por ejemplo: SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

Ejecuta el comando gcloud ai endpoints deploy-model:

Linux, macOS o Cloud Shell

gcloud ai endpoints deploy-model ENDPOINT_ID \
  --region=LOCATION \
  --model=MODEL_ID \
  --display-name=DEPLOYED_MODEL_NAME \
  --machine-type=MACHINE_TYPE \
  --min-replica-count=MIN_REPLICA_COUNT \
  --max-replica-count=MAX_REPLICA_COUNT \
  --traffic-split=0=100 \
  --service-account=CUSTOM_SERVICE_ACCOUNT

Windows (PowerShell)

gcloud ai endpoints deploy-model ENDPOINT_ID `
  --region=LOCATION `
  --model=MODEL_ID `
  --display-name=DEPLOYED_MODEL_NAME `
  --machine-type=MACHINE_TYPE `
  --min-replica-count=MIN_REPLICA_COUNT `
  --max-replica-count=MAX_REPLICA_COUNT `
  --traffic-split=0=100 `
  --service-account=CUSTOM_SERVICE_ACCOUNT

Windows (cmd.exe)

gcloud ai endpoints deploy-model ENDPOINT_ID ^
  --region=LOCATION ^
  --model=MODEL_ID ^
  --display-name=DEPLOYED_MODEL_NAME ^
  --machine-type=MACHINE_TYPE ^
  --min-replica-count=MIN_REPLICA_COUNT ^
  --max-replica-count=MAX_REPLICA_COUNT ^
  --traffic-split=0=100 ^
  --service-account=CUSTOM_SERVICE_ACCOUNT
 

API

Sigue las instrucciones de Desplegar un modelo con la API de Vertex AI. Cuando envíes la projects.locations.endpoints.deployModel solicitud, asigna al deployedModel.serviceAccount campo la dirección de correo de la cuenta de servicio.

Acceder a los Google Cloud servicios en tu código

Si configuras Vertex AI para que use una cuenta de servicio personalizada siguiendo las instrucciones de las secciones anteriores, tu contenedor de entrenamiento o tu contenedor de predicción podrán acceder a cualquier servicio y recurso al que tenga acceso la cuenta de servicio. Google Cloud

Para acceder a los servicios, escribe tu código de entrenamiento o tu código de servicio de predicciones para usar Credenciales predeterminadas de la aplicación (ADC) y especifica explícitamente el ID o el número de proyecto del recurso al que quieras acceder. Google Cloud Consulta más información sobre cómo escribir tu código para acceder a otros servicios Google Cloud.

Siguientes pasos