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.

Ermitteln Sie in der Google Cloud Console oder mit dem gcloud-Befehlszeilentool das entsprechende Dienstkonto für Ihr Projekt:

Cloud Console

Rufen Sie in der Cloud Console die Seite "IAM" auf und ermitteln Sie das Mitglied, das dem zuvor in diesem Abschnitt beschriebenen E-Mail-Adressformat entspricht. 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 das gcloud-Tool 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.

  1. Weisen Sie dem von Google verwalteten AI Platform-Dienstkonto Ihres Projekts die Rolle "Dienstkontoadministrator" (roles/iam.serviceAccountAdmin) für Ihr neues benutzerdefiniertes Dienstkonto zu. Verwenden Sie dazu das gcloud-Tool, um den folgenden Befehl auszuführen:

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

    Ersetzen Sie in diesem Befehl die folgenden Platzhalter:

    • GOOGLE_MANAGED_SERVICE_ACCOUNT ist die E-Mail-Adresse des Google Cloud ML Engine Service Agent Ihres Projekts. Informationen zum Ermitteln dieser E-Mail-Adresse erhalten Sie in einem vorherigen Abschnitt dieses Leitfadens.

    • CUSTOM_SERVICE_ACCOUNT ist die E-Mail-Adresse des neuen nutzerverwalteten Dienstkontos, das Sie in einem vorherigen Schritt dieses Abschnitts erstellt haben.

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 dem gcloud-Tool 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.

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:

Implizierte 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

client = bigquery.Client(project=PROJECT_ID)

Nächste Schritte