Разделы документации
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-приложения отклоняется.
Учётные данные
- В console.cloud.google.com создайте проект и включите два API: Google Drive API и Admin SDK API.
- Создайте сервис-аккаунт (IAM & Admin → Service Accounts) и выпустите для него JSON-ключ.
- Настройте делегирование — см. следующий раздел.
- В 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 не упирается в отказ на этапе авторизации.
Настройка делегирования
- Откройте админ-консоль Workspace: Security → Access and data control → API controls → Domain-wide delegation → Add new.
- Укажите Client ID сервис-аккаунта (числовой, из консоли Google Cloud).
- В поле scope’ов вставьте все три строки списка выше — одной строкой, через запятую.
- Сохраните. Изменения применяются в течение нескольких минут.
Подключение без 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 оставляет прежние права этого документа и записывает ошибку — вместо того чтобы закрыть файл для всех.