Права доступа к Git репозиторию для деплоя бота

🎯 Минимальные права для деплоя

Для деплоя бота из приватного репозитория клиенту нужно дать только права на чтение (Read).

GitHub

Минимальные права:
  • Read (чтение кода) - достаточно для клонирования
Как дать доступ: #### Вариант 1: Personal Access Token (рекомендуется)
    • Клиент создает Personal Access Token:
- Settings → Developer settings → Personal access tokens → Tokens (classic) - Scopes: только repo (для приватных репозиториев) - Или public_repo (для публичных)
    • В Bothost при добавлении репозитория:
- Тип: HTTPS - Username: x-access-token (автоматически) - Token: вставляется токен клиента Права токена:
✅ repo (для приватных репозиториев)
   - repo:status
   - repo_deployment
   - public_repo
   - repo:invite
   - security_events
#### Вариант 2: Deploy Key (для одного репозитория)
    • На manager ноде сгенерировать SSH ключ:
``bash ssh-keygen -t ed25519 -C "bothost-deploy" -f ~/.ssh/bothost_deploy_key
2. Добавить публичный ключ в репозиторий:
   - Settings → Deploy keys → Add deploy key
   - Title: Bothost Deploy
   - Key: содержимое ~/.ssh/bothost_deploy_key.pub
   - ✅ Allow write access: НЕ включать (только чтение)

Права Deploy Key:
  • ✅ Read-only доступ к репозиторию
  • ❌ Не может изменять код
  • ❌ Не может создавать issues/pull requests
#### Вариант 3: GitHub App (для организации) Для организаций можно создать GitHub App с минимальными правами:
  • ✅ Contents: Read (чтение кода)
  • ✅ Metadata: Read (метаданные)

### GitLab Минимальные права:
  • Guest или Reporter роль
Как дать доступ: #### Вариант 1: Personal Access Token
    • Клиент создает Personal Access Token:
- User Settings → Access Tokens - Scopes: только
read_repository
    • В Bothost:
- Тип: HTTPS - Username:
oauth2 - Token: токен клиента Права токена:
  • read_repository - чтение репозитория
` #### Вариант 2: Deploy Token
    • В репозитории:
- Settings → Repository → Deploy tokens - Name:
Bothost Deploy - Scopes: только read_repository - Expires: по желанию
    • Использовать:
- Username: из GitLab - Token: из GitLab

Bitbucket

Минимальные права:
  • Read доступ
Как дать доступ: #### Personal Access Token
    • Клиент создает App Password:
- Personal settings → App passwords - Permissions: только
Repositories: Read
    • В Bothost:
- Тип: HTTPS - Username: username клиента - Token: app password

🔒 Безопасность

✅ Что безопасно:

    • Deploy Key (SSH) - самый безопасный вариант
- Привязан к одному репозиторию - Не может изменять код - Можно отозвать в любой момент
    • Personal Access Token с минимальными правами
- Только чтение - Можно ограничить по времени - Можно отозвать
    • Deploy Token (GitLab)
- Только для деплоя - Ограничен по времени - Минимальные права

❌ Что НЕ безопасно:

    • Полный доступ к аккаунту
- Никогда не просите пароль от аккаунта - Не используйте токены с правами на запись
    • Токены с правами на изменение кода
- Не нужны для деплоя - Риск компрометации

📝 Инструкция для клиента

GitHub

    • Перейти в Settings → Developer settings → Personal access tokens → Tokens (classic)
    • Нажать "Generate new token (classic)"
    • Название: Bothost Deploy
    • Expiration: выбрать срок (рекомендуется 1 год)
    • Scopes: выбрать только repo (для приватных) или public_repo (для публичных)
    • Нажать "Generate token"
    • Скопировать токен (показывается только один раз!)
    • В Bothost при добавлении репозитория:
- Вставить URL репозитория - Выбрать "Приватный репозиторий" - Вставить токен в поле "Token"

GitLab

    • Перейти в User Settings → Access Tokens
    • Token name: Bothost Deploy
    • Expiration date: выбрать срок
    • Scopes: выбрать только read_repository
    • Нажать "Create personal access token"
    • Скопировать токен
    • В Bothost:
- URL репозитория - Выбрать "Приватный репозиторий" - Вставить токен

🔄 Обновление токенов

Если токен истек или был скомпрометирован:
    • Клиент создает новый токен
    • В Bothost обновляет репозиторий:
- Перейти в настройки репозитория - Обновить токен - Сохранить
    • Старый токен можно отозвать в настройках GitHub/GitLab

✅ Рекомендации

Для клиента:

    • Использовать отдельный токен для Bothost
- Не использовать основной токен аккаунта - Легче отозвать при необходимости
    • Установить срок действия
- Не создавать токены без срока - Рекомендуется 1 год
    • Минимальные права
- Только чтение кода - Не давать права на запись

Для Bothost:

    • Хранить токены в зашифрованном виде
- Использовать base64 кодирование (как сейчас) - Не логировать токены
    • Использовать HTTPS вместо SSH
- Проще для клиентов - Не нужны SSH ключи на сервере
    • Проверять доступность репозитория
- Валидировать токен перед сохранением - Показывать ошибки если токен неверный

🆘 Решение проблем

Ошибка: "Repository not found" или "Authentication failed"

Причины:
    • Токен неверный или истек
    • Токен не имеет прав на репозиторий
    • Репозиторий удален или переименован
Решение:
    • Проверить токен в настройках GitHub/GitLab
    • Создать новый токен с правильными правами
    • Обновить токен в Bothost

Ошибка: "Permission denied"

Причины:
    • Токен не имеет прав на чтение
    • Репозиторий приватный, но токен для публичных
Решение:
    • Создать токен с правами repo (для приватных)
    • Проверить что репозиторий доступен с этим токеном

📋 Чеклист для клиента

  • [ ] Создан Personal Access Token
  • [ ] Токен имеет только права на чтение (repo или read_repository`)
  • [ ] Установлен срок действия токена
  • [ ] Токен скопирован и вставлен в Bothost
  • [ ] Репозиторий успешно добавлен в Bothost
  • [ ] Тестовый деплой прошел успешно