Strengen „Act-as“-Modus verwenden

Im Modus „Streng als“ wird eine zusätzliche Sicherheitsprüfung für die folgenden Nutzeraktionen in Dataform aktiviert:

  • Repository erstellen oder aktualisieren
  • Workflowkonfiguration erstellen oder aktualisieren
  • Workflowaufruf erstellen
  • Releasekonfiguration aktualisieren

Für diese zusätzliche Sicherheitsprüfung muss der Nutzer, der diese Aktionen ausführt, die Berechtigung iam.serviceAccounts.actAs für das effektive Dienstkonto haben. Das effektive Dienstkonto ist das Dienstkonto, dessen Anmeldedaten zum Ausführen von Workflows verwendet werden. Weitere Informationen finden Sie unter Dienstkonten an Ressourcen anhängen.

Der Modus „Streng als“ wird für alle Repositories erzwungen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Aufgaben in diesem Dokument benötigen:

  • Dienstkontonutzer (roles/iam.serviceAccountUser) für das benutzerdefinierte Dienstkonto
  • Logs in Cloud Logging ansehen: Log-Betrachter (roles/logging.viewer) für das Projekt
  • IAM-Rollen Nutzern oder Dienstkonten zuweisen: Dienstkontoadministrator (roles/iam.serviceAccountAdmin) für das Projekt

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Berechtigungen für „Als“ für das effektive Dienstkonto prüfen

Damit Ihre Dataform-Workflows sicher und ohne Unterbrechung ausgeführt werden können, ist es wichtig, die Berechtigungen für „Als“ für die verwendeten Dienstkonten zu prüfen. In diesem Abschnitt wird erläutert, wie Sie das effektive Dienstkonto für Ihre Ressourcen ermitteln, mit Logging nach Berechtigungsproblemen suchen und alle gefundenen Probleme beheben.

Effektives Dienstkonto ermitteln

Sie können das effektive Dienstkonto, das die Workflows ausführt, anhand des Ressourcentyps und der folgenden Bedingungen ermitteln:

Ressourcentyp Gültiges Dienstkonto
Repositories

Das für das Repository konfigurierte benutzerdefinierte Dienstkonto. Für alle Repositories ist ein benutzerdefiniertes Dienstkonto erforderlich. Dieses Dienstkonto ist im Feld Repository.ServiceAccount aufgeführt.

Workflowkonfiguration

Für neue Workflowkonfigurationen wird das benutzerdefinierte Dienstkonto verwendet, das Sie beim Erstellen einer Workflowkonfiguration auswählen. Wenn kein Dienstkonto ausgewählt ist, wird das Dienstkonto des Repositorys verwendet.

Workflow-Aufruf

Wenn das Kompilierungsergebnis eine WORKFLOW_CONFIG-Ressource ist, wird das effektive Dienstkonto der Workflowkonfiguration verwendet.

Wenn Sie einen Workflowaufruf aus einem Kompilierungsergebnis erstellen, wird das im Feld WorkflowInvocation.InvocationConfig aufgeführte Dienstkonto verwendet, sofern es festgelegt ist.

Andernfalls wird standardmäßig das auf Repositoryebene konfigurierte Dienstkonto verwendet.

In Cloud Logging nach Berechtigungsproblemen suchen

Zur Erhöhung der Sicherheit prüft Dataform, ob die Berechtigung iam.serviceAccounts.actAs für die von Dataform-Ressourcen verwendeten Dienstkonten fehlt.

Die Ergebnisse dieser Prüfungen, einschließlich potenzieller Berechtigungsprobleme, werden in Cloud Logging aufgezeichnet. Sie sollten diese Logs regelmäßig prüfen, um fehlende iam.serviceAccounts.actAs-Berechtigungen zu ermitteln und zu gewähren. Durch die Prüfung dieser Logs wird sichergestellt, dass Ihre Dataform-Workflows und ‑Konfigurationen ohne Unterbrechung funktionieren.

Logs in Cloud Logging ansehen

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.

    Zum Log-Explorer

  2. Wählen Sie das Google Cloud Projekt aus, in dem Sie die Logs prüfen möchten.

  3. Verwenden Sie den Abfrageeditor, um nach den Dataform-Logs für actAs zu filtern. Verwenden Sie dazu die folgenden Optionen:

    • Wenn Sie nur die fehlgeschlagenen actAs-Prüfungen auflisten möchten, für die Maßnahmen erforderlich sind, verwenden Sie die folgende Abfrage:

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      jsonPayload.dryRunResult = false
      
    • Wenn Sie alle actAs-Prüfungen auflisten möchten, verwenden Sie die folgende Abfrage:

      logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
      

    Ersetzen Sie PROJECT_ID durch Ihre Google Cloud Projekt-ID.

  4. Klicken Sie auf Abfrage ausführen.

Logeinträge interpretieren

Maximieren Sie einen Logeintrag in den Abfrageergebnissen, um die folgenden jsonPayload-Felder anzusehen:

Feld Typ Beschreibung
dryRunResult Boolesch true: Die Berechtigungsprüfung wurde bestanden.

false: Die Prüfung ist fehlgeschlagen. Dem aufrufenden Hauptkonto fehlt die Berechtigung iam.serviceAccounts.actAs für das Dienstkonto.
caller String Die E-Mail-Adresse des Hauptkontos (Nutzer oder Dienstkonto), das den API-Aufruf initiiert hat.
serviceAccount String Das Dienstkonto, als das sich das aufrufende Hauptkonto ausgeben wollte. Dieses Feld ist in der Regel vorhanden, wenn das Feld dryRunResult den Wert false hat.
apiMethod String Die Dataform API-Methode, die die Prüfung ausgelöst hat, z. B. CreateWorkflowInvocation oder UpdateRepository.
*_context Objekt Ein Objekt mit Ressourcennamen, die für die aufgerufene API-Methode relevant sind. Weitere Informationen finden Sie unter Kontextobjekte.
Kontextobjekte

Der Logeintrag enthält ein Kontextobjekt in den jsonPayload-Feldern. Die Felder in diesem Objekt enthalten die voll qualifizierten Google Cloud Ressourcen Namen der beteiligten Dataform-Entitäten. Diese Namen folgen den in der folgenden Liste aufgeführten Standardstrukturen, sodass Sie die Ressourcen genau identifizieren können.

  • create_workflow_invocation_context: vorhanden, wenn die API-Methode CreateWorkflowInvocation ist.

    • workflowInvocation: der Ressourcenname des Workflowaufrufs.
      • Das Format des Ressourcennamens ist: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
    • compilationResult oder workflowConfig: der Ressourcenname der für den Aufruf verwendeten Quelle.
      • Das Format des Ressourcennamens für compilationResult ist: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID.
      • Das Format des Ressourcennamens für workflowConfig ist: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
  • create_repository_context oder update_repository_context: vorhanden, wenn die API-Methode CreateRepository oder UpdateRepository ist.

    • repository: der Ressourcenname des Dataform-Repositorys.
      • Das Format des Ressourcennamens ist: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
  • update_release_config_context: vorhanden, wenn die API-Methode UpdateReleaseConfig ist.

    • releaseConfig: der Ressourcenname der Releasekonfiguration.
      • Das Format des Ressourcennamens ist: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
  • create_workflow_config_context oder update_workflow_config_context: vorhanden, wenn die API-Methode CreateWorkflowConfig oder UpdateWorkflowConfig ist.

    • workflowConfig: der Ressourcenname der Workflowkonfiguration.
      • Das Format des Ressourcennamens ist: projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.

Um die dokumentierten Formate mit dem Logeintrag zu vergleichen, ersetzen Sie Folgendes:

  • PROJECT_ID: die eindeutige ID Ihres Google Cloud Projekts.
  • LOCATION_ID: die Region, in der sich Ihr Dataform-Repository befindet.
  • REPOSITORY_ID: die benutzerdefinierte ID des Dataform-Repositorys. Dies ist der Name, der dem Repository bei seiner Erstellung gegeben wurde.
  • COMPILATION_RESULT_ID: die vom System generierte eindeutige ID für ein Dataform-Kompilierungsergebnis.
  • RELEASE_CONFIG_ID: die benutzerdefinierte ID der Dataform-Releasekonfiguration.
  • WORKFLOW_CONFIG_ID: die benutzerdefinierte ID der Dataform-Workflowkonfiguration.

Berechtigungsprobleme beheben

Um in Logging ermittelte Berechtigungsprobleme zu beheben, ermitteln Sie die Ursache des Fehlers und führen Sie dann die entsprechenden Schritte zur Fehlerbehebung aus.

Fehlende Berechtigungen für „Als“ gewähren

Wenn Sie Logeinträge finden, in denen das Feld dryRunResult den Wert false hat, gehen Sie so vor:

  1. Notieren Sie sich in den jsonPayload-Details die E-Mail-Adresse im Feld caller, um den Prinzipal zu identifizieren.

  2. Notieren Sie sich die E-Mail-Adresse im Feld serviceAccount, um das Dienstkonto zu identifizieren.

  3. Prüfen Sie, ob das aufrufende Hauptkonto die Berechtigung haben sollte , sich als Dienstkonto auszugeben. Wenn Sie diese Berechtigung gewähren, kann der Aufrufer die Berechtigungen des Dienstkontos verwenden.

  4. Wenn der Zugriff beabsichtigt ist, gewähren Sie dem aufrufenden Hauptkonto die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für das Ziel -Dienstkonto. Weitere Informationen finden Sie unter Erforderliche IAM-Rollen gewähren.

Nachdem Sie die Rolle gewährt haben, sollte in zukünftigen Logs für diese Kombination aus Aufrufer und Dienstkonto dryRunResult: true angezeigt werden.

Anhängen von projektübergreifenden Dienstkonten verarbeiten

Wenn sich das Repository und das effektive Dienstkonto in verschiedenen Projekten befinden, kann die Anfrage, sich als Dienstkonto auszugeben, durch die Einschränkung der Organisationsrichtlinie iam.disableCrossProjectServiceAccountUsage blockiert werden.

Informationen zum Beheben dieses Problems finden Sie unter Dienstkonten das Anhängen über Projekte hinweg ermöglichen.

Erforderliche IAM-Rollen gewähren

Die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) enthält die iam.serviceAccounts.actAs Berechtigung, die für den Modus „Streng als“ erforderlich ist. Wenn Sie die Dataform API verwenden, muss Ihnen die Rolle „Dienstkontonutzer“ gewährt worden sein für das effektive Dienstkonto basierend auf der projects.locations.repositories Methode , die Sie aufrufen:

  • create oder patch
    • Wenn die Eigenschaft Repository.ServiceAccount festgelegt ist, sollte Ihnen die Rolle „Dienstkontonutzer“ für diese Eigenschaft gewährt worden sein.
    • Wenn Sie die Methode patch aufrufen, sollte Ihnen die Rolle „Dienstkontonutzer“ für alle effektiven Dienstkonten in allen Workflowkonfigurationen im Repository gewährt worden sein.
  • workflowConfigs.create oder workflowConfigs.patch
    • Ihnen sollte die Rolle „Dienstkontonutzer“ für das effektive Dienstkonto gewährt worden sein, das in der Workflowkonfiguration verwendet wird.
  • releaseConfigs.patch
    • Ihnen sollte die Rolle „Dienstkontonutzer“ für alle effektiven Dienstkonten gewährt worden sein, die in den Workflowkonfigurationen verwendet werden, die diese Releasekonfiguration verwenden.
  • workflowInvocations.create
    • Ihnen sollte die Rolle „Dienstkontonutzer“ für das effektive Dienstkonto gewährt worden sein, das im Workflowaufruf verwendet wird.

So gewähren Sie einem benutzerdefinierten Dienstkonto die Rolle „Dienstkontonutzer“:

  1. Rufen Sie in der Google Cloud Console IAM > Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie ein Projekt aus.

  3. Wählen Sie auf der Seite „Dienstkonten für Projekt "PROJECT_NAME" “ Ihr benutzerdefiniertes Dienstkonto aus.

  4. Rufen Sie Prinzipale mit Zugriff auf und klicken Sie dann auf Zugriff gewähren.

  5. Geben Sie im Feld Neue Hauptkonten die ID Ihres Dataform-Standarddienst-Agents ein.

    Die ID Ihres Dataform-Standarddienst-Agents hat folgendes Format:

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

    Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud Projektnummer.

  6. Wählen Sie in der Liste Rolle auswählen die Rolle Dienstkontonutzer aus.

  7. Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie die Rolle Ersteller von Dienstkonto-Tokens aus.

  8. Klicken Sie auf Speichern.

Weitere Informationen finden Sie unter Erforderliche Rollen zum Erstellen einer Workflowkonfiguration und Erforderliche Rollen zum Erstellen einer Releasekonfiguration

Auswirkungen des Modus „Streng als“ auf automatische Releases und Ausführungen

Der Modus „Streng als“ hat die folgenden Auswirkungen auf automatische Repository-Releases und automatische Workflowausführungen.

Für Repositories, die nicht mit Repositories von Drittanbietern verbunden sind:

  • Sie können in Releasekonfigurationen keinen Cron-Zeitplan für automatische Releases festlegen. Dadurch soll verhindert werden, dass Codeänderungen, die von einem Nutzer vorgenommen wurden, der möglicherweise nicht über die erforderlichen iam.serviceAccounts.actAs-Berechtigungen für nachgelagerte Dienstkonten verfügt, automatisch bereitgestellt werden.
  • Geplante Workflowausführungen mit einem Cron-Zeitplan in Workflowkonfigurationen bleiben aktiviert. Damit diese automatischen Ausführungen erfolgreich sind, müssen Sie dem Standard Dataform-Dienst-Agent die iam.serviceAccounts.actAs Berechtigung für das effektive Dienstkonto gewähren, das in der Workflowkonfiguration angegeben ist.

Für Repositories, die mit Repositories von Drittanbietern verbunden sind:

  • Geplante Releases und geplante Workflowausführungen sind zulässig.
  • Um ein automatisches Release aus einer Releasekonfiguration oder eine automatische Ausführung aus einer Workflowkonfiguration zu ermöglichen, müssen Sie dem Dataform-Standarddienst-Agent die Berechtigung iam.serviceAccounts.actAs für das entsprechende effektive Dienstkonto gewähren:
    • Gewähren Sie für eine automatische Releasekonfiguration die Berechtigung für die effektiven Dienstkonten aller Workflowkonfigurationen, die durch diese Releasekonfiguration ausgelöst werden.
    • Gewähren Sie für eine automatische Workflowkonfiguration die Berechtigung für das effektive Dienstkonto, das von dieser Workflowkonfiguration verwendet wird.

Nächste Schritte