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 la cuenta de servicio administrada por Google

De forma predeterminada, AI Platform Training usa una cuenta de servicio administrada por Google para ejecutar trabajos de entrenamiento. Esta cuenta 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.

Busca la cuenta de servicio correspondiente para tu proyecto en Google Cloud Console o mediante la herramienta de línea de comandos de gcloud:

Cloud Console

Ve a la página IAM en Cloud Console y busca al miembro que coincida con el formato de 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 un entorno de shell en el que inicializaste la herramienta 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 de la cuenta de servicio de AI Platform de tu proyecto administrada por Google.

Esta cuenta de servicio administrada por Google 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 de la cuenta de servicio administrada por Google.

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 herramienta 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.

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 código que seleccione explícitamente un proyecto:

Selección explícita del proyecto

from google.cloud import bigquery

client = bigquery.Client(project=PROJECT_ID)

¿Qué sigue?