Entrena con una cuenta de servicio personalizada

Puedes configurar AI Platform Training para usar la cuenta de servicio que desees cuando se ejecuta la aplicación de entrenamiento. Usar una cuenta de servicio personalizada te permite personalizar a qué recursos de Google Cloud puede acceder tu código de entrenamiento sin otorgar permisos demasiado amplios a la cuenta de servicio que AI Platform Training usa de forma predeterminada. Además, puedes usar una cuenta de servicio personalizada para otorgar a tu código acceso a servicios adicionales de Google Cloud, como Secret Manager.

En esta guía, se analizan los permisos de los recursos de AI Platform Training para acceder a otros recursos de Google Cloud. Para obtener más información sobre los permisos que necesitas para acceder a los recursos de AI Platform Training, consulta Control de acceso.

Información sobre el agente de servicio

De forma predeterminada, AI Platform Training usa un agente de servicio para ejecutar trabajos de entrenamiento. Este agente de servicio se identifica con una dirección de correo electrónico que tiene el siguiente formato:

service-PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com

PROJECT_NUMBER se reemplaza por el número de proyecto de tu proyecto de Google Cloud.

Encuentra la cuenta de servicio correspondiente para tu proyecto en la consola de Google Cloud o mediante Google Cloud CLI:

Consola de Google Cloud

Ve a la página IAM en la consola de Google Cloud, selecciona Incluir asignaciones de roles proporcionados por Google y busca la principal que coincide con la dirección de correo electrónico que se describió antes en esta sección. La cuenta de servicio también tiene el nombre Google Cloud ML Engine Service Agent.

Ir a la página IAM

gcloud

Ejecuta el siguiente comando en el entorno de shell en el que inicializaste la CLI de gcloud:

gcloud projects get-iam-policy PROJECT_ID \
  --flatten="bindings[].members" \
  --format="table(bindings.members)" \
  --filter="bindings.role:roles/ml.serviceAgent" \
  | grep serviceAccount:

Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.

Con este comando se genera lo siguiente:

serviceAccount:GOOGLE_MANAGED_SERVICE_ACCOUNT

GOOGLE_MANAGED_SERVICE_ACCOUNT es la dirección de correo electrónico del agente de servicio de AI Platform de tu proyecto.

Este agente de servicio tiene permisos adecuados para la mayoría de los trabajos de entrenamiento. Por ejemplo, puede realizar operaciones de lectura y escritura en buckets de Cloud Storage en el mismo proyecto de Google Cloud.

Si necesitas que tus aplicaciones de entrenamiento se ejecuten con permisos adicionales, puedes asignar funciones adicionales de Identity and Access Management (IAM) a esta cuenta de servicio. Por ejemplo, puedes otorgarle acceso a los buckets de Cloud Storage en otros proyectos de Google Cloud.

Usa una cuenta de servicio personalizada

Si deseas otorgar o limitar los permisos de Google Cloud para un trabajo de entrenamiento específico, usa una cuenta de servicio personalizada en lugar del agente de servicio.

Para ello, primero configura una cuenta de servicio personalizada. Luego, especifica la cuenta de servicio personalizada cuando crees un trabajo de entrenamiento.

Configura una cuenta de servicio personalizada

Para configurar una cuenta de servicio personalizada, haz lo siguiente:

  1. Crea una cuenta de servicio administrada por el usuario.

  2. Otorga funciones de IAM nuevas a la cuenta de servicio para proporcionar a tu aplicación de entrenamiento cualquier permiso que necesite cuando se ejecuta.

  3. Si la cuenta de servicio administrada por el usuario está en un proyecto diferente del de tus trabajos de entrenamiento, configura la cuenta de servicio administrada por el usuario para que puedas adjuntarla a tu trabajos de entrenamiento.

Especifica la cuenta de servicio personalizada para el trabajo de entrenamiento

Para configurar AI Platform Training de modo que use la cuenta de servicio personalizada cuando ejecuta la aplicación de entrenamiento, especifica el campo trainingInput.serviceAccount cuando crees un trabajo de entrenamiento..

Si usas la CLI de gcloud para crear un trabajo de entrenamiento, debes usar un archivo config.yaml a fin de especificar este campo. Por ejemplo:

trainingInput:
  serviceAccount: CUSTOM_SERVICE_ACCOUNT

Reemplaza CUSTOM_SERVICE_ACCOUNT por la dirección de correo electrónico de la cuenta de servicio administrada por el usuario que configuraste en una sección anterior de esta guía.

Accede a los servicios de Google Cloud desde el código de entrenamiento

En tu código de entrenamiento, si deseas acceder a otros servicios de Google Cloud desde tu trabajo de entrenamiento, usa las credenciales predeterminadas de la aplicación (ADC). Muchas bibliotecas cliente de Google Cloud se autentican con ADC de forma predeterminada. No es necesario configurar variables de entorno. AI Platform Training configura ADC de manera automática para autenticarse como la cuenta de servicio personalizada que especificaste en el paso anterior.

Sin embargo, cuando usas una biblioteca cliente de Google Cloud en el código de entrenamiento, es posible que no se conecte al proyecto de Google Cloud correcto de manera predeterminada. Si tus registros de entrenamiento informan errores de permisos, esto podría ser el problema. Cuando creas un trabajo de entrenamiento, AI Platform Training no ejecuta el código de entrenamiento directamente en tu proyecto de Google Cloud. En su lugar, AI Platform Training ejecuta el código en un proyecto separado administrado por Google. AI Platform Training usa este proyecto exclusivamente para operaciones relacionadas con tu proyecto. Por lo tanto, no intentes inferir un ID de proyecto del entorno en tu código de entrenamiento; especifica explícitamente los ID del proyecto.

Si no deseas codificar un ID del proyecto en tu código de entrenamiento, puedes hacer referencia a la variable de entorno CLOUD_ML_PROJECT_ID. AI Platform Training establece esta variable de entorno en cada contenedor de entrenamiento para que contenga el número del proyecto en el que iniciaste el entrenamiento personalizado. Muchas herramientas de Google Cloud aceptan un número de proyecto cada vez que tomen un ID del proyecto.

Por ejemplo, considera ejecutar un trabajo de entrenamiento en un proyecto de Google Cloud con el ID PROJECT_ID. Si deseas usar el cliente de Python para Google BigQuery a fin de acceder a una tabla de BigQuery en el mismo proyecto, no intentes inferir el proyecto en tu código de entrenamiento:

Selección implícita del proyecto

from google.cloud import bigquery

client = bigquery.Client()

En su lugar, usa un código que elija de manera explícita un proyecto:

Selección explícita del proyecto

from google.cloud import bigquery

project_number = os.environ["CLOUD_ML_PROJECT_ID"]

client = bigquery.Client(project=project_number)

¿Qué sigue?