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 |
| 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 Wenn Sie einen Workflowaufruf aus einem Kompilierungsergebnis erstellen, wird das im Feld 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
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 nach den Dataform-Logs für
actAszu 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 = falseWenn 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_IDdurch Ihre Google Cloud Projekt-ID.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-MethodeCreateWorkflowInvocationist.workflowInvocation: der Ressourcenname des Workflowaufrufs.- Das Format des Ressourcennamens ist:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowInvocations/WORKFLOW_INVOCATION_ID.
- Das Format des Ressourcennamens ist:
compilationResultoderworkflowConfig: der Ressourcenname der für den Aufruf verwendeten Quelle.- Das Format des Ressourcennamens für
compilationResultist:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/compilationResults/COMPILATION_RESULT_ID. - Das Format des Ressourcennamens für
workflowConfigist:projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- Das Format des Ressourcennamens für
create_repository_contextoderupdate_repository_context: vorhanden, wenn die API-MethodeCreateRepositoryoderUpdateRepositoryist.repository: der Ressourcenname des Dataform-Repositorys.- Das Format des Ressourcennamens ist:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID
- Das Format des Ressourcennamens ist:
update_release_config_context: vorhanden, wenn die API-MethodeUpdateReleaseConfigist.releaseConfig: der Ressourcenname der Releasekonfiguration.- Das Format des Ressourcennamens ist:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/releaseConfigs/RELEASE_CONFIG_ID.
- Das Format des Ressourcennamens ist:
create_workflow_config_contextoderupdate_workflow_config_context: vorhanden, wenn die API-MethodeCreateWorkflowConfigoderUpdateWorkflowConfigist.workflowConfig: der Ressourcenname der Workflowkonfiguration.- Das Format des Ressourcennamens ist:
projects/PROJECT_ID/locations/LOCATION_ID/repositories/REPOSITORY_ID/workflowConfigs/WORKFLOW_CONFIG_ID.
- Das Format des Ressourcennamens ist:
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:
Notieren Sie sich in den
jsonPayload-Details die E-Mail-Adresse im Feldcaller, um den Prinzipal zu identifizieren.Notieren Sie sich die E-Mail-Adresse im Feld
serviceAccount, um das Dienstkonto zu identifizieren.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.
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:
createoderpatch- Wenn die Eigenschaft
Repository.ServiceAccountfestgelegt ist, sollte Ihnen die Rolle „Dienstkontonutzer“ für diese Eigenschaft gewährt worden sein. - Wenn Sie die Methode
patchaufrufen, sollte Ihnen die Rolle „Dienstkontonutzer“ für alle effektiven Dienstkonten in allen Workflowkonfigurationen im Repository gewährt worden sein.
- Wenn die Eigenschaft
workflowConfigs.createoderworkflowConfigs.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“:
Rufen Sie in der Google Cloud Console 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 Prinzipale 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 folgendes Format:
service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.comErsetzen Sie
PROJECT_NUMBERdurch Ihre Google Cloud Projektnummer.Wählen Sie in der Liste Rolle auswählen die Rolle Dienstkontonutzer aus.
Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie die Rolle Ersteller von Dienstkonto-Tokens 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 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.actAsBerechtigung 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.actAsfü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
- Informationen zum Erstellen eines Repositorys finden Sie unter Repository erstellen.
- Weitere Informationen zur Verwendung von Dataform mit BigQuery finden Sie unter Übersicht über Workflows.
- Informationen zum Erstellen einer Workflowkonfiguration finden Sie unter Ausführungen planen.
- Informationen zum Erstellen einer Releasekonfiguration finden Sie unter Kompilierungen konfigurieren.