Übersicht
Der Google Workspace-Konnektor bietet die Funktionalität, Dateien aus Google Drive (ehemals G Suite) abzurufen und im Fess-Index zu registrieren.
Für diese Funktion ist das Plugin fess-ds-gsuite erforderlich.
Änderungen in 15.9
Der Konnektor wurde in Fess 15.9 grundlegend überarbeitet. Lesen Sie diesen Abschnitt, bevor Sie eine bestehende Datenspeicher-Konfiguration aktualisieren.
Warnung
crawl_target hat jetzt den Standardwert shared_drives, und jeder Wert außer legacy setzt impersonate_user voraus. Eine unverändert aktualisierte Konfiguration schlägt daher beim Start mit einer ``DataStoreException`` fehl, statt zu laufen.
Das ist beabsichtigt: Das bisherige Verhalten erreichte nur die Dateien, die ausdrücklich für das Dienstkonto freigegeben waren, sodass die Alternative ein Crawl wäre, der stillschweigend nichts indiziert. Setzen Sie entweder impersonate_user auf ein Domain-Administratorkonto, oder setzen Sie crawl_target=legacy, um das bisherige Verhalten beizubehalten.
Verhaltensänderungen
| Änderung | Erforderliche Maßnahme |
|---|---|
crawl_target hat den Standardwert shared_drives und setzt impersonate_user voraus | Setzen Sie impersonate_user oder crawl_target=legacy. Andernfalls schlägt der Crawl beim Start fehl. |
Der Standard-OAuth-Bereich wurde von https://www.googleapis.com/auth/drive auf https://www.googleapis.com/auth/drive.readonly eingeschränkt | Aktualisieren Sie den Eintrag für die Domain-weite Delegierung in der Google Workspace Admin-Konsole, da dieser die Bereiche ausdrücklich auflistet. |
crawl_target=users und crawl_target=both benötigen zusätzlich https://www.googleapis.com/auth/admin.directory.user.readonly | Fügen Sie den Bereich sowohl dem Parameter scopes als auch dem Delegierungseintrag hinzu. Dies wird beim Start geprüft. |
Die indizierte URL ist jetzt webViewLink (der im Browser zu öffnende Link) statt des Download-Links | Führen Sie einen vollständigen erneuten Crawl durch, um die neuen URLs zu übernehmen. |
default_permissions ist jetzt ein Rückfallwert, keine Ergänzung | Ein Dokument mit auflösbarer ACL erhält nur diese ACL, nicht mehr die Vereinigung aus ACL und default_permissions. Das Ergebnis ist strikt restriktiver. |
| Eine reine Link-Freigabe vergibt keine Suchrolle mehr | Eine domain- oder anyone-Berechtigung mit allowFileDiscovery=false bedeutet „jeder, der über den Link verfügt“; Drive selbst macht solche Dateien ebenfalls nicht über die Suche auffindbar. |
| Ein Dokument, dessen ACL nichts ergibt, wird übersprungen, statt ohne Rollen indiziert zu werden | Setzen Sie default_permissions, um solche Dokumente weiterhin zu indizieren. Bisher waren sie für jeden Benutzer sichtbar, da eine leere Rollenliste den Berechtigungsfilter deaktiviert. |
fields hat nicht mehr den Standardwert *, sondern eine explizite Feldliste | Ein Crawl-Skript, das ein ungewöhnliches Feld verwendet, liest jetzt null. Setzen Sie fields=*, um die bisherige Projektion wiederherzustellen. |
| Google Docs werden als Markdown statt als reiner Text exportiert, Google Tabellen als TSV statt als CSV | Der indizierte Text jedes Google-Dokuments enthält jetzt Markdown-Syntaxzeichen. Führen Sie einen vollständigen erneuten Crawl durch. |
refresh_token_interval wird ignoriert | Die Aktualisierung der Token übernimmt die Authentifizierungsbibliothek. Eine bestehende Konfiguration funktioniert weiter, und es wird eine Warnung protokolliert. |
| Google Formulare und Google Sites werden nur mit ihren Metadaten indiziert | Für sie gibt es kein Exportformat in der Drive API. Bisher erzeugte jede dieser Dateien einen Crawl-Fehler. |
Neue Funktionen
crawl_targetbestimmt, was gecrawlt wird: die Sicht des Dienstkontos selbst (legacy), jede freigegebene Ablage der Domain (shared_drives), die „Meine Ablage“ jedes Verzeichnisbenutzers (users) oder beides (both). Siehe Crawl-Ziel.Elemente in freigegebenen Ablagen erhalten jetzt die korrekte ACL. Siehe Berechtigungen und Zugriffskontrolle.
Inkrementelles Crawling über den Änderungs-Feed von Drive. Siehe Inkrementelles Crawling.
Ratenbegrenzung mit exponentiellem Backoff, der
Retry-Afterberücksichtigt, sowie eine fehlschlagende freigegebene Ablage oder ein fehlschlagender Benutzer, die den gesamten Crawl nicht mehr abbrechen. Siehe Ratenbegrenzung und Wiederholungen.proxy_usernameundproxy_passwordfür einen Proxy mit Authentifizierung.
Unterstützte Dienste
Google Drive (Mein Drive, freigegebene Ablagen)
Google Docs, Tabellen, Präsentationen, Zeichnungen, Apps Script
Google Formulare und Google Sites (nur Metadaten; für sie gibt es kein Exportformat)
Voraussetzungen
Die Installation des Plugins ist erforderlich
Ein Google Cloud Platform-Projekt muss erstellt werden
Ein Dienstkonto muss erstellt und Anmeldedaten abgerufen werden
Domain-weite Delegierung für Google Workspace muss konfiguriert werden
Sofern nicht
crawl_target=legacyverwendet wird, wird ein Google Workspace-Administratorkonto benötigt, dessen Identität übernommen wird
Plugin-Installation
Methode 1: JAR-Datei direkt platzieren
Methode 2: Über die Administrationsoberfläche installieren
Öffnen Sie „System“ -> „Plugins“
Laden Sie die JAR-Datei hoch
Starten Sie Fess neu
Konfiguration
Konfigurieren Sie über die Administrationsoberfläche unter „Crawler“ -> „Datenspeicher“ -> „Neu erstellen“.
Grundeinstellungen
| Einstellung | Beispielwert |
|---|---|
| Name | Company Google Drive |
| Handler-Name | GoogleDriveDataStore |
| Aktiviert | Ein |
Parameter-Einstellungen
Parameterliste
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
private_key | Ja | Privater Schlüssel des Dienstkontos (PEM-Format, Zeilenumbrüche als \n) |
private_key_id | Ja | ID des privaten Schlüssels |
client_email | Ja | E-Mail-Adresse des Dienstkontos |
impersonate_user | Bedingt | Das Google Workspace-Konto, dessen Identität über die Domain-weite Delegierung übernommen wird. Erforderlich, sofern nicht crawl_target=legacy gesetzt ist; ohne diesen Wert schlägt der Crawl beim Start fehl. shared_drives und both ermitteln die freigegebenen Ablagen mit Domain-Administratorzugriff, daher muss dieses Konto ein Domain-Administrator sein. |
crawl_target | Nein | Was gecrawlt wird: legacy, shared_drives, users oder both. Standard: shared_drives. Siehe Crawl-Ziel. |
scopes | Nein | OAuth-Bereiche, kommagetrennt. Standard: https://www.googleapis.com/auth/drive.readonly. crawl_target=users und crawl_target=both benötigen zusätzlich https://www.googleapis.com/auth/admin.directory.user.readonly. |
user_query | Nein | Admin SDK-query, mit der die von crawl_target=users und crawl_target=both ermittelten Benutzer eingegrenzt werden. Standard: nicht gesetzt (alle Benutzer des Kundenkontos). |
query | Nein | Google Drive API-Suchabfragezeichenfolge. Wird nicht auf den Änderungs-Feed des inkrementellen Crawlings angewendet. |
corpora | Nein | Zu durchsuchende Korpora. Standard: allDrives. Wird nur von crawl_target=legacy ausgewertet und hat daher beim Standardziel keine Wirkung: shared_drives listet jede Ablage mit drive und users jede „Meine Ablage“ mit user auf, beides fest vorgegeben. |
spaces | Nein | Zu durchsuchende Bereiche (Google Drive API spaces-Parameter, z.B. drive, appDataFolder). Standard: nicht gesetzt (API-Standard). Wird von crawl_target=legacy und users verwendet; bei shared_drives ignoriert. |
fields | Nein | Von der Google Drive API anzufordernde Dateifelder. Standard ist nicht *, sondern eine explizite Feldliste. Sie deckt jedes Feld ab, das der Skript-Kontext, die ACL-Auflösung, die Index-URL und der inkrementelle Crawl benötigen; ein Feld außerhalb dieser Liste liest im Crawl-Skript null. Setzen Sie fields=*, um wie in früheren Versionen alle Felder anzufordern. |
default_permissions | Nein | Berechtigungen, die verwendet werden, wenn die Drive-ACL eines Dokuments nichts ergibt (kommagetrennt, z.B. {role}drive-users). Dies ist ein Rückfallwert, keine Ergänzung: Ein Dokument mit auflösbarer ACL erhält nur diese ACL. |
max_size | Nein | Maximale Dateigröße (in Bytes) für die Indizierung. Standard: 10000000 (ca. 10MB) |
number_of_threads | Nein | Anzahl der parallelen Verarbeitungs-Threads. Standard: 1 |
incremental | Nein | Ob über den Änderungs-Feed von Drive gecrawlt wird, statt alles aufzulisten. Standard: false. Der Wert wird vor dem Start des Crawls direkt aus dem Parameterfeld der Datenspeicher-Konfiguration gelesen. Siehe Inkrementelles Crawling. |
Erweiterte Parameter
| Parameter | Beschreibung |
|---|---|
domain_permission_format | Rollenformat für eine Drive-Berechtigung des Typs domain. {domain} wird durch den Domainnamen ersetzt. Standard: {group}{domain} |
thread_pool_timeout_seconds | Wie lange am Ende eines Crawls auf das Beenden der Worker-Threads gewartet wird (Sekunden). Standard: 60 |
page_size | Seitengröße für files.list und changes.list. Standard: 1000; größere Werte werden auf 1000 begrenzt. |
permission_page_size | Seitengröße für permissions.list und drives.list. Standard: 100; größere Werte werden auf 100 begrenzt. |
max_cached_content_size | Maximale Größe (in Bytes) des im Speicher gehaltenen Inhalts; größerer Inhalt wird in eine temporäre Datei ausgelagert. Standard: 1048576 (1MB). |
max_retries | Maximale Anzahl von Wiederholungen bei einem durch Ratenbegrenzung oder vorübergehend fehlgeschlagenen Drive API-Aufruf. Standard: 5 |
retry_initial_interval_ms | Anfängliches Backoff-Intervall vor der ersten Wiederholung (Millisekunden). Standard: 1000 |
max_backoff_ms | Obergrenze für eine einzelne Wartezeit (Millisekunden). Standard: 32000 |
read_timeout | HTTP-Lese-Timeout (in Millisekunden). Standard: 20000 |
connect_timeout | HTTP-Verbindungs-Timeout (in Millisekunden). Standard: 20000 |
proxy_host | Hostname des Proxyservers. Der Proxy wird nur verwendet, wenn proxy_host und proxy_port beide gesetzt sind; einer allein bleibt wirkungslos. |
proxy_port | Portnummer des Proxyservers. Siehe proxy_host. |
proxy_username | Benutzername für einen Proxy mit Authentifizierung. Ist er gesetzt, wird jeder Anfrage ein Proxy-Authorization-Header hinzugefügt. Was damit authentifiziert wird und was nicht, steht unter Einschränkungen. |
proxy_password | Passwort für einen Proxy mit Authentifizierung |
ignore_folder | Ob Ordner übersprungen werden sollen. Standard: true |
ignore_error | Ob die Verarbeitung bei Fehlern fortgesetzt werden soll. Standard: true |
supported_mimetypes | Zu indizierende MIME-Typen (regulärer Ausdruck, kommagetrennt). Standard: .* (alle Typen) |
include_pattern | Regulärer Ausdruck für zu indizierende URLs |
exclude_pattern | Regulärer Ausdruck für auszuschließende URLs |
refresh_token_interval | Wird seit 15.9 ignoriert. Zugriffstoken werden von der Authentifizierungsbibliothek erneuert. Eine bestehende Einstellung funktioniert weiter, und es wird eine Warnung protokolliert. |
Bemerkung
private_key, private_key_id, client_email, proxy_username und proxy_password werden aus dem Auswertungskontext des Skripts entfernt, sodass ein Crawl-Skript sie nicht indizieren kann und kein Suchergebnis sie preisgeben kann.
Bemerkung
Bei aktiviertem inkrementellem Crawling schreibt der Konnektor start_page_tokens und crawl_signature in das Parameterfeld der Datenspeicher-Konfiguration zurück. Diese Werte werden vom Konnektor verwaltet und erscheinen neben den von Ihnen gesetzten Parametern; lassen Sie sie unverändert. Werden sie bearbeitet oder gelöscht, crawlt der nächste Lauf jeden Bereich vollständig.
Crawl-Ziel
Ein Dienstkonto besitzt kein eigenes Drive und gehört keiner Google-Gruppe an. Ein Crawl, der sich als das Dienstkonto selbst authentifiziert, erreicht daher nur die Dateien, die ausdrücklich für die Adresse des Dienstkontos freigegeben wurden. crawl_target bestimmt deshalb, wessen Sicht auf Drive gecrawlt wird.
| Wert | Beschreibung |
|---|---|
legacy | Die Sicht des Dienstkontos selbst, wie in früheren Versionen. impersonate_user ist nicht erforderlich. Es werden nur die Dateien gefunden, die ausdrücklich für das Dienstkonto freigegeben sind. |
shared_drives | Standard. Jede freigegebene Ablage der Domain wird ermittelt und einzeln durchlaufen. |
users | Jeder Benutzer des Verzeichnisses wird über das Admin SDK ermittelt, und die „Meine Ablage“ jedes Benutzers wird durch Übernahme seiner Identität durchlaufen. |
both | shared_drives, gefolgt von users. Eine Datei, die in mehreren Bereichen erscheint, wird nur einmal indiziert. |
Folgendes wird beim Start des Crawls geprüft; eine ungültige Kombination löst eine DataStoreException aus, statt zu laufen:
crawl_targetmusslegacy,shared_drives,usersoderbothsein.impersonate_usermuss gesetzt sein, sofern nichtcrawl_target=legacygilt.scopesmusshttps://www.googleapis.com/auth/admin.directory.user.readonlyenthalten, wenncrawl_targetusersoderbothist.
Bemerkung
shared_drives und both ermitteln die freigegebenen Ablagen mit Domain-Administratorzugriff, daher muss das unter impersonate_user genannte Konto ein Google Workspace-Domain-Administrator sein. Diese Auflistung bestimmt den gesamten Umfang des Crawls, sodass ein dauerhafter Fehler den Crawl abbricht, statt gemeldet und übersprungen zu werden: Ein Crawl, der keine einzige Ablage ermitteln konnte, ist nicht teilweise erfolgreich und darf nicht als erfolgreich gelten, während er nichts indiziert.
Inkrementelles Crawling
Mit incremental=true liest jeder Bereich – eine freigegebene Ablage oder die Sicht eines Benutzers, dessen Identität übernommen wird – den Änderungs-Feed von Drive, statt alles aufzulisten. Ein Bereich ohne gespeicherten Token wird vollständig aufgelistet, und sein Änderungs-Feed wird für den nächsten Lauf verankert.
Warnung
delete_old_docs wird bei jedem inkrementellen Lauf auf false erzwungen, und ein ausdrückliches delete_old_docs=true wird überschrieben statt berücksichtigt (es wird eine Warnung protokolliert). Das Entfernen veralteter Dokumente löscht jedes Dokument der Konfiguration, das der aktuelle Crawl nicht berührt hat, und setzt damit einen vollständigen Crawl voraus. Ein inkrementeller Lauf berührt nur die geänderten Dokumente, sodass dieser Vorgang den Rest des Index löschen würde.
Um Dokumente zu entfernen, die aus Drive verschwunden sind, planen Sie eine separate Datenspeicher-Konfiguration mit incremental=false.
Die Tokens werden nur gespeichert, wenn der Crawl abgeschlossen wurde und die Worker-Threads beendet sind. Ein abgebrochener Crawl lässt die Tokens unverändert, und der nächste Lauf liest dieselben Änderungen erneut.
Die Tokens werden ebenfalls verworfen und jeder Bereich vollständig gecrawlt, wenn sich die Konfiguration geändert hat, die bestimmt, was ein Bereich liefert – also eines von crawl_target, impersonate_user, user_query, query, corpora oder spaces. Ein gespeicherter Token beschreibt nur den Bestand, über dem er genommen wurde; ihn nach einer solchen Änderung fortzusetzen, würde eine dauerhafte Lücke im Index hinterlassen.
Ratenbegrenzung und Wiederholungen
Ein durch Ratenbegrenzung oder vorübergehend fehlgeschlagener Drive API-Aufruf wird mit exponentiellem Backoff wiederholt, begrenzt durch max_retries, retry_initial_interval_ms und max_backoff_ms. Ein Retry-After-Header hat Vorrang vor der exponentiellen Wartezeit, wird aber durch max_backoff_ms begrenzt, damit ein fehlerhafter Header den Crawl nicht stundenlang blockieren kann. Nur die Sekundenform von Retry-After wird berücksichtigt; ein HTTP-Datum fällt auf die exponentielle Wartezeit zurück.
429, 500, 502, 503 und 504 werden immer wiederholt. Ein 403 wird nur wiederholt, wenn es sich um einen Fehler wegen Ratenbegrenzung handelt; jedes andere 403 ist ein Autorisierungsfehler, den eine Wiederholung nicht beheben kann, und wird sofort gemeldet.
Eine Dateiauflistung, die nicht abgeschlossen werden konnte, bricht nicht mehr den gesamten Crawl ab: Die übrigen freigegebenen Ablagen und Benutzer werden weiterhin gecrawlt, und der Fehler wird im Crawler-Log und in der Liste der fehlgeschlagenen URLs in der Administrationsoberfläche festgehalten.
Skript-Einstellungen
Verfügbare Felder
| Feld | Beschreibung |
|---|---|
file.name | Dateiname |
file.description | Dateibeschreibung |
file.contents | Textinhalt der Datei |
file.mimetype | MIME-Typ der Datei |
file.filetype | Dateityp |
file.created_time | Erstellungsdatum |
file.modified_time | Letztes Änderungsdatum |
file.web_view_link | Link zum Öffnen im Browser |
file.url | URL der Datei. Dies ist webViewLink; hat eine Datei keinen, wird stattdessen https://drive.google.com/open?id=<Datei-ID> verwendet. |
file.thumbnail_link | Thumbnail-Link (kurze Gültigkeit) |
file.size | Dateigröße (Bytes) |
file.roles | Zugriffsberechtigungen |
Bemerkung
Nur die im Parameter fields aufgeführten Felder werden gefüllt. Ein nicht angefordertes Feld liest im Skript null. Setzen Sie fields=*, um wie in früheren Versionen alle Felder anzufordern.
Weitere Details finden Sie unter Google Drive Files API.
Textextraktion nativer Google-Typen
Ein nativer Google-Typ kann nicht heruntergeladen, sondern muss exportiert werden. Das Exportziel wird aus den Exportformaten gewählt, die die Drive API tatsächlich meldet, nicht aus einer festen Tabelle, und ein Export ist auf 10MB begrenzt.
| Typ | Exportiert als |
|---|---|
| Google Docs | Markdown (text/markdown), ersatzweise reiner Text und dann HTML |
| Google Tabellen | TSV (text/tab-separated-values), ersatzweise CSV |
| Google Präsentationen | Reiner Text |
| Google Zeichnungen | PNG. Es gibt keinen Text zu indizieren, daher werden nur die Metadaten indiziert. |
| Apps Script | Das exportierte JSON-Paket, aus dem die Skriptquellen indiziert werden |
| Google Formulare, Google Sites | Nicht exportierbar. Die Metadaten werden indiziert, und es wird kein Fehler gemeldet. |
Bemerkung
Da Google Docs jetzt als Markdown exportiert werden, enthält der indizierte Text jedes Google-Dokuments Markdown-Syntaxzeichen. Damit die Änderung bereits indizierte Dokumente erreicht, ist ein vollständiger erneuter Crawl erforderlich.
Bemerkung
Die Exportziele werden einmal pro Crawl von der Drive API gelesen. Schlägt dieser Aufruf fehl, fällt der Konnektor auf die Konvertierungen zurück, die Drive schon immer unterstützt hat – reiner Text für Google Docs und CSV für Google Tabellen – und protokolliert eine Warnung.
Google Cloud Platform-Konfiguration
1. Projekt erstellen
Besuchen Sie https://console.cloud.google.com/:
Erstellen Sie ein neues Projekt
Geben Sie den Projektnamen ein
Wählen Sie Organisation und Standort
2. Google Drive API aktivieren
Unter „APIs und Dienste“ -> „Bibliothek“:
Suchen Sie nach „Google Drive API“
Klicken Sie auf „Aktivieren“
Aktivieren Sie außerdem „Admin SDK API“, wenn
crawl_targetusersoderbothist
3. Dienstkonto erstellen
Unter „APIs und Dienste“ -> „Anmeldedaten“:
Wählen Sie „Anmeldedaten erstellen“ -> „Dienstkonto“
Geben Sie den Dienstkontonamen ein (z.B.: fess-crawler)
Klicken Sie auf „Erstellen und fortfahren“
Rolle ist nicht erforderlich (überspringen)
Klicken Sie auf „Fertig“
4. Dienstkonto-Schlüssel erstellen
Beim erstellten Dienstkonto:
Klicken Sie auf das Dienstkonto
Öffnen Sie den Tab „Schlüssel“
„Schlüssel hinzufügen“ -> „Neuen Schlüssel erstellen“
Wählen Sie JSON-Format
Speichern Sie die heruntergeladene JSON-Datei
5. Domain-weite Delegierung aktivieren
In den Dienstkonto-Einstellungen:
Aktivieren Sie „Domain-weite Delegierung aktivieren“
Klicken Sie auf „Speichern“
Kopieren Sie die „OAuth 2.0-Client-ID“
6. In der Google Workspace Admin-Konsole genehmigen
Besuchen Sie https://admin.google.com/:
Öffnen Sie „Sicherheit“ -> „Zugriffs- und Datenverwaltung“ -> „API-Steuerung“
Wählen Sie „Domain-weite Delegierung“
Klicken Sie auf „Neu hinzufügen“
Geben Sie die Client-ID ein
Geben Sie den OAuth-Bereich ein:
Ist
crawl_targetgleichusersoderboth, geben Sie beide Bereiche ein:Klicken Sie auf „Autorisieren“
Warnung
Der Delegierungseintrag listet die Bereiche ausdrücklich auf, daher muss er beim Aktualisieren von einer früheren Version angepasst werden. Der Standardbereich wurde in 15.9 von https://www.googleapis.com/auth/drive auf https://www.googleapis.com/auth/drive.readonly eingeschränkt, und die hier erteilten Bereiche müssen zum Parameter scopes der Datenspeicher-Konfiguration passen.
Anmeldedaten konfigurieren
Informationen aus der JSON-Datei abrufen
Heruntergeladene JSON-Datei:
Setzen Sie die folgenden Informationen in den Parametern:
private_key_id->private_key_idprivate_key->private_key(Zeilenumbrüche bleiben als\n)client_email->client_email
Format des privaten Schlüssels
private_key behält Zeilenumbrüche als \n bei:
Anwendungsbeispiele
Alle freigegebenen Ablagen crawlen
Parameter:
Skript:
Die „Meine Ablage“ jedes Benutzers crawlen
Parameter:
Um die Benutzer einzugrenzen, fügen Sie eine Admin SDK-Abfrage hinzu:
Das bisherige Verhalten beibehalten
crawl_target=legacy behält den Durchlauf von vor 15.9 bei, bei dem nur die ausdrücklich für das Dienstkonto freigegebenen Dateien gefunden werden. impersonate_user ist nicht erforderlich.
Parameter:
Crawlen mit Berechtigungen
Parameter:
Skript:
default_permissions wird nur für ein Dokument verwendet, dessen Drive-ACL nichts ergibt.
Nur bestimmte Dateitypen crawlen
Nur Google Docs:
Fehlerbehebung
Der Crawl startet nicht
Symptom: Der Crawl endet sofort mit einer DataStoreException
Lösung:
parameter 'crawl_target' must be one of ...: Der Wert voncrawl_targetist wederlegacynochshared_drives,usersoderboth.parameter 'impersonate_user' is required when 'crawl_target' is not 'legacy': Setzen Sieimpersonate_userauf ein Domain-Administratorkonto oder setzen Siecrawl_target=legacy.parameter 'scopes' must include 'https://www.googleapis.com/auth/admin.directory.user.readonly': Fügen Sie diesen Bereich zuscopesund zum Eintrag der Domain-weiten Delegierung hinzu.
Beim unveränderten Aktualisieren einer bestehenden Konfiguration ist dies das erwartete Ergebnis. Siehe Änderungen in 15.9.
Authentifizierungsfehler
Symptom: 401 Unauthorized oder 403 Forbidden
Zu überprüfen:
Überprüfen Sie die Anmeldedaten des Dienstkontos:
Sind die Zeilenumbrüche im
private_keyals\n?Ist die
private_key_idkorrekt?Ist die
client_emailkorrekt?
Überprüfen Sie, ob die Google Drive API aktiviert ist
Überprüfen Sie, ob die Domain-weite Delegierung konfiguriert ist
Überprüfen Sie, ob die Genehmigung in der Google Workspace Admin-Konsole erteilt wurde
Überprüfen Sie den OAuth-Bereich (
https://www.googleapis.com/auth/drive.readonly, zusätzlichhttps://www.googleapis.com/auth/admin.directory.user.readonlybeicrawl_target=usersoderboth)
Fehler bei Domain-weiter Delegierung
Symptom: Not Authorized to access this resource/api
Lösung:
Überprüfen Sie die Genehmigung in der Google Workspace Admin-Konsole:
Ist die Client-ID korrekt registriert?
Sind die OAuth-Bereiche korrekt? Der Delegierungseintrag listet sie ausdrücklich auf, daher erfordert die in 15.9 eingeführte Einschränkung eine Anpassung.
Überprüfen Sie, ob die Domain-weite Delegierung beim Dienstkonto aktiviert ist
Überprüfen Sie, ob das unter
impersonate_usergenannte Konto ein Domain-Administrator ist, wenncrawl_targetshared_drivesoderbothist
Keine Dateien abrufbar
Symptom: Crawling erfolgreich, aber 0 Dateien
Zu überprüfen:
Überprüfen Sie, ob
crawl_targetdem entspricht, was Sie beabsichtigen. Mitlegacywerden nur die ausdrücklich für das Dienstkonto freigegebenen Dateien gefunden, da ein Dienstkonto kein eigenes Drive besitzt und keiner Gruppe angehört.Überprüfen Sie, ob Dateien in Google Drive existieren
Überprüfen Sie, ob das Dienstkonto Leseberechtigung hat
Überprüfen Sie, ob die Domain-weite Delegierung korrekt konfiguriert ist
Überprüfen Sie, ob der Zugriff auf das Drive des Zielbenutzers möglich ist
Dokumente werden übersprungen
Symptom: Skipped ... because no permission could be resolved im Crawler-Log
Lösung:
Die Drive-ACL des Dokuments ergab überhaupt keine Suchrolle, sodass es übersprungen statt indiziert wurde. Ein Dokument ohne Rolle zu indizieren, deaktiviert den Fess-Berechtigungsfilter für dieses Dokument und macht es für jeden Benutzer sichtbar – deshalb wird es stattdessen übersprungen. Ein übersprungenes Dokument ist kein Crawl-Fehler und erscheint daher nur im Crawler-Log, nicht in der Liste der fehlgeschlagenen URLs.
Setzen Sie
default_permissions, um solche Dokumente mit einer Rückfallberechtigung zu indizierenÜberprüfen Sie, ob das unter
impersonate_usergenannte Konto ein Domain-Administrator ist, damit die ACLs der freigegebenen Ablagen gelesen werden könnenPrüfen Sie, ob das Dokument nur per Link freigegeben ist. Eine
domain- oderanyone-Berechtigung mitallowFileDiscovery=falsevergibt keine Suchrolle, da Drive selbst ein solches Dokument ebenfalls nicht über die Suche auffindbar macht.
API-Kontingentfehler
Symptom: 403 Rate Limit Exceeded oder 429 Too Many Requests
Lösung:
Ein solcher Fehler wird automatisch mit exponentiellem Backoff wiederholt. Erhöhen Sie
max_retriesodermax_backoff_ms, wenn der Crawl weiterhin fehlschlägt.Verringern Sie
number_of_threads, um die Anfragerate zu senkenÜberprüfen Sie das Kontingent in der Google Cloud Platform
Verlängern Sie das Crawl-Intervall
Beantragen Sie bei Bedarf eine Kontingenterhöhung
Formatfehler beim privaten Schlüssel
Symptom: Invalid private key format
Lösung:
Überprüfen Sie, ob die Zeilenumbrüche korrekt als \n vorliegen:
Freigegebene Ablagen crawlen
Bemerkung
Mit crawl_target=shared_drives (dem Standard) werden die freigegebenen Ablagen mit Domain-Administratorzugriff ermittelt, sodass das Dienstkonto nicht Mitglied jeder einzelnen Ablage sein muss. Stattdessen muss impersonate_user einen Domain-Administrator benennen.
Mit crawl_target=legacy muss das Dienstkonto jeder freigegebenen Ablage hinzugefügt werden:
Öffnen Sie die freigegebene Ablage in Google Drive
Klicken Sie auf „Mitglieder verwalten“
Fügen Sie die E-Mail-Adresse des Dienstkontos hinzu
Setzen Sie die Berechtigungsstufe auf „Betrachter“
Bei großen Dateimengen
Symptom: Crawling dauert lange oder Timeout
Lösung:
Aktivieren Sie
incremental=true, damit nur die Änderungen seit dem letzten Lauf gecrawlt werdenTeilen Sie freigegebene Ablagen und Benutzer auf getrennte Datenspeicher-Konfigurationen auf, statt
crawl_target=bothzu verwendenGrenzen Sie den Umfang mit
query,user_queryodersupported_mimetypeseinVerteilen Sie die Last über Zeitplaneinstellungen
Passen Sie das Crawl-Intervall an
Berechtigungen und Zugriffskontrolle
Wie Drive-Berechtigungen zu Fess-Rollen werden
Die ACL eines Dokuments wird in drei Stufen aufgelöst, damit die Anzahl zusätzlicher API-Aufrufe proportional zur Anzahl der freigegebenen Ablagen bleibt und nicht zur Anzahl der Dateien:
die in der Dateiauflistung enthaltenen Berechtigungen, die nichts zusätzlich kosten;
bei einem Element einer freigegebenen Ablage, für das die Drive API keine solchen Berechtigungen liefert, die ACL der freigegebenen Ablage selbst. Sie wird einmal pro Ablage mit Domain-Administratorzugriff abgerufen und zwischengespeichert;
bei einem Element mit eigenen zusätzlichen Berechtigungen diese Berechtigungen.
Jede Drive-Berechtigung wird zu einer Fess-Suchrolle:
| Drive-Berechtigung | Suchrolle |
|---|---|
user | Die Suchrolle der E-Mail-Adresse dieses Benutzers. Die Eigentümer der Datei werden immer auf diese Weise hinzugefügt. |
group | Die Suchrolle der E-Mail-Adresse dieser Gruppe. Die Mitgliedschaft in Google-Gruppen wird nie aufgelöst; es wird erwartet, dass Fess sie auf Benutzerseite über SSO oder LDAP auflöst. |
domain | domain_permission_format, wobei {domain} durch den Domainnamen ersetzt wird. Standard: {group}{domain} |
anyone | Die Rolle guest |
Eine der obigen mit allowFileDiscovery=false sowie eine gelöschte Berechtigung | Keine Rolle. Eine reine Link-Freigabe ist auch in Drive selbst nicht über die Suche auffindbar. |
Ist das Ergebnis leer, wird stattdessen default_permissions verwendet – als Rückfallwert, nicht als Ergänzung. Ist auch default_permissions nicht gesetzt, wird das Dokument übersprungen.
Google Drive-Freigabeberechtigungen abbilden
Google Drive-Freigabeeinstellungen auf Fess-Berechtigungen abbilden:
Parameter:
Skript:
file.roles enthält die Google Drive-Freigabeinformationen.
Einschränkungen
Das Signal „entfernt“ von Drive umfasst neben einer Löschung auch den Verlust des Zugriffs. Mit
crawl_target=usersoderbothführt der Entzug des Zugriffs eines Benutzers dazu, dass das Dokument aus dem Index entfernt wird, obwohl ein anderer Benutzer es weiterhin lesen kann. Es kehrt bei der nächsten Änderung dieser Datei oder beim nächsten vollständigen Crawl zurück.Fällt ein Bereich während eines inkrementellen Laufs auf einen vollständigen Crawl zurück, bleibt das Entfernen veralteter Dokumente weiterhin unterdrückt. Dokumente, die aus Drive gelöscht wurden, während ein Bereich nicht verankert war, bleiben daher im Index. Abhilfe schafft eine separate Konfiguration mit
incremental=false, deren vollständiger Crawl sie entfernt.Das Weitergeben einer Löschung setzt voraus, dass die indizierte URL die Drive-Datei-ID enthält, was für
webViewLinkund für die Ersatz-URL gilt. Bei einem Crawl-Skript, dasurlauf einen Wert ohne die Datei-ID umschreibt, werden Löschungen nicht weitergegeben.Der Änderungs-Feed wird nicht durch
querygefiltert. Mit gesetztemqueryundincremental=truewird eine geänderte Datei auch dann indiziert, wenn sie der Abfrage nicht entspricht.crawl_target=bothlöst in einer großen Domain etwa2 + (Anzahl der freigegebenen Ablagen) + (Anzahl der Benutzer)Auflistungen aus. Die praktische Abhilfe besteht darin, freigegebene Ablagen und Benutzer auf getrennte Datenspeicher-Konfigurationen aufzuteilen.proxy_usernameundproxy_passwordwerden alsProxy-Authorization-Anfrageheader gesendet, der nur eine einfache HTTP-Anfrage authentifiziert. Der gesamte Google API-Verkehr läuft über HTTPS, und eine HTTPS-Verbindung über einen Proxy mit Authentifizierung wird durch einenCONNECT-Austausch aufgebaut, den das JDK überjava.net.Authenticatorund nicht über einen Anfrageheader abwickelt. Eine solche Umgebung benötigt stattdessen die JVM-Option-Djdk.http.auth.tunneling.disabledSchemes=und einenAuthenticator.
Weiterführende Informationen
Übersicht der Datenspeicher-Konnektoren - Übersicht der Datenspeicher-Konnektoren
Microsoft 365-Konnektor - Microsoft 365-Konnektor
Box-Konnektor - Box-Konnektor
Datenspeicher-Crawl - Leitfaden zur Datenspeicher-Konfiguration