Разделы документации
Коннекторы

Google Drive

Подключение Google Drive к Charo — ключ сервис-аккаунта, scope’ы и делегирование, выбор дисков и папок, синхронизация прав, режим без Google Workspace.

Что даёт коннектор

Charo забирает из Google Drive файлы и держит их в поиске: документы Google (Docs, Sheets, Slides), офисные файлы, PDF и другие поддерживаемые форматы. Со сканов и изображений распознаётся текст.

Права Google Drive переносятся в Charo: файл найдёт только тот, кому он доступен на диске. Вместе с правами переносится и членство в группах Workspace.

Что именно индексировать, вы выбираете сами — от всех общих дисков организации до перечня конкретных папок.

Что индексируетсяфайлы общих дисков и «Моих дисков», их содержимое и метаданные
Синхронизация правда, вместе с составом групп Workspace
Способ подключенияключ сервис-аккаунта Google Cloud
Обновленияинкрементально, по времени изменения файла
Ограничениефайлы больше 10 МБ пропускаются

Предварительные требования

  • Проект Google Cloud с сервис-аккаунтом и его JSON-ключом.
  • Для обхода дисков всей организации — Google Workspace и права супер-администратора, чтобы настроить делегирование (domain-wide delegation). Без Workspace коннектор тоже работает — см. «Подключение без Google Workspace».

Google Drive подключается только сервис-аккаунтом: входа под учётной записью пользователя через OAuth у этого коннектора нет. Форма принимает JSON только с полем "type": "service_account"; ключ OAuth-приложения отклоняется.

Учётные данные

  1. В console.cloud.google.com создайте проект и включите два API: Google Drive API и Admin SDK API.
  2. Создайте сервис-аккаунт (IAM & Admin → Service Accounts) и выпустите для него JSON-ключ.
  3. Настройте делегирование — см. следующий раздел.
  4. В Charo загрузите JSON-ключ («Ключ сервисного аккаунта Google») и заполните «Email администратора Workspace (необязательно)» — от его имени сервис-аккаунт будет обращаться к API.

Список scope’ов

Коннектор запрашивает ровно три scope’а, больше выдавать не нужно:

https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/admin.directory.user.readonly
https://www.googleapis.com/auth/admin.directory.group.readonly

Первый — чтение файлов и их метаданных. Два admin.directory.* — чтение пользователей и групп домена; без них не работают синхронизация групп и перечисление «Моих дисков» сотрудников.

Отдельного scope’а на метаданные (drive.metadata.readonly) не нужно: drive.readonly уже покрывает всё, что читает коннектор.

Запрашиваются эти scope’ы двумя наборами, а не одним списком: к каталогу домена коннектор обращается, только когда есть кого олицетворять. Поэтому подключение без Workspace не упирается в отказ на этапе авторизации.

Настройка делегирования

  1. Откройте админ-консоль Workspace: Security → Access and data control → API controls → Domain-wide delegation → Add new.
  2. Укажите Client ID сервис-аккаунта (числовой, из консоли Google Cloud).
  3. В поле scope’ов вставьте все три строки списка выше — одной строкой, через запятую.
  4. Сохраните. Изменения применяются в течение нескольких минут.

Подключение без Google Workspace

Поле «Email администратора Workspace» необязательное, и оно же выбирает один из двух режимов работы сервис-аккаунта:

РежимКогдаЧто доступно
С делегированиемполе заполненообщие диски, «Мои диски» сотрудников, права файлов и состав групп
От своего имениполе пустоетолько то, что расшарили самому сервис-аккаунту; права файлов переносятся, группы — нет

Второй режим — рабочий способ подключить Drive там, где Google Workspace нет вовсе: раздайте сервис-аккаунту доступ к нужным папкам и общим дискам по его адресу вида имя@проект.iam.gserviceaccount.com.

Что при этом меняется:

  • Синхронизация прав по группам не работает. Состав групп читается через Admin SDK, а он существует только внутри домена Workspace. Коннектор откажет явно, а не молча отдаст пустой список.
  • Обход «Моих дисков» сотрудников недоступен — перечислять чужие диски некому.
  • Грант «всем в домене» не делает файл публичным в Charo: у сервис-аккаунта без олицетворения нет своего домена, с которым можно сверить такой грант.

Второй способ обойтись без обхода всего домена — расширенное поле «Email конкретных пользователей». Коннектор будет действовать только от имени перечисленных учёток и не станет запрашивать каталог домена вовсе.

Настройка в Charo

Вкладка «Как индексировать ваш Google Drive?», раздел «Общие»:

ПолеЧто означает
Включать общие диски?индексировать общие диски организации
Включить «Мои диски» всех пользователей?индексировать «Мои диски» всех сотрудников домена
Включать все файлы, доступные вам?читать файлы, расшаренные учётной записи извне: один такой файл будет прочитан для каждого, кому он открыт

Раздел «Выборочно» — вместо всего домена перечислить конкретные объекты:

ПолеЧто означает
URL общих дисковконкретные общие диски, через запятую
URL папокконкретные папки, через запятую
Email владельцев «Моего диска»«Мои диски» перечисленных пользователей

Если перечислить конкретные диски, папки или адреса, переключатели раздела «Общие» перестают действовать: узкое указание побеждает. Если не выбрано ничего, коннектор откажется сохраняться — укажите хотя бы один источник.

Расширенные поля: «Email конкретных пользователей» (индексировать только то, что доступно этим пользователям) и «Скрывать файлы, доступные только по ссылке?».

Синхронизация прав

Charo наследует права Google Drive — файл найдёт только тот, кому он доступен на диске. Права снимаются тем же обходом, что и содержимое, и дальше пересинхронизируются примерно раз в пять минут.

Как переносится доступ:

  • по адресу человека и по группе — напрямую;
  • «доступ всем, у кого есть ссылка» делает документ публичным в Charo, только если файл при этом доступен для поиска;
  • «доступ всем в домене» делает документ публичным, только если домен совпадает с доменом учётной записи, от имени которой идёт обход. При работе без Workspace такой грант публичным документ не делает;
  • если список доступа к файлу не виден учётной записи коннектора, Charo оставляет прежние права документа и записывает ошибку — вместо того чтобы закрыть файл для всех.

Google Drive отдаёт права уже разрешёнными на каждом объекте: доступ, выданный на папку или общий диск, повторяется на каждом файле внутри. Поэтому Charo не достраивает цепочку родителей — он переносит список доступа файла как есть.

Членство в группах требует заполненного поля «Email администратора Workspace». Нужна активная лицензия; подробнее — «Права доступа».

Ограничения и частота обновления

  • Файлы больше 10 МБ пропускаются.
  • Скорость ограничена квотами Google Drive API; большие домены индексируются долго.
  • Обновления забираются инкрементально по времени изменения файла.

Устранение неполадок

После изменения прав или scope’ов сохраните коннектор ещё раз: Charo заново пройдёт авторизацию, обратится к каталогу Workspace от имени указанного администратора и сообщит, чего не хватает.

Делегирование не выдано на запрошенные scope’ы

Самая частая ошибка. Причины:

  • делегирование не настроено или настроено для другого client ID — сверьте числовой Client ID сервис-аккаунта;
  • в делегировании нет одной из трёх строк списка выше. Google отказывает во всём обмене целиком, даже если не хватает одного scope’а;
  • строки записаны с опечаткой или лишними пробелами — важно точное совпадение.

Лишние scope’ы в делегировании работе не мешают.

Олицетворение отклонено

Учётная запись из поля «Email администратора Workspace» не существует, заблокирована или не имеет прав администратора каталога. Сервис-аккаунт действует именно от её имени, и без этих прав не получится ни перечислить пользователей домена, ни синхронизировать группы.

Отказ с упоминанием accessNotConfigured

В проекте Google Cloud не включён нужный API — включите Google Drive API и Admin SDK API.

Ключ отозван или недействителен

JSON-ключ сервис-аккаунта отозван или удалён — выпустите новый и загрузите его заново.

Отказ с упоминанием invalid_grant

Часы сервера Charo расходятся с реальным временем — проверьте NTP.

Пустая индексация

Не выбран ни один источник: включите общие диски или «Мои диски» либо перечислите конкретные диски, папки и адреса на вкладке «Выборочно».

Часть файлов отсутствует

Файлы, доступные «всем по ссылке», могли быть скрыты настройкой «Скрывать файлы, доступные только по ссылке?», либо превышают порог размера.

У документа не обновились права

Если учётная запись коннектора не видит список доступа к файлу, Charo оставляет прежние права этого документа и записывает ошибку — вместо того чтобы закрыть файл для всех.