Zugriff mit IAM steuern

In diesem Dokument wird beschrieben, wie Sie in Dataform Folgendes tun:

Hinweis

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

Dataform den erforderlichen Zugriff gewähren

In diesem Abschnitt erfahren Sie, wie Sie die IAM-Rollen (Identity and Access Management) zuweisen, die Dataform-Dienst-Agents und benutzerdefinierte Dienstkonten zum Ausführen von Workflows in BigQuery benötigen.

Benutzerdefinierte Dienstkonten und Dataform-Dienst-Agents

Sie können benutzerdefinierte Dienstkonten so konfigurieren, dass Workflows in Ihrem Namen ausgeführt werden:

Wenn Sie ein Dataform-Repository oder eine Workflowkonfiguration erstellen, können Sie ein beliebiges Dienstkonto auswählen, für das Sie „act-as“-Berechtigungen haben. Sie müssen die erforderlichen „act-as“-Berechtigungen für alle Dienstkonten konfigurieren, die mit Ihren Dataform-Ressourcen verknüpft sind.

Wenn Sie Ihr erstes Dataform-Repository erstellen, generiert Dataform automatisch einen Dienst-Agenten. Dataform verwendet den Dienst-Agent, um in Ihrem Namen mit BigQuery zu interagieren.

Die ID Ihres Dataform-Dienst-Agents hat das folgende Format:

service-PROJECT_NUMBER@gcp-sa-dataform.

Ersetzen Sie PROJECT_NUMBER durch die numerische ID Ihres Projekts vonGoogle Cloud . Sie finden Ihre Google Cloud -Projekt-ID imGoogle Cloud Console-Dashboard. Weitere Informationen finden Sie unter Projektnamen, ‑nummer und ‑ID finden.

Erforderliche Rollen für Dataform-Dienst-Agents, benutzerdefinierte Dienstkonten und Google-Konten

Dataform-Dienst-Agents, benutzerdefinierte Dienstkonten und Nutzeranmeldedaten für ein Google-Konto, das zur Authentifizierung in Dataform verwendet wird, benötigen die folgenden BigQuery-IAM-Rollen, um Workflows in BigQuery ausführen zu können:

Weisen Sie dem Dataform-Dienst-Agent außerdem die folgenden Rollen für das effektive Dienstkonto für die Workflowkonfiguration zu. Diese Rollen sind erforderlich, damit der strikte „Handeln als“-Modus funktioniert.

Für automatische Repository-Releases und automatische Workflowausführungen weisen Sie dem Dataform-Dienst-Agent die Berechtigung iam.serviceAccounts.actAs für das effektive Dienstkonto zu.

Wenn Sie die Metadatenanreicherung in Knowledge Catalog und die Einbindung der Datenqualitäts-Scorecard aktivieren möchten, weisen Sie den benutzerdefinierten Dienstkonten oder Google-Konten, die für die Workflowausführung verwendet werden, die Rolle Dataplex Catalog Editor (roles/dataplex.catalogEditor) für das Projekt oder die Eintragsgruppe @bigquery zu.

Sicherheitsaspekte

Wenn Sie einem Dataform-Dienst-Agent, einem benutzerdefinierten Dienstkonto oder dem Google-Konto eines Nutzers die von Dataform benötigten Rollen zuweisen, sollten Sie die folgenden Sicherheitsaspekte berücksichtigen:

  • Jedes benutzerdefinierte Dienstkonto, dem die erforderlichen Rollen zugewiesen wurden, kann unabhängig von VPC Service Controls Zugriff auf BigQuery, Secret Manager oder Knowledge Catalog in dem Projekt erhalten, zu dem das Dienstkonto gehört. Wenn Dataform ein benutzerdefiniertes Dienstkonto zum Ausführen von Workflows verwendet, werden die Dataform-Anfragen so behandelt, als würden sie aus dem VPC Service Controls-Perimeter des Projekts stammen, das Ihr Repository enthält. Daher blockiert VPC Service Controls die Kommunikation zwischen Dataform und anderen Diensten wie BigQuery, Secret Manager oder Knowledge Catalog nicht, wenn sich diese Ressourcen im selben Dienstperimeter befinden.

    Weitere Informationen zum Verwalten dieser Sicherheitsgrenzen finden Sie unter VPC Service Controls konfigurieren.

  • Alle Nutzer mit der IAM-Berechtigung dataform.repositories.create können Code mit dem Dataform-Dienst-Agent und allen Berechtigungen ausführen, die diesem Dienst-Agent oder Dienstkonto gewährt wurden.

    Weitere Informationen finden Sie unter Sicherheitsaspekte für Dataform-Berechtigungen.

  • Um ein sicheres Berechtigungsmodell aufrechtzuerhalten, sollten Sie die Rollenbindungen des Dataform-Dienst-Agents regelmäßig prüfen. Eine ausführliche Anleitung zum Monitoring finden Sie unter Dienst-Agent-Berechtigungen mit Security Command Center überwachen.

Wenn Sie die Daten einschränken möchten, die ein Nutzer, Dienst-Agent oder Dienstkonto in BigQuery lesen oder schreiben kann, können Sie ausgewählten BigQuery-Datasets oder -Tabellen detaillierte BigQuery-IAM-Berechtigungen gewähren. Weitere Informationen finden Sie unter Zugriff auf Datasets steuern und Zugriff auf Tabellen und Ansichten steuern.

Damit Nutzer keine Aktionen ausführen können, während sie die Nutzeranmeldedaten für das Google-Konto eines anderen Nutzers verwenden, gelten die folgenden Einschränkungen:

  • Wenn Sie eine Workflowkonfiguration mit den Nutzeranmeldedaten eines anderen Google-Kontos ändern möchten, müssen Sie die Nutzeranmeldedaten für Ihr eigenes Google-Konto an die Workflowkonfiguration anhängen oder die Workflowkonfiguration so ändern, dass sie sich mit einem benutzerdefinierten Dienstkonto authentifiziert.
  • Sie können ein Kompilierungsergebnis für eine Release-Konfiguration nicht ändern, wenn es Workflow-Konfigurationen gibt, die auf die Release-Konfiguration verweisen und mit den Anmeldedaten eines anderen Google-Kontonutzers verknüpft sind.
  • Sie können eine Workflowkonfiguration nicht so festlegen, dass sie sich mit den Nutzeranmeldedaten eines Google-Kontos authentifiziert, und eine Releasekonfiguration mit einem Zeitplan referenzieren. Diese Einschränkung hat folgende Konsequenzen:

    • Sie können eine Release-Konfiguration nicht so aktualisieren, dass ein Zeitplan verwendet wird, wenn Workflow-Konfigurationen, die auf die Release-Konfiguration verweisen, so eingestellt sind, dass sie sich mit Google-Konto-Nutzeranmeldedaten authentifizieren.
    • Sie können keine Workflowkonfiguration erstellen, die sich mit Nutzeranmeldedaten eines Google-Kontos authentifiziert und auf eine Release-Konfiguration mit einem Zeitplan verweist.
    • Sie können keine Workflowkonfiguration erstellen oder aktualisieren, die Nutzeranmeldedaten eines Google-Kontos verwendet und auf eine Release-Konfiguration mit einem Zeitplan verweist.
  • Wenn Sie die Verwendung von Endnutzer-Anmeldedaten für Google-Konten nicht zulassen möchten, kann ein Administrator der Organisation eine benutzerdefinierte Einschränkung für die Organisationsrichtlinie erstellen, die das Festlegen von end_user_auth_config ablehnt. Weitere Informationen finden Sie unter Benutzerdefinierte Einschränkungen für Organisationsrichtlinien erstellen.

Erforderliche BigQuery-Rollen zuweisen

So weisen Sie Ihrem Dataform-Dienst-Agent, einem benutzerdefinierten Dienstkonto, das Sie in Dataform verwenden möchten, oder dem Google-Konto eines Nutzers, das Sie zur Authentifizierung in Dataform verwenden möchten, die erforderlichen BigQuery-IAM-Rollen zu:

  1. Rufen Sie in der Google Cloud Console die Seite Dataform auf.

    Zu Dataform

  2. Wählen Sie ein Repository aus oder erstellen Sie eines.

  3. Rufen Sie in der Google Cloud Console die Seite IAM auf.

    IAM aufrufen

  4. Klicken Sie auf Zugriff gewähren.

  5. Geben Sie im Feld Neue Hauptkonten die Dienst-Agent-ID, die Dienstkonto-ID oder die E-Mail-Adresse des Google-Kontos des Nutzers ein.

  6. Wählen Sie in der Liste Rolle auswählen die Rolle BigQuery Job User aus.

  7. Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie in der Liste Rolle auswählen die Rolle BigQuery-Dateneditor aus.

  8. Klicken Sie auf Weitere Rolle hinzufügen und wählen Sie in der Liste Rolle auswählen die Rolle BigQuery-Datenbetrachter aus.

  9. Klicken Sie auf Speichern.

Für automatische Workflows erforderliche Rollen zuweisen

Wenn Sie ein benutzerdefiniertes Dienstkonto in Dataform verwenden möchten, muss der Dataform-Dienst-Agent auf das benutzerdefinierte Dienstkonto zugreifen können. So kann Dataform Ihre Workflows mit den Berechtigungen ausführen, die für Ihr benutzerdefiniertes Dienstkonto definiert sind, anstatt mit den Berechtigungen des Dienst-Agent-Kontos.

Dazu müssen Sie dem Dataform-Dienst-Agent als Hauptkonto die Rolle Ersteller von Dienstkonto-Tokens (roles/iam.serviceAccountTokenCreator) zuweisen. Dadurch kann der Dataform-Dienst-Agent die Identität des Dienstkontos übernehmen, indem er kurzlebige Anmeldedaten, sogenannte Tokens, erstellt. Diese Tokens sind erforderlich, damit Dataform Workflows mit der Identität des benutzerdefinierten Dienstkontos ausführen kann.

Außerdem müssen Sie dem Dataform-Dienst-Agent die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) zuweisen. Dadurch kann der Dataform-Dienst-Agent neue automatische Workflowausführungen für Workflowkonfigurationen starten, die vom benutzerdefinierten Dienstkonto ausgeführt werden.

So gewähren Sie dem Dataform-Dienst-Agent Zugriff auf ein benutzerdefiniertes Dienstkonto:

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

    Zur Seite „Dienstkonten“

  2. Wählen Sie das Projekt von Google Cloud aus, in dem sich Ihr benutzerdefiniertes Dienstkonto befindet.

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

  4. Gehen Sie zu Hauptkonten mit Zugriff und klicken Sie dann auf Zugriff gewähren.

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

    Die ID Ihres Dataform-Dienst-Agents hat das folgende Format:

    service-PROJECT_NUMBER@gcp-sa-dataform.
    
  6. Wählen Sie in der Liste Rolle auswählen die Rollen Ersteller von Dienstkonto-Tokens und Dienstkontonutzer aus.

  7. Klicken Sie auf Speichern.

Das benutzerdefinierte Dienstkonto kann jetzt in Ihrem Dataform-Repository konfiguriert werden.

Dienstkontokonfigurationen prüfen

In diesem Abschnitt erfahren Sie, wie Sie Ihre Dataform-Ressourcen prüfen, um sicherzustellen, dass Dienstkonten ordnungsgemäß verwendet und Berechtigungen korrekt zugewiesen werden. Audits sind besonders wichtig, wenn Sie benutzerdefinierte Dienstkonten verwenden, da diese bestimmte Berechtigungen für den Dataform-Dienst-Agenten erfordern.

Wenn Sie ein benutzerdefiniertes Dienstkonto für ein Dataform-Repository oder eine Workflowkonfiguration verwenden, müssen Sie prüfen, ob der Dataform-Dienst-Agent die Rolle Dienstkontonutzer (roles/iam.serviceAccountUser) für das benutzerdefinierte Dienstkonto hat. Diese Rolle gewährt die Berechtigung iam.serviceAccounts.actAs, mit der geplante Ausführungen, die vom Dataform-Dienst-Agent initiiert werden, die Identität des benutzerdefinierten Dienstkontos übernehmen können. Prüfen Sie außerdem, ob der Dataform-Dienst-Agent die Rolle Ersteller von Dienstkonto-Tokens (roles/iam.serviceAccountTokenCreator) für das effektive Dienstkonto hat.

Repository-Dienstkonten prüfen

Identifizieren Sie zuerst die dataform.Repository-Assets, die für die Planung und Ausführung von Dataform relevant sind. Prüfen Sie dann die Dienstkontokonfigurationen für diese relevanten Repositories.

  1. Verwenden Sie Cloud Asset Inventory, um alle Ressourcen des Typs dataform.Repository aufzulisten. Weitere Informationen finden Sie unter Assets ansehen.

  2. Prüfen Sie für jedes Repository in der Cloud Asset Inventory-Ausgabe das Feld resource.data.labels, um festzustellen, ob es relevant ist. Der genaue Pfad kann je nach Exportformat leicht variieren.

  3. Identifizieren Sie nicht relevante Repositories, indem Sie die Labelzuordnung auf den Schlüssel single-file-asset-type prüfen. Das Vorhandensein dieses Schlüssels gibt an, dass das Repository von einer BigQuery-Funktion verwendet wird. Wenn der Wert sql oder data_canvas ist, kann das Repository von den Berechtigungsprüfungen für das Dienstkonto ausgeschlossen werden.

    Die verbleibenden Repositories, denen dieser Schlüssel oder diese Werte fehlen, fallen in den Bereich der Berechtigungsprüfungen für Dienstkonten.

  4. Prüfen Sie für jedes Repository im Geltungsbereich das Feld resource.data.serviceAccount in der Cloud Asset Inventory-Ausgabe, um festzustellen, ob ein benutzerdefiniertes Dienstkonto konfiguriert ist:

    • Wenn das Feld resource.data.serviceAccount vorhanden ist und der Wert sich von der E-Mail-Adresse des Dataform-Dienst-Agents des Projekts unterscheidet, verwendet das Repository ein benutzerdefiniertes Dienstkonto.
    • Wenn das Feld resource.data.serviceAccount fehlt oder der Wert des Felds mit dem Dataform-Dienst-Agenten des Projekts übereinstimmt, verwendet das Repository den Dienst-Agenten.

  5. Wenn ein benutzerdefiniertes Dienstkonto verwendet wird, prüfen Sie, ob der Dataform-Dienst-Agent sowohl die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) als auch die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) für dieses benutzerdefinierte Dienstkonto hat.

Dienstkonten für die Workflowkonfiguration prüfen

Die Verwendung dedizierter benutzerdefinierter Dienstkonten für Dataform-Workflowkonfigurationen ist eine Best Practice für die Sicherheit, die dem Prinzip der geringsten Berechtigung entspricht.

So prüfen Sie die Dienstkontonutzung für dataform.WorkflowConfig resources:

  1. Verwenden Sie Cloud Asset Inventory, um alle Ressourcen des Typs dataform.WorkflowConfig aufzulisten.

  2. Prüfen Sie für jede Workflowkonfiguration die Cloud Asset Inventory-Ausgabe, um das effektive Dienstkonto zu ermitteln:

    • Wenn das Feld resource.data.serviceAccount vorhanden ist, ist dieser Wert die E-Mail-Adresse des Dienstkontos, das explizit in der Workflowkonfiguration festgelegt wurde.
    • Wenn das Feld resource.data.serviceAccount fehlt, übernimmt die Workflowkonfiguration das Dienstkonto aus dem übergeordneten Repository. Prüfen Sie die Konfiguration des übergeordneten Repositorys, um das effektive Dienstkonto zu finden.
  3. Prüfen Sie, ob ein benutzerdefiniertes Dienstkonto verwendet wird, indem Sie die E-Mail-Adresse des effektiven Dienstkontos mit der E-Mail-Adresse des Dataform-Dienst-Agents des Projekts vergleichen. Wenn sie sich unterscheiden, wird ein benutzerdefiniertes Dienstkonto verwendet.

  4. Wenn ein benutzerdefiniertes Dienstkonto verwendet wird, muss der Dataform-Dienst-Agent sowohl die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) als auch die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) für dieses benutzerdefinierte Dienstkonto haben. Mit diesen Berechtigungen kann der Dataform-Dienst-Agent Workflowausführungen initiieren, indem er die Identität des benutzerdefinierten Dienstkontos übernimmt.

Dienst-Agent-Berechtigungen mit dem Security Command Center überwachen

Damit das Prinzip der geringsten Berechtigung dauerhaft eingehalten wird, sollten Sie Ihr Projekt im Security Command Center aktiv auf Ergebnisse im Zusammenhang mit Dienstkonten und Dienst-Agents mit zu vielen Berechtigungen überwachen.

Eine Anleitung zum Prüfen und Anwenden von Ergebnissen zur Problembehebung im Security Command Center finden Sie unter IAM-Recommender-Ergebnisse und Identitätsergebnisse in der Console untersuchen.

Wenn Sie ein SERVICE_AGENT_GRANTED_BASIC_ROLE-Ergebnis für einen Dataform-Dienst-Agent beheben, ersetzen Sie die Rolle mit zu vielen Berechtigungen durch eine vordefinierte Rolle, die die minimal erforderlichen Berechtigungen hat und auf die spezifische Ressource beschränkt ist. Weisen Sie beispielsweise die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für ein bestimmtes Dienstkonto zu.

Zugriff auf Dataform mit IAM steuern

In diesem Abschnitt werden die Optionen für die Zugriffssteuerung für Dataform beschrieben und es wird gezeigt, wie Sie Dataform-Rollen aufrufen und zuweisen. Dataform verwendet für die Zugriffssteuerung Identity and Access Management (IAM). Weitere Informationen zu Rollen und Berechtigungen in IAM finden Sie im Index für IAM-Rollen und -Berechtigungen.

Vordefinierte Dataform-Rollen

In der folgenden Tabelle sind die vordefinierten Rollen aufgeführt, die den Zugriff auf Dataform-Ressourcen ermöglichen:

Role Permissions

(roles/dataform.admin)

Full access to all Dataform resources.

dataform.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update
  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update
  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query
  • dataform.config.get
  • dataform.config.update
  • dataform.folders.addContents
  • dataform.folders.create
  • dataform.folders.delete
  • dataform.folders.deleteTree
  • dataform.folders.get
  • dataform.folders.getIamPolicy
  • dataform.folders.move
  • dataform.folders.queryContents
  • dataform.folders.setIamPolicy
  • dataform.folders.update
  • dataform.locations.get
  • dataform.locations.list
  • dataform.operations.cancel
  • dataform.operations.delete
  • dataform.operations.get
  • dataform.operations.list
  • dataform.releaseConfigs.create
  • dataform.releaseConfigs.delete
  • dataform.releaseConfigs.get
  • dataform.releaseConfigs.list
  • dataform.releaseConfigs.update
  • dataform.repositories.commit
  • dataform.repositories.computeAccessTokenStatus
  • dataform.repositories.create
  • dataform.repositories.createTagBinding
  • dataform.repositories.delete
  • dataform.repositories.deleteTagBinding
  • dataform.repositories.fetchHistory
  • dataform.repositories.fetchRemoteBranches
  • dataform.repositories.get
  • dataform.repositories.getIamPolicy
  • dataform.repositories.list
  • dataform.repositories.listEffectiveTags
  • dataform.repositories.listTagBindings
  • dataform.repositories.move
  • dataform.repositories.queryDirectoryContents
  • dataform.repositories.readFile
  • dataform.repositories.scheduleRelease
  • dataform.repositories.scheduleWorkflow
  • dataform.repositories.setIamPolicy
  • dataform.repositories.update
  • dataform.teamFolders.create
  • dataform.teamFolders.delete
  • dataform.teamFolders.deleteTree
  • dataform.teamFolders.get
  • dataform.teamFolders.getIamPolicy
  • dataform.teamFolders.setIamPolicy
  • dataform.teamFolders.update
  • dataform.workflowConfigs.create
  • dataform.workflowConfigs.delete
  • dataform.workflowConfigs.get
  • dataform.workflowConfigs.list
  • dataform.workflowConfigs.update
  • dataform.workflowInvocations.cancel
  • dataform.workflowInvocations.create
  • dataform.workflowInvocations.delete
  • dataform.workflowInvocations.get
  • dataform.workflowInvocations.list
  • dataform.workflowInvocations.query
  • dataform.workspaces.commit
  • dataform.workspaces.create
  • dataform.workspaces.delete
  • dataform.workspaces.fetchFileDiff
  • dataform.workspaces.fetchFileGitStatuses
  • dataform.workspaces.fetchGitAheadBehind
  • dataform.workspaces.get
  • dataform.workspaces.getIamPolicy
  • dataform.workspaces.installNpmPackages
  • dataform.workspaces.list
  • dataform.workspaces.makeDirectory
  • dataform.workspaces.moveDirectory
  • dataform.workspaces.moveFile
  • dataform.workspaces.pull
  • dataform.workspaces.push
  • dataform.workspaces.queryDirectoryContents
  • dataform.workspaces.readFile
  • dataform.workspaces.removeDirectory
  • dataform.workspaces.removeFile
  • dataform.workspaces.reset
  • dataform.workspaces.searchFiles
  • dataform.workspaces.setIamPolicy
  • dataform.workspaces.writeFile

developerconnect.connections.constructGitHubAppManifest

developerconnect.connections.create

developerconnect.connections.delete

developerconnect.connections.fetchGitHubInstallations

developerconnect.connections.fetchLinkableGitRepositories

developerconnect.connections.generateGitHubStateToken

developerconnect.connections.get

developerconnect.connections.list

developerconnect.connections.processGitHubAppCreationCallback

developerconnect.connections.processGitHubOAuthCallback

developerconnect.connections.update

developerconnect.gitRepositoryLinks.create

developerconnect.gitRepositoryLinks.delete

developerconnect.gitRepositoryLinks.fetchGitRefs

developerconnect.gitRepositoryLinks.fetchReadToken

developerconnect.gitRepositoryLinks.fetchReadWriteToken

developerconnect.gitRepositoryLinks.get

developerconnect.gitRepositoryLinks.gitProxyRead

developerconnect.gitRepositoryLinks.gitProxyWrite

developerconnect.gitRepositoryLinks.list

developerconnect.locations.*

  • developerconnect.locations.get
  • developerconnect.locations.list

developerconnect.operations.*

  • developerconnect.operations.cancel
  • developerconnect.operations.delete
  • developerconnect.operations.get
  • developerconnect.operations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.editor)

Edit access to Workspaces and Repositories.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.config.*

  • dataform.config.get
  • dataform.config.update

dataform.folders.addContents

dataform.folders.create

dataform.folders.delete

dataform.folders.deleteTree

dataform.folders.get

dataform.folders.getIamPolicy

dataform.folders.move

dataform.folders.queryContents

dataform.folders.update

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.operations.*

  • dataform.operations.cancel
  • dataform.operations.delete
  • dataform.operations.get
  • dataform.operations.list

dataform.releaseConfigs.*

  • dataform.releaseConfigs.create
  • dataform.releaseConfigs.delete
  • dataform.releaseConfigs.get
  • dataform.releaseConfigs.list
  • dataform.releaseConfigs.update

dataform.repositories.commit

dataform.repositories.computeAccessTokenStatus

dataform.repositories.create

dataform.repositories.delete

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.move

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.repositories.scheduleRelease

dataform.repositories.scheduleWorkflow

dataform.repositories.update

dataform.teamFolders.create

dataform.teamFolders.delete

dataform.teamFolders.deleteTree

dataform.teamFolders.get

dataform.teamFolders.getIamPolicy

dataform.teamFolders.update

dataform.workflowConfigs.*

  • dataform.workflowConfigs.create
  • dataform.workflowConfigs.delete
  • dataform.workflowConfigs.get
  • dataform.workflowConfigs.list
  • dataform.workflowConfigs.update

dataform.workflowInvocations.*

  • dataform.workflowInvocations.cancel
  • dataform.workflowInvocations.create
  • dataform.workflowInvocations.delete
  • dataform.workflowInvocations.get
  • dataform.workflowInvocations.list
  • dataform.workflowInvocations.query

dataform.workspaces.commit

dataform.workspaces.create

dataform.workspaces.delete

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.installNpmPackages

dataform.workspaces.list

dataform.workspaces.makeDirectory

dataform.workspaces.moveDirectory

dataform.workspaces.moveFile

dataform.workspaces.pull

dataform.workspaces.push

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.removeDirectory

dataform.workspaces.removeFile

dataform.workspaces.reset

dataform.workspaces.searchFiles

dataform.workspaces.writeFile

developerconnect.connections.get

developerconnect.connections.list

developerconnect.gitRepositoryLinks.fetchGitRefs

developerconnect.gitRepositoryLinks.fetchReadToken

developerconnect.gitRepositoryLinks.fetchReadWriteToken

developerconnect.gitRepositoryLinks.get

developerconnect.gitRepositoryLinks.gitProxyRead

developerconnect.gitRepositoryLinks.gitProxyWrite

developerconnect.gitRepositoryLinks.list

developerconnect.locations.*

  • developerconnect.locations.get
  • developerconnect.locations.list

developerconnect.operations.get

developerconnect.operations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.viewer)

Read-only access to all Dataform resources.

dataform.commentThreads.get

dataform.commentThreads.list

dataform.comments.get

dataform.comments.list

dataform.compilationResults.get

dataform.compilationResults.list

dataform.compilationResults.query

dataform.config.get

dataform.folders.get

dataform.folders.getIamPolicy

dataform.folders.queryContents

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.operations.get

dataform.operations.list

dataform.releaseConfigs.get

dataform.releaseConfigs.list

dataform.repositories.computeAccessTokenStatus

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.teamFolders.get

dataform.teamFolders.getIamPolicy

dataform.workflowConfigs.get

dataform.workflowConfigs.list

dataform.workflowInvocations.get

dataform.workflowInvocations.list

dataform.workflowInvocations.query

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.list

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.searchFiles

developerconnect.connections.get

developerconnect.connections.list

developerconnect.gitRepositoryLinks.fetchReadToken

developerconnect.gitRepositoryLinks.get

developerconnect.gitRepositoryLinks.gitProxyRead

developerconnect.gitRepositoryLinks.list

developerconnect.locations.*

  • developerconnect.locations.get
  • developerconnect.locations.list

developerconnect.operations.get

developerconnect.operations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeCommenter)

Permissions to comment, at the repository level. Grants CRUD access over commentThread and comment resources.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.folders.get

dataform.folders.queryContents

dataform.locations.get

dataform.repositories.get

dataform.repositories.readFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeCreator)

Access only to private and shared code resources. The permissions in the Code Creator let you create and list code in Dataform, and access only the code that you created and code that was explicitly shared with you.

dataform.commentThreads.get

dataform.commentThreads.list

dataform.comments.get

dataform.comments.list

dataform.folders.create

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.repositories.create

dataform.repositories.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeEditor)

Edit access code resources.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.folders.addContents

dataform.folders.create

dataform.folders.get

dataform.folders.getIamPolicy

dataform.folders.queryContents

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.operations.get

dataform.repositories.commit

dataform.repositories.computeAccessTokenStatus

dataform.repositories.create

dataform.repositories.createTagBinding

dataform.repositories.deleteTagBinding

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.workspaces.commit

dataform.workspaces.create

dataform.workspaces.delete

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.installNpmPackages

dataform.workspaces.list

dataform.workspaces.makeDirectory

dataform.workspaces.moveDirectory

dataform.workspaces.moveFile

dataform.workspaces.pull

dataform.workspaces.push

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.removeDirectory

dataform.workspaces.removeFile

dataform.workspaces.reset

dataform.workspaces.searchFiles

dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeOwner)

Full access to code resources.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.folders.*

  • dataform.folders.addContents
  • dataform.folders.create
  • dataform.folders.delete
  • dataform.folders.deleteTree
  • dataform.folders.get
  • dataform.folders.getIamPolicy
  • dataform.folders.move
  • dataform.folders.queryContents
  • dataform.folders.setIamPolicy
  • dataform.folders.update

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.operations.get

dataform.operations.list

dataform.repositories.commit

dataform.repositories.computeAccessTokenStatus

dataform.repositories.create

dataform.repositories.createTagBinding

dataform.repositories.delete

dataform.repositories.deleteTagBinding

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.move

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.repositories.setIamPolicy

dataform.repositories.update

dataform.workspaces.*

  • dataform.workspaces.commit
  • dataform.workspaces.create
  • dataform.workspaces.delete
  • dataform.workspaces.fetchFileDiff
  • dataform.workspaces.fetchFileGitStatuses
  • dataform.workspaces.fetchGitAheadBehind
  • dataform.workspaces.get
  • dataform.workspaces.getIamPolicy
  • dataform.workspaces.installNpmPackages
  • dataform.workspaces.list
  • dataform.workspaces.makeDirectory
  • dataform.workspaces.moveDirectory
  • dataform.workspaces.moveFile
  • dataform.workspaces.pull
  • dataform.workspaces.push
  • dataform.workspaces.queryDirectoryContents
  • dataform.workspaces.readFile
  • dataform.workspaces.removeDirectory
  • dataform.workspaces.removeFile
  • dataform.workspaces.reset
  • dataform.workspaces.searchFiles
  • dataform.workspaces.setIamPolicy
  • dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.codeScheduler)

Access for scheduling workflows and releases.

dataform.releaseConfigs.create

dataform.workflowConfigs.create

(roles/dataform.codeViewer)

Read-only access to all code resources.

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.folders.get

dataform.folders.getIamPolicy

dataform.folders.queryContents

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.repositories.computeAccessTokenStatus

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.list

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.searchFiles

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.teamFolderCommenter)

View and comment access to a team folder and its contents.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.folders.get

dataform.folders.getIamPolicy

dataform.folders.queryContents

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.repositories.computeAccessTokenStatus

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.teamFolders.get

dataform.teamFolders.getIamPolicy

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.list

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.searchFiles

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.teamFolderContributor)

Edit access to a team folder and its contents.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.folders.addContents

dataform.folders.create

dataform.folders.get

dataform.folders.getIamPolicy

dataform.folders.queryContents

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.operations.get

dataform.repositories.commit

dataform.repositories.computeAccessTokenStatus

dataform.repositories.create

dataform.repositories.createTagBinding

dataform.repositories.deleteTagBinding

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.teamFolders.get

dataform.teamFolders.getIamPolicy

dataform.teamFolders.update

dataform.workspaces.commit

dataform.workspaces.create

dataform.workspaces.delete

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.installNpmPackages

dataform.workspaces.list

dataform.workspaces.makeDirectory

dataform.workspaces.moveDirectory

dataform.workspaces.moveFile

dataform.workspaces.pull

dataform.workspaces.push

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.removeDirectory

dataform.workspaces.removeFile

dataform.workspaces.reset

dataform.workspaces.searchFiles

dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.teamFolderCreator)

Access to create new team folders.

dataform.teamFolders.create

(roles/dataform.teamFolderOwner)

Full access to a team folder and its contents. Can share the team folder and its contents.

dataform.commentThreads.*

  • dataform.commentThreads.create
  • dataform.commentThreads.delete
  • dataform.commentThreads.get
  • dataform.commentThreads.list
  • dataform.commentThreads.update

dataform.comments.*

  • dataform.comments.create
  • dataform.comments.delete
  • dataform.comments.get
  • dataform.comments.list
  • dataform.comments.update

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.folders.*

  • dataform.folders.addContents
  • dataform.folders.create
  • dataform.folders.delete
  • dataform.folders.deleteTree
  • dataform.folders.get
  • dataform.folders.getIamPolicy
  • dataform.folders.move
  • dataform.folders.queryContents
  • dataform.folders.setIamPolicy
  • dataform.folders.update

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.operations.get

dataform.operations.list

dataform.repositories.commit

dataform.repositories.computeAccessTokenStatus

dataform.repositories.create

dataform.repositories.createTagBinding

dataform.repositories.delete

dataform.repositories.deleteTagBinding

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.move

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.repositories.setIamPolicy

dataform.repositories.update

dataform.teamFolders.delete

dataform.teamFolders.deleteTree

dataform.teamFolders.get

dataform.teamFolders.getIamPolicy

dataform.teamFolders.setIamPolicy

dataform.teamFolders.update

dataform.workspaces.*

  • dataform.workspaces.commit
  • dataform.workspaces.create
  • dataform.workspaces.delete
  • dataform.workspaces.fetchFileDiff
  • dataform.workspaces.fetchFileGitStatuses
  • dataform.workspaces.fetchGitAheadBehind
  • dataform.workspaces.get
  • dataform.workspaces.getIamPolicy
  • dataform.workspaces.installNpmPackages
  • dataform.workspaces.list
  • dataform.workspaces.makeDirectory
  • dataform.workspaces.moveDirectory
  • dataform.workspaces.moveFile
  • dataform.workspaces.pull
  • dataform.workspaces.push
  • dataform.workspaces.queryDirectoryContents
  • dataform.workspaces.readFile
  • dataform.workspaces.removeDirectory
  • dataform.workspaces.removeFile
  • dataform.workspaces.reset
  • dataform.workspaces.searchFiles
  • dataform.workspaces.setIamPolicy
  • dataform.workspaces.writeFile

resourcemanager.projects.get

resourcemanager.projects.list

(roles/dataform.teamFolderViewer)

View access to a team folder and its contents.

dataform.compilationResults.*

  • dataform.compilationResults.create
  • dataform.compilationResults.get
  • dataform.compilationResults.list
  • dataform.compilationResults.query

dataform.folders.get

dataform.folders.getIamPolicy

dataform.folders.queryContents

dataform.locations.*

  • dataform.locations.get
  • dataform.locations.list

dataform.repositories.computeAccessTokenStatus

dataform.repositories.fetchHistory

dataform.repositories.fetchRemoteBranches

dataform.repositories.get

dataform.repositories.getIamPolicy

dataform.repositories.list

dataform.repositories.listEffectiveTags

dataform.repositories.listTagBindings

dataform.repositories.queryDirectoryContents

dataform.repositories.readFile

dataform.teamFolders.get

dataform.teamFolders.getIamPolicy

dataform.workspaces.fetchFileDiff

dataform.workspaces.fetchFileGitStatuses

dataform.workspaces.fetchGitAheadBehind

dataform.workspaces.get

dataform.workspaces.getIamPolicy

dataform.workspaces.list

dataform.workspaces.queryDirectoryContents

dataform.workspaces.readFile

dataform.workspaces.searchFiles

resourcemanager.projects.get

resourcemanager.projects.list

Service agent roles

Service agent roles should only be granted to service agents.

Role Permissions

(roles/dataform.serviceAgent)

Gives permission for the Dataform API to access a secret from Secret Manager

dataform.compilationResults.create

dataform.workflowInvocations.create

resourcemanager.projects.get

resourcemanager.projects.list

Benutzerdefinierte Dataform-Rollen

Benutzerdefinierte Rollen können alle von Ihnen angegebenen Berechtigungen enthalten. Sie können benutzerdefinierte Rollen erstellen, die Berechtigungen zum Ausführen bestimmter Verwaltungsvorgänge enthalten, z. B. zum Erstellen von Entwicklungsarbeitsbereichen oder zum Erstellen von Dateien und Verzeichnissen in einem Entwicklungsarbeitsbereich. Informationen zum Erstellen benutzerdefinierter Rollen finden Sie unter Benutzerdefinierte Rollen erstellen und verwalten.

Sicherheitsaspekte für Dataform-Berechtigungen

Alle Nutzer mit der Berechtigung dataform.repositories.create können Code in BigQuery mit einem benutzerdefinierten Dienstkonto und allen diesem Dienstkonto gewährten Berechtigungen ausführen. Dazu gehören die Ausführung von Dataform-Workflows und die Möglichkeit, Metadaten in Knowledge Catalog zu verwalten.

Da der strikte ActAs-Modus für alle Repositories erzwungen wird, erfordert die Berechtigung dataform.repositories.create implizit, dass der Nutzer ActAs-Berechtigungen für das benutzerdefinierte Dienstkonto hat, um nachfolgende Workflows auszuführen. So wird dafür gesorgt, dass nur Nutzer mit expliziten Rechten zur Identitätsübernahme Code mit der Identität des Dienstkontos ausführen können.

Die Berechtigung dataform.repositories.create ist in den folgenden IAM-Rollen enthalten:

Wenn Sie die Daten einschränken möchten, die ein Nutzer oder Dienstkonto in BigQuery lesen oder schreiben kann, können Sie ausgewählten BigQuery-Datasets oder -Tabellen detaillierte BigQuery-IAM-Berechtigungen gewähren. Weitere Informationen finden Sie unter Zugriff auf Datasets steuern und Zugriff auf Tabellen und Ansichten steuern.

Weitere Informationen zu benutzerdefinierten Dienstkonten und den erforderlichen Rollen und Berechtigungen finden Sie unter Dataform erforderlichen Zugriff gewähren.

Zugriff auf Secrets während der Paketinstallation

Wenn Sie private NPM-Pakete mit Secret Manager-Secrets konfigurieren, können diese Secrets möglicherweise von Nutzern aufgerufen werden, die Berechtigungen zum Ändern von Code oder zum Auslösen der Kompilierung von Code aus einem bestimmten Git-Commit im Repository haben.

Während der Paketinstallation, die beim manuellen Installieren von Paketen in einem Arbeitsbereich oder beim Kompilieren von Code aus einem bestimmten Git-Commit ausgelöst wird, liest der NPM-Client die Anmeldedaten aus der Datei .npmrc und überträgt das Authentifizierungstoken an die konfigurierte NPM-Registry. Ein Nutzer mit Berechtigungen zum Ändern der Datei .npmrc in seinem Arbeitsbereich kann Einstellungen für den Zugriff auf die Secrets konfigurieren, indem er Registry-Anfragen an einen externen Server weiterleitet.

Diese Installation und die potenzielle Offenlegung von Tokens können in den folgenden Szenarien auftreten:

  • Installation des Workspace-Pakets: Wird manuell in einem Workspace ausgelöst. Dazu sind Berechtigungen zum Bearbeiten des Arbeitsbereichs erforderlich, die in den Rollen Dataform-Bearbeiter (roles/dataform.editor) oder Dataform-Code-Editor (roles/dataform.codeEditor) enthalten sind.

  • Git-Commitish kompilieren: Wird automatisch ausgelöst, wenn ein Kompilierungsergebnis für ein Git-Commitish wie einen Zweig, ein Tag oder einen Commit-SHA im Repository erstellt wird. Für dieses Szenario ist die Berechtigung dataform.compilationResults.create erforderlich.

Wir empfehlen Folgendes, um Ihre Anmeldedaten zu schützen:

  • Weisen Sie Rollen mit Bearbeitungsberechtigungen für das Repository (z. B. Dataform Code Editor) oder Kompilierungsberechtigungen (z. B. Dataform Code Viewer) nur vertrauenswürdigen Nutzern zu.

  • Sie können die Remote-Git-Repositories, mit denen Dataform eine Verbindung herstellen kann, mithilfe von Organisationsrichtlinien einschränken. Weitere Informationen finden Sie unter Remote-Repositories einschränken.

  • Beschränken Sie den Secret Manager-Zugriff des Dataform-Dienst-Agents auf die erforderlichen Secrets.

  • Verhindern Sie die Verwendung von Endnutzer-Anmeldedaten, indem Sie benutzerdefinierte Einschränkungen für Organisationsrichtlinien verwenden, die das Festlegen von end_user_auth_config ablehnen. Weitere Informationen finden Sie unter Benutzerdefinierte Einschränkungen für Organisationsrichtlinien erstellen.

Dataform-Rollen ansehen

Führen Sie in der Google Cloud Console die folgenden Schritte aus:

  1. Rufen Sie die Seite IAM und Verwaltung > Rollen auf.

    Zu Rollen

  2. Wählen Sie im Feld Filter die Option Verwendet in aus, geben Sie Dataform ein und drücken Sie die Eingabetaste.

  3. Klicken Sie auf eine der aufgeführten Rollen, um die Berechtigungen der Rolle im rechten Bereich aufzurufen.

    Die Rolle „Dataform-Administrator“ hat beispielsweise vollen Zugriff auf alle Dataform-Ressourcen.

Weitere Informationen zum Zuweisen einer Rolle für ein Projekt finden Sie unter Einzelne IAM-Rolle zuweisen oder widerrufen. Sie können auf diese Weise vordefinierte oder benutzerdefinierte Rollen zuweisen.

Zugriff auf ein einzelnes Repository steuern

Wenn Sie den Zugriff auf Dataform mit detaillierten Berechtigungen steuern möchten, können Sie Dataform-IAM-Rollen für einzelne Repositories mit der Dataform API-Anfrage repositories.setIamPolicy festlegen.

So legen Sie Dataform-IAM-Rollen für ein einzelnes Dataform-Repository fest:

  1. Übergeben Sie im Terminal die Dataform API-Anfrage repositories.setIamPolicy mit einer Zugriffsrichtlinie.

  2. Binden Sie in der Richtlinie einen Nutzer, eine Gruppe, eine Domain, einen Dienst-Agent oder ein Dienstkonto an eine ausgewählte Rolle im folgenden Format:

    {
    "policy":
       {
          "bindings": [
          {
             "role": "roles/ROLE",
             "members": [
                "TYPE:IDENTIFIER",
             ]
          },
          ],
       }
    }
    

    Ersetzen Sie Folgendes:

    • ROLE: die Dataform-IAM-Rolle, die Sie für das Repository zuweisen möchten.
    • TYPE: user, group, domain oder serviceAccount.
    • IDENTIFIER: der Nutzer, die Gruppe, die Domain oder das Dienstkonto, dem Sie die Rolle zuweisen möchten.
  3. Achten Sie auf der IAM-Seite darauf, dass alle Nutzer die vollständige Liste der Dataform-Repositories über eine Dataform-Rolle mit der Berechtigung dataform.repositories.list aufrufen können.

  4. Achten Sie in IAM darauf, dass nur Nutzern, die vollständigen Zugriff auf alle Dataform-Repositories benötigen, die Rolle „Dataform-Administrator“ für alle Repositories zugewiesen wird.

Mit dem folgenden Befehl wird die Dataform API-Anfrage repositories.setIamPolicy übergeben, mit der einem einzelnen Nutzer die Rolle „Dataform-Editor“ für das Repository sales zugewiesen wird:

curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.editor", "members": ["user:sasha@examplepetstore.com"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"

Öffentlichen Zugriff auf ein Repository gewähren

Sie können öffentlichen Zugriff auf ein Dataform-Repository gewähren, indem Sie dem Hauptkonto allAuthenticatedUsers IAM-Rollen für das Repository zuweisen.

Wenn Sie dem Hauptkonto allAuthenticatedUsers eine IAM-Rolle zuweisen, wird diese Rolle Dienstkonten und allen Nutzern im Internet zugewiesen, die sich mit einem Google-Konto authentifiziert haben. Dies schließt auch Konten ein, die nicht mit einem Google Workspace-Konto oder einer Cloud Identity-Domain verbunden sind, z. B. persönliche Gmail-Konten. Nicht authentifizierte Nutzer, wie anonyme Besucher, sind nicht eingeschlossen. Weitere Informationen finden Sie unter Alle authentifizierten Nutzer.

Wenn Sie beispielsweise allAuthenticatedUsers die Rolle „Dataform Viewer“ für das Repository sales zuweisen, haben alle Dienstkonten und Nutzer im Internet, die sich mit einem Google-Konto authentifiziert haben, Lesezugriff auf alle sales-Coderessourcen.

So gewähren Sie öffentlichen Zugriff auf ein Dataform-Repository:

  1. Übergeben Sie im Terminal die Dataform API-Anfrage repositories.setIamPolicy mit einer Zugriffsrichtlinie.

  2. Binden Sie in der Richtlinie das Hauptkonto allAuthenticatedUsers an eine ausgewählte Rolle im folgenden Format:

    {
    "policy":
       {
          "bindings": [
          {
             "role": "roles/ROLE",
             "members": [
                "allAuthenticatedUsers",
             ]
          },
          ],
       }
    }
    

    Ersetzen Sie ROLE durch eine Dataform-IAM-Rolle, die Sie allen authentifizierten Nutzern zuweisen möchten.

Mit dem folgenden Befehl wird die Dataform API-Anfrage repositories.setIamPolicy, die die Rolle „Dataform-Betrachter“ für das Repository sales gewährt, an allAuthenticatedUsers übergeben:

curl -H "Content-Type: application/json" -X POST -d '{ "policy": { "bindings": [{ "role": "roles/dataform.viewer", "members": ["allAuthenticatedUsers"]}] }}' "https://dataform.googleapis.com/v1/projects/examplepetstore/locations/us-central1/repositories/sales:setIamPolicy"

Öffentlichen Zugriff auf Repositories verhindern

Wenn Sie sicherstellen möchten, dass der Öffentlichkeit kein Zugriff auf Dataform-Repositories gewährt wird, können Sie das Hauptkonto allAuthenticatedUsers in Ihrem Projekt einschränken.

Wenn Sie allAuthenticatedUsers in Ihrem Projekt einschränken möchten, können Sie die Richtlinie iam.allowedPolicyMemberDomains festlegen und allAuthenticatedUsers aus der Liste der allowed_values entfernen.

Wenn Sie allAuthenticatedUsers in der Richtlinie iam.allowedPolicyMemberDomains einschränken, kann das Hauptkonto allAuthenticatedUsers in keiner IAM-Richtlinie in Ihrem Projekt verwendet werden. Dadurch wird verhindert, dass allen Ressourcen, einschließlich Dataform-Repositories, öffentlicher Zugriff gewährt wird.

Weitere Informationen zur Richtlinie iam.allowedPolicyMemberDomains und eine Anleitung zum Festlegen finden Sie unter Identitäten nach Domain einschränken.

Mitarbeiteridentitätsföderation in Dataform

Mit der Workforce Identity-Föderation können Sie einen externen Identitätsanbieter (Identity Provider, IdP) verwenden, um Nutzer für Google Cloud -Dienste mit IAM zu authentifizieren und zu autorisieren.

Dataform unterstützt die Workforce Identity-Föderation ohne bekannte Einschränkungen.

Zugriff auf einzelne Tabellen mit IAM steuern

In diesem Abschnitt erfahren Sie, wie Sie BigQuery-IAM-Rollen für einzelne Dataform-Tabellen und -Ansichten zuweisen und widerrufen.

Wenn Dataform eine Tabelle oder Ansicht ausführt, wird die Ressource in BigQuery erstellt. Während der Entwicklung in Dataform können Sie einzelnen Tabellen und Ansichten BigQuery-Rollen zuweisen, um den Zugriff in BigQuery nach der Ausführung zu steuern.

Weitere Informationen zum Gewähren und Entziehen des Zugriffs auf Ressourcen finden Sie unter Zugriff auf eine Ressource gewähren.

BigQuery-Rollen für eine Tabelle oder Ansicht gewähren

Sie können einer Tabelle oder Ansicht in Dataform BigQuery-Rollen zuweisen, indem Sie der .sqlx-Definitionsdatei der ausgewählten Tabelle oder Ansicht einen post_operations-Block mit der GRANT-DCL-Anweisung hinzufügen.

So weisen Sie einer ausgewählten Tabelle oder Ansicht BigQuery-Rollen zu:

  1. Rufen Sie in der Google Cloud Console die Seite Dataform auf.

    Zu Dataform

  2. Wählen Sie ein Repository und dann einen Arbeitsbereich aus.

  3. Maximieren Sie im Bereich Dateien das Verzeichnis definitions/.

  4. Wählen Sie die .sqlx-Definitionsdatei der Tabelle oder Ansicht aus, für die Sie Zugriff gewähren möchten.

  5. Geben Sie in die Datei das folgende Code-Snippet ein:

    post_operations {
        GRANT "ROLE_LIST"
        ON "RESOURCE_TYPE" ${self()}
        TO "USER_LIST"
    }
    

    Ersetzen Sie Folgendes:

    • ROLE_LIST: die BigQuery-Rolle oder die Liste der kommagetrennten BigQuery-Rollen, die Sie zuweisen möchten.

    • RESOURCE_TYPE: TABLE oder VIEW.

    • USER_LIST: die durch Kommas getrennte Liste von Nutzern, denen die Rolle zugewiesen wird.

      Eine Liste der gültigen Formate finden Sie unter user_list.

  6. Optional: Klicken Sie auf Format.

  7. Führen Sie die Tabelle oder Ansicht aus.

  8. Wenn Sie Zugriff auf eine inkrementelle Tabelle gewährt haben, entfernen Sie die GRANT-Anweisung nach der ersten Ausführung aus der Tabellendefinitionsdatei.

Im folgenden Codebeispiel wird einem Nutzer die Rolle „BigQuery-Betrachter“ für eine Tabelle zugewiesen:

config { type: "table" }

SELECT ...

post_operations {
  GRANT `roles/bigquery.dataViewer`
  ON TABLE ${self()}
  TO "user:222larabrown@gmail.com"
}

BigQuery-Rollen für eine Tabelle oder Ansicht widerrufen

Sie können BigQuery-Rollen für eine Tabelle oder Ansicht widerrufen, indem Sie der .sqlx-Definitionsdatei der ausgewählten Tabelle oder Ansicht einen post_operations-Block mit der DCL-Anweisung REVOKE hinzufügen.

So widerrufen Sie BigQuery-Rollen für eine ausgewählte Tabelle oder Ansicht:

  1. Rufen Sie in der Google Cloud Console die Seite Dataform auf.

    Zu Dataform

  2. Wählen Sie ein Repository und dann einen Arbeitsbereich aus.

  3. Maximieren Sie im Bereich Dateien das Verzeichnis definitions/.

  4. Wählen Sie die .sqlx-Definitionsdatei der Tabelle oder Ansicht aus, für die Sie den Zugriff widerrufen möchten.

  5. Geben Sie im Block post_operations die folgende REVOKE-Anweisung ein:

        REVOKE "ROLE_LIST"
        ON "RESOURCE_TYPE" ${self()}
        FROM "USER_LIST"
    

    Ersetzen Sie Folgendes:

    • ROLE_LIST: die BigQuery-Rolle oder die Liste der kommagetrennten BigQuery-Rollen, die Sie widerrufen möchten.
    • RESOURCE_TYPE: TABLE oder VIEW.
    • USER_LIST: die durch Kommas getrennte Liste von Nutzern, denen die Rolle entzogen wird. Eine Liste der gültigen Formate finden Sie unter user_list.
  6. Wenn Sie den in einer GRANT-Anweisung in der Datei gewährten Zugriff widerrufen möchten, ersetzen Sie die GRANT-Anweisung durch eine REVOKE-Anweisung.

  7. Optional: Klicken Sie auf Format.

  8. Führen Sie die Tabelle oder Ansicht aus.

  9. Wenn Sie den Zugriff auf eine inkrementelle Tabelle widerrufen haben, entfernen Sie die REVOKE-Anweisung nach der ersten Ausführung aus der Tabellendefinitionsdatei.

Im folgenden Codebeispiel wird die Rolle BigQuery-Betrachter für einen Nutzer für eine Tabelle widerrufen:

config { type: "table" }

SELECT ...

post_operations {
  REVOKE `roles/bigquery.dataViewer`
  ON TABLE ${self()}
  FROM "user:222larabrown@gmail.com"
}

BigQuery-Rollen für Tabellen und Ansichten gemeinsam verwalten

Wenn Sie den BigQuery-Zugriff auf einzelne Tabellen und Ansichten an einem einzigen Ort steuern möchten, können Sie eine dedizierte type: "operations"-Datei mit den DCL-Anweisungen GRANT und REVOKE erstellen.

So verwalten Sie den Zugriff auf BigQuery-Tabelle in einer einzelnen type: "operations"-Datei:

  1. Rufen Sie in der Google Cloud Console die Seite Dataform auf.

    Zu Dataform

  2. Wählen Sie ein Repository und dann einen Arbeitsbereich aus.

  3. Klicken Sie im Bereich Dateien neben definitions/ auf das Menü Symbol für Menü „Hinzufügen“Mehr.

  4. Klicken Sie auf Datei erstellen.

  5. Geben Sie im Feld Dateipfad hinzufügen den Namen der Datei gefolgt von .sqlx nach definitions/ ein. Beispiel: definitions/table-access.sqlx

    Dateinamen dürfen nur Ziffern, Buchstaben, Bindestriche und Unterstriche enthalten.

  6. Klicken Sie auf Datei erstellen.

  7. Maximieren Sie im Bereich Dateien das Verzeichnis definitions/ und wählen Sie die neu erstellte Datei aus.

  8. Geben Sie in die Datei das folgende Code-Snippet ein:

      config { type: "operations" }
    
      GRANT "ROLE_LIST"
      ON RESOURCE_TYPE RESOURCE_NAME
      TO "USER_LIST"
    
      REVOKE "ROLE_LIST"
      ON { "<var>" }}RESOURCE_TYPE RESOURCE_NAME
      TO "USER_LIST"
    

    Ersetzen Sie Folgendes:

    • ROLE_LIST: die BigQuery-Rolle oder die Liste der kommagetrennten BigQuery-Rollen, die Sie zuweisen oder widerrufen möchten.
    • RESOURCE_TYPE: TABLE oder VIEW.
    • RESOURCE_NAME: der Name der Tabelle oder Ansicht.
    • USER_LIST: die durch Kommas getrennte Liste von Nutzern, denen die Rolle zugewiesen oder entzogen wird. Eine Liste der gültigen Formate finden Sie unter user_list.
  9. Fügen Sie nach Bedarf GRANT- und REVOKE-Anweisungen hinzu.

    1. Wenn Sie den Zugriff widerrufen möchten, der in einer GRANT-Anweisung in der Datei gewährt wurde, ersetzen Sie die GRANT-Anweisung durch eine REVOKE-Anweisung.

      Wenn Sie die Anweisung GRANT entfernen, ohne die Anweisung REVOKE hinzuzufügen, wird der Zugriff nicht widerrufen.

  10. Optional: Klicken Sie auf Format.

  11. Führen Sie die Datei nach jedem Update aus.

    1. Wenn Sie Zugriff auf eine inkrementelle Tabelle gewährt oder widerrufen haben, entfernen Sie die Anweisung GRANT oder REVOKE nach der ersten Ausführung der Anweisung aus der Datei.

IAM-Verhalten mit der Config API anpassen

Mit der Dataform API-Methode projects.locations.updateConfig können Sie das IAM-Verhalten anpassen und die Sicherheit erhöhen.

Bestimmte Rolle beim Erstellen einer Ressource zuweisen

Wenn Sie das Feld setAuthenticatedUserAdmin in der Ressource projects.locations.repositories auf true setzen, weist Dataform dem Nutzer, der das Repository erstellt, automatisch die Rolle „Dataform-Administrator“ (roles/dataform.admin) für dieses Repository zu. Außerdem gewährt Dataform jedem Nutzer, der einen Arbeitsbereich in diesem Repository erstellt, die Rolle „Dataform-Administrator“ für den neuen Arbeitsbereich.

Sie können das Feld creator_role (Vorschau) in der Methode projects.locations.updateConfig verwenden, um dieses Verhalten zu überschreiben. Wenn setAuthenticatedUserAdmin den Wert true hat und Sie das Feld creator_role mit einer benutzerdefinierten Rolle konfigurieren, gewährt Dataform die benutzerdefinierte Rolle anstelle der Standardrolle dataform.admin.

Erweiterte Planungsberechtigungen implementieren

Wenn Sie festlegen möchten, dass Nutzer explizite Berechtigungen zum Planen von Dataform-Workflows benötigen, setzen Sie das Feld enable_project_checks_for_scheduling in der Methode projects.locations.updateConfig auf true.

Wenn Sie diese Prüfungen für die Planung aktivieren, benötigt der Nutzer die folgenden Berechtigungen:

  • So erstellen Sie eine Workflowkonfiguration:

    • Die Berechtigung dataform.workflowConfigs.create für das Projekt, die von der Rolle „Code Scheduler“ (roles/dataform.codeScheduler) gewährt wird.
    • Die Berechtigung dataform.repositories.scheduleWorkflow für das Repository, die von der Rolle „Dataform-Administrator“ (roles/dataform.admin) gewährt wird.
  • So erstellen Sie eine Releasekonfiguration:

    • Die Berechtigung dataform.releaseConfigs.create für das Projekt, die von der Rolle „Code Scheduler“ (roles/dataform.codeScheduler) gewährt wird.
    • Die Berechtigung dataform.repositories.scheduleRelease für das Repository, die von der Rolle „Dataform-Administrator“ (roles/dataform.admin) gewährt wird.

Private Arbeitsbereiche aktivieren

Wenn Sie den Zugriff auf den Dataform-Arbeitsbereich so einschränken möchten, dass nur der Ersteller des Arbeitsbereichs Code in diesem Arbeitsbereich lesen und schreiben kann, setzen Sie das Feld enable_private_workspace in der Methode projects.locations.updateConfig auf true.

Diese Einschränkung gilt auch für das Ansehen generierter Artefakte, z. B. kompilierter SQL-Code, Kompilierungsfehler und Ausführungsprotokolle für die Kompilierungen oder Workflowaufrufe des Arbeitsbereichs.

Diese Einstellung überschreibt Standard-IAM-Rollen, die anderen Repository-Nutzern Zugriff auf den Arbeitsbereich gewähren.

Nächste Schritte