Der strenge „Act-as“-Modus ermöglicht eine zusätzliche Sicherheitsprüfung für die folgenden Nutzeraktionen in Dataform:
- Repository erstellen oder aktualisieren
- Workflowkonfiguration erstellen oder aktualisieren
- Workflow-Aufruf 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 ist das Dienstkonto, dessen Anmeldedaten zum Ausführen von Workflows verwendet werden.
Weitere Informationen finden Sie unter Dienstkonten an Ressourcen anhängen.
Sie haben folgende Möglichkeiten, diese Berechtigungen zu aktivieren:
- Beim Erstellen eines Repositorys
- Vorhandenes Repository mit dem Repository-Flag
strict_act_as_checksaktualisieren
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 Logging ansehen:
Loganzeige (
roles/logging.viewer) für das Projekt -
IAM-Rollen für Nutzer 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.
„Act-as“-Berechtigungen für das effektive Dienstkonto prüfen
Damit Ihre Dataform-Workflows sicher und ohne Unterbrechung ausgeführt werden, ist es wichtig, die „Act-as“-Berechtigungen für die verwendeten Dienstkonten zu überprüfen. In diesem Abschnitt wird erläutert, wie Sie das effektive Dienstkonto für Ihre Ressourcen ermitteln, mit Cloud Logging nach Berechtigungsproblemen suchen und dann alle gefundenen Probleme beheben.
Gültiges Dienstkonto ermitteln
Das effektive Dienstkonto, mit dem die Arbeitsabläufe ausgeführt werden, hängt vom Ressourcentyp und den folgenden Bedingungen ab:
| Ressourcentyp | Gültiges Dienstkonto |
|---|---|
| Repositories | Wenn Sie beim Erstellen des Repositorys ein benutzerdefiniertes Dienstkonto auswählen, wird das Andernfalls wird standardmäßig der Dataform-Dienst-Agent verwendet. |
| Workflowkonfiguration | Sie können ein benutzerdefiniertes Dienstkonto auswählen, wenn Sie die Workflowkonfiguration erstellen. Andernfalls wird standardmäßig der Dataform-Dienst-Agent des Repositorys verwendet. |
| Workflow-Aufruf | Wenn das Kompilierungsergebnis Wenn Sie einen Workflow-Aufruf aus einem Kompilierungsergebnis erstellen, wird das Andernfalls wird standardmäßig der Dataform-Dienst-Agent des Repositorys verwendet. |
Berechtigungsprobleme in Cloud Logging prüfen
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 identifizieren und zu erteilen. Wenn Sie diese Logs regelmäßig prüfen, können Sie sicherstellen, dass Ihre Dataform-Workflows und -Konfigurationen ohne Unterbrechung funktionieren.
Logs in Cloud Logging ansehen
Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
Wählen Sie das Google Cloud -Projekt aus, in dem Sie die Logs prüfen möchten.
Verwenden Sie den Abfrageeditor, um die Dataform-
actAs-Logs mit den folgenden Optionen zu filtern:Wenn Sie nur die
actAs-Prüfungen auflisten möchten, die fehlgeschlagen sind und Maßnahmen erfordern, verwenden Sie die folgende Abfrage:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result" jsonPayload.dryRunResult = falseVerwenden Sie die folgende Abfrage, um alle
actAs-Prüfungen aufzulisten:logName: "projects/PROJECT_ID/logs/dataform.googleapis.com%2Factas_dry_run_result"
Ersetzen Sie
PROJECT_IDdurch IhreGoogle Cloud Projekt-ID.Klicken Sie auf Abfrage ausführen.
Logeinträge interpretieren
Maximieren Sie einen Logeintrag in den Abfrageergebnissen, um die folgenden jsonPayload-Felder aufzurufen:
| Feld | Typ | Beschreibung |
|---|---|---|
dryRunResult |
Boolesch | true: Die Berechtigungsprüfung wurde bestanden.false: Die Prüfung ist fehlgeschlagen. Dem Hauptkonto des Aufrufers 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 das Anrufer-Hauptkonto versucht hat, zu agieren. Dieses Feld ist normalerweise 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 vollqualifizierten Google Cloud Ressourcennamen der beteiligten Dataform-Entitäten. Diese Namen folgen den in der folgenden Liste gezeigten Standardstrukturen, sodass Sie die Ressourcen genau identifizieren können.
create_workflow_invocation_context: vorhanden, wenn die API-MethodeCreateWorkflowInvocationist.workflowInvocation: Der Ressourcenname des Workflow-Aufrufs.- Der Ressourcenname hat das folgende Format:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
- Der Ressourcenname hat das folgende Format:
compilationResultoderworkflowConfig: Der Ressourcenname der Quelle, die für den Aufruf verwendet wurde.- Der Ressourcenname für
compilationResulthat das folgende Format:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID. - Der Ressourcenname für
workflowConfighat das folgende Format:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- Der Ressourcenname für
create_repository_contextoderupdate_repository_context: vorhanden, wenn die API-MethodeCreateRepositoryoderUpdateRepositoryist.repository: Der Ressourcenname des Dataform-Repositorys.- Der Ressourcenname hat das folgende Format:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
- Der Ressourcenname hat das folgende Format:
update_release_config_context: vorhanden, wenn die API-MethodeUpdateReleaseConfigist.releaseConfig: Der Ressourcenname der Release-Konfiguration.- Der Ressourcenname hat das folgende Format:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
- Der Ressourcenname hat das folgende Format:
create_workflow_config_contextoderupdate_workflow_config_context: vorhanden, wenn die API-MethodeCreateWorkflowConfigoderUpdateWorkflowConfigist.workflowConfig: Der Ressourcenname der Workflowkonfiguration.- Der Ressourcenname hat das folgende Format:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- Der Ressourcenname hat das folgende Format:
Um die dokumentierten Formate mit dem Logeintrag zu vergleichen, ersetzen Sie Folgendes:
PROJECT_ID: die eindeutige Kennung IhresGoogle 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 der Erstellung gegeben wurde.COMPILATION_RESULT_ID: Die vom System generierte eindeutige Kennung 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
Wenn Sie Logeinträge finden, in denen das Feld dryRunResult den Wert false hat, gehen Sie so vor:
Notieren Sie sich in den
jsonPayload-Details die E-Mail-Adresse im Feldcaller, um den Hauptnutzer zu identifizieren.Notieren Sie sich die E-Mail-Adresse im Feld
serviceAccount, um das Dienstkonto zu identifizieren.Prüfen Sie, ob das aufrufende Hauptkonto berechtigt ist, als Dienstkonto zu agieren. Wenn Sie diese Berechtigung erteilen, kann der Aufrufer die Berechtigungen des Dienstkontos verwenden.
Wenn der Zugriff beabsichtigt ist, weisen Sie dem aufrufenden Hauptkonto die Rolle „Dienstkontonutzer“ (
roles/iam.serviceAccountUser) für das Ziel-Dienstkonto zu. Weitere Informationen finden Sie unter IAM-Rolle „Dienstkontonutzer“ zuweisen.
Nachdem Sie die Rolle zugewiesen haben, sollte in zukünftigen Logs für diese Kombination aus Aufrufer und Dienstkonto dryRunResult: true angezeigt werden.
IAM-Rolle „Dienstkontonutzer“ gewähren
Die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) enthält die Berechtigung iam.serviceAccounts.actAs, die für den strengen „Act-as“-Modus erforderlich ist. Wenn Sie die Dataform API verwenden, muss Ihnen die Rolle „Dienstkontonutzer“ für das effektive Dienstkonto basierend auf der projects.locations.repositories-Methode, die Sie aufrufen, zugewiesen sein:
createoderpatch- Wenn die Property
Repository.ServiceAccountfestgelegt ist, sollten Sie die Rolle „Dienstkontonutzer“ für diese Property haben. - Wenn Sie die Methode
patchaufrufen, sollten Sie die Rolle „Dienstkontonutzer“ für alle effektiven Dienstkonten in allen Workflowkonfigurationen im Repository haben.
- Wenn die Property
workflowConfigs.createoderworkflowConfigs.patch- Sie sollten die Rolle „Dienstkontonutzer“ für das effektive Dienstkonto haben, das in der Workflowkonfiguration verwendet wird.
releaseConfigs.patch- Sie sollten die Rolle „Dienstkontonutzer“ für alle effektiven Dienstkonten haben, die in den Workflowkonfigurationen mit dieser Release-Konfiguration verwendet werden.
workflowInvocations.create- Sie sollten die Rolle „Dienstkontonutzer“ für das effektive Dienstkonto haben, das beim Aufrufen des Workflows verwendet wird.
So weisen Sie einem benutzerdefinierten Dienstkonto die Rolle „Dienstkontonutzer“ zu:
Rufen Sie in der Google Cloud Console die Seite IAM > Dienstkonten auf.
Wählen Sie ein Projekt aus.
Wählen Sie auf der Seite Dienstkonten für Projekt „PROJECT_NAME“ Ihr benutzerdefiniertes Dienstkonto aus.
Rufen Sie Hauptkonten mit Zugriff auf und klicken Sie dann auf Zugriff gewähren.
Geben Sie im Feld Neue Hauptkonten die ID Ihres Dataform-Standarddienst-Agents ein.
Die ID Ihres Dataform-Standarddienst-Agents hat das folgende Format:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comWählen Sie in der Liste Rolle auswählen die Rolle Dienstkontonutzer aus.
Klicken Sie auf Speichern.
Weitere Informationen finden Sie unter Erforderliche Rollen zum Erstellen einer Workflowkonfiguration und Erforderliche Rollen zum Erstellen einer Releasekonfiguration.
Auswirkungen des strengen „Act-as“-Modus auf automatische Releases und Ausführungen
Wenn der strikte „Act-as“-Modus aktiviert ist, wirkt sich das auf automatische Repository-Releases und automatische Workflow-Ausführungen aus:
Für Repositories, die nicht mit Drittanbieter-Repositories verbunden sind:
- Sie können in Release-Konfigurationen keinen Cron-Zeitplan für automatische Releases festlegen. Dies wird erzwungen, um zu verhindern, dass Codeänderungen, die von einem Nutzer vorgenommen wurden, der möglicherweise nicht die erforderlichen
iam.serviceAccounts.actAs-Berechtigungen für Downstream-Dienstkonten hat, automatisch bereitgestellt werden. - Geplante Workflowausführungen mit einem Cron-Zeitplan in Workflowkonfigurationen bleiben aktiviert. Damit diese automatisierten Ausführungen erfolgreich sind, müssen Sie dem Standard-Dataform-Dienst-Agent die Berechtigung
iam.serviceAccounts.actAsfür das effektive Dienstkonto erteilen, das in der Workflowkonfiguration angegeben ist.
Für Repositories, die mit Drittanbieter-Repositories verbunden sind:
- Geplante Releases und geplante Workflow-Ausführungen sind zulässig.
- Wenn Sie eine automatische Freigabe über eine Releasekonfiguration oder eine automatische Ausführung über eine Workflowkonfiguration aktivieren möchten, müssen Sie dem Dataform-Standarddienst-Agent die Berechtigung
iam.serviceAccounts.actAsfür das entsprechende effektive Dienstkonto erteilen:- Bei einer automatischen Releasekonfiguration müssen Sie die Berechtigung für die effektiven Dienstkonten aller Workflowkonfigurationen erteilen, die durch diese Releasekonfiguration ausgelöst werden.
- Bei einer automatischen Workflowkonfiguration gewähren Sie die Berechtigung für das effektive Dienstkonto, das von dieser Workflowkonfiguration verwendet wird.
Nächste Schritte
- Informationen zum Erstellen eines Repositorys finden Sie unter Repository erstellen.
- Weitere Informationen zur Verwendung von Dataform mit BigQuery finden Sie unter Workflows.
- Informationen zum Erstellen einer Workflowkonfiguration finden Sie unter Läufe planen.
- Informationen zum Erstellen einer Releasekonfiguration finden Sie unter Kompilierungen konfigurieren.