Training mit einem benutzerdefinierten Dienstkonto

Sie können AI Platform Training so konfigurieren, dass es ein Dienstkonto Ihrer Wahl nutzt, wenn es Ihre Trainingsanwendung ausführt. Mit einem benutzerdefinierten Dienstkonto können Sie festlegen, auf welche Google Cloud-Ressourcen Ihr Trainingscode zugreifen darf, ohne dass Sie dem Dienstkonto, das AI Platform Training standardmäßig verwendet, zu viele Berechtigungen erteilen müssen. Darüber hinaus können Sie ein benutzerdefiniertes Dienstkonto nutzen, um Ihrem Code Zugriff auf zusätzliche Google Cloud-Dienste wie Secret Manager zu gewähren.

Der Schwerpunkt der Anleitung liegt auf den Berechtigungen von AI Platform Training-Ressourcen für den Zugriff auf andere Google Cloud-Ressourcen. Weitere Informationen zu den Berechtigungen, die Sie benötigen, um auf AI Platform Training-Ressourcen zuzugreifen, finden Sie unter Zugriffssteuerung.

Informationen zum von Google verwalteten Dienstkonto

AI Platform Training verwendet zum Ausführen von Trainingsjobs standardmäßig ein von Google verwaltetes Dienstkonto. Dieses Dienstkonto wird durch eine E-Mail-Adresse im folgenden Format identifiziert:

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

PROJECT_NUMBER muss durch die Projektnummer für Ihr Google Cloud-Projekt ersetzt werden.

Suchen Sie das entsprechende Dienstkonto für Ihr Projekt in der Google Cloud Console oder mithilfe der Google Cloud CLI:

Google Cloud Console

Rufen Sie in der Google Cloud Console die Seite IAM auf, wählen Sie Von Google bereitgestellte Rollenzuweisungen hinzufügen aus und suchen Sie das Hauptkonto, das mit dem E-Mail-Adressformat übereinstimmt, wie im vorherigen Abschnitt beschrieben. Das Dienstkonto hat auch den Namen Google Cloud ML Engine Service Agent.

Zur Seite "IAM"

gcloud

Führen Sie den folgenden Befehl in einer Shell-Umgebung aus, in der Sie die gcloud CLI initialisiert haben:

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

Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

Dieser Befehl gibt Folgendes aus:

serviceAccount:GOOGLE_MANAGED_SERVICE_ACCOUNT

GOOGLE_MANAGED_SERVICE_ACCOUNT ist die E-Mail-Adresse des von Google verwalteten AI Platform-Dienstkontos Ihres Projekts.

Für dieses von Google verwaltete Dienstkonto gelten Berechtigungen, die für die meisten Trainingsjobs geeignet sind. Beispielsweise kann es Daten aus Cloud Storage-Buckets im selben Google Cloud-Projekt lesen und in diese schreiben.

Wenn Ihre Trainingsanwendungen mit zusätzlichen Berechtigungen ausgeführt werden sollen, können Sie diesem Dienstkonto weitere Rollen der Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) zuweisen. Beispielsweise haben Sie die Möglichkeit, Zugriff auf Cloud Storage-Buckets in anderen Google Cloud-Projekten zu gewähren.

Benutzerdefiniertes Dienstkonto verwenden

Wenn Sie Google Cloud-Berechtigungen für einen bestimmten Trainingsjob gewähren oder einschränken möchten, verwenden Sie ein benutzerdefiniertes Dienstkonto anstelle des von Google verwalteten Dienstkontos.

Richten Sie dazu als Erstes ein benutzerdefiniertes Dienstkonto ein. Geben Sie dann dieses benutzerdefinierte Dienstkonto an, wenn Sie einen Trainingsjob erstellen.

Benutzerdefiniertes Dienstkonto einrichten

So richten Sie ein benutzerdefiniertes Dienstkonto ein:

  1. Erstellen Sie ein vom Nutzer verwaltetes Dienstkonto.

  2. Weisen Sie dem neuen Dienstkonto IAM-Rollen zu, um die Trainingsanwendung mit allen Berechtigungen bereitzustellen, die für die Ausführung erforderlich sind.

  3. Wenn sich das vom Nutzer verwaltete Dienstkonto in einem anderen Projekt als Ihre Trainingsjobs befindet, konfigurieren Sie das vom Nutzer verwaltete Dienstkonto, damit Sie es an die Trainingsjobs anhängen können.

Benutzerdefiniertes Dienstkonto für Ihren Trainingsjob angeben

Wenn Sie AI Platform Training so konfigurieren möchten, dass beim Ausführen Ihrer Trainingsanwendung Ihr benutzerdefiniertes Dienstkonto verwendet wird, geben Sie beim Erstellen eines Trainingsjobs das Feld trainingInput.serviceAccount an.

Wenn Sie mit der gcloud CLI einen Trainingsjob erstellen, müssen Sie zur Festlegung dieses Felds eine config.yaml-Datei verwenden. Beispiel:

trainingInput:
  serviceAccount: CUSTOM_SERVICE_ACCOUNT

Ersetzen Sie CUSTOM_SERVICE_ACCOUNT durch die E-Mail-Adresse des nutzerverwalteten Dienstkontos, das Sie in einem vorherigen Abschnitt dieses Leitfadens eingerichtet haben.

Über Trainingscode auf Google Cloud-Dienste zugreifen

Wenn Sie in Ihrem Trainingscode auf andere Google Cloud-Dienste über Ihren Trainingsjob zugreifen möchten, verwenden Sie Standardanmeldedaten für Anwendungen. Viele Google Cloud-Clientbibliotheken sind standardmäßig mit ADC authentifiziert. Sie müssen keine Umgebungsvariablen konfigurieren. AI Platform Training konfiguriert automatisch ADC für die Authentifizierung als benutzerdefiniertes Dienstkonto, das Sie im vorherigen Schritt angegeben haben.

Wenn Sie jedoch eine Google Cloud-Clientbibliothek im Trainingscode verwenden, stellt sie möglicherweise standardmäßig keine Verbindung zum richtigen Google Cloud-Projekt her. Wenn Ihre Berechtigungslogs Berechtigungsfehler melden, könnte dies das Problem sein. Wenn Sie einen Trainingsjob erstellen, führt AI Platform Training den Trainingscode nicht direkt in Ihrem Google Cloud-Projekt aus. Stattdessen führt AI Platform Training Ihren Code in einem separaten von Google verwalteten Projekt aus. AI Platform Training verwendet dieses Projekt ausschließlich für Vorgänge, die sich auf Ihr Projekt beziehen. Versuchen Sie daher nicht, eine Projekt-ID aus der Umgebung im Trainingscode abzuleiten, und geben Sie Projekt-IDs explizit an.

Wenn Sie eine Projekt-ID in Ihrem Code nicht hartcodieren möchten, können Sie auf die Umgebungsvariable CLOUD_ML_PROJECT_ID verweisen. AI Platform Training legt diese Umgebungsvariable in jedem Trainingscontainer so fest, dass sie die Projektnummer des Projekts enthält, in dem Sie ein benutzerdefiniertes Training initiiert haben. Viele Google Cloud-Tools akzeptieren eine Projektnummer, wenn sie eine Projekt-ID verwenden.

Führen Sie beispielsweise einen Trainingsjob in einem Google Cloud-Projekt mit der ID PROJECT_ID aus. Wenn Sie mit dem Python-Client für Google BigQuery auf eine BigQuery-Tabelle im selben Projekt zugreifen möchten, versuchen Sie nicht, das Projekt in Ihrem Trainingscode abzuleiten:

Implizite Projektauswahl

from google.cloud import bigquery

client = bigquery.Client()

Verwenden Sie stattdessen Code, der explizit ein Projekt auswählt:

Explizite Projektauswahl

from google.cloud import bigquery

project_number = os.environ["CLOUD_ML_PROJECT_ID"]

client = bigquery.Client(project=project_number)

Nächste Schritte