• Русский
  • Настройка аутентификации для приватных репозиториев

    Для всех пользователей

    Это руководство предназначено специально для репозиториев GitLab. Шаги настройки адаптированы под требования аутентификации и API GitLab.

    В этом руководстве объясняется, как настроить аутентификацию для приватных репозиториев в PAC. Приватные репозитории требуют учетных данных для аутентификации, чтобы PAC мог получить доступ и клонировать содержимое репозитория.

    Понимание аутентификации в PAC

    PAC использует аутентификацию для приватных репозиториев:

    • Аутентификация через API Git-провайдера (git_provider.secret): используется для операций с API, таких как создание вебхуков, обновление статуса PR и доступ к метаданным репозитория. PAC также автоматически создает секрет аутентификации для git clone на основе этого токена для использования в PipelineRuns.

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

    Перед настройкой аутентификации для приватных репозиториев убедитесь, что у вас есть:

    • Развернутый и запущенный компонент PAC
    • Созданный Repository CR (Custom Resource) для вашего репозитория. Repository CR — это ресурс Kubernetes, который указывает PAC, какой Git-репозиторий отслеживать и как его настраивать
    • Административный доступ для создания Kubernetes Secrets
    • Токены доступа для вашего Git-провайдера
    Что такое Repository CR?

    Repository CR — это пользовательский ресурс Kubernetes, который определяет:

    • URL Git-репозитория для отслеживания
    • Конфигурацию Git-провайдера (GitHub, GitLab и т.д.)
    • Учетные данные для аутентификации
    • Настройки вебхуков
    • Настройки выполнения Pipeline

    PAC отслеживает Repository CR и автоматически создает PipelineRuns при возникновении событий в настроенном Git-репозитории.

    Обзор

    PAC поддерживает аутентификацию для приватных репозиториев GitLab с использованием Personal Access Tokens (PAT) и HTTPS URL.

    Шаги настройки

    Выполните следующие шаги для настройки аутентификации для приватных репозиториев.

    Шаг 1: Создайте токен доступа в GitLab

    1. Перейдите в GitLab → User Settings → Access Tokens
    2. Создайте токен с областью действия api
    3. Сгенерируйте и скопируйте токен

    Шаг 2: Создайте Kubernetes Secret

    Создайте секрет, содержащий ваш токен доступа GitLab:

    kubectl create secret generic gitlab-secret \
      --from-literal=token=your-gitlab-token-here \
      -n <your-namespace>

    Пример вывода:

    secret/gitlab-secret created

    Примечание: PAC будет использовать этот токен для операций с API Git-провайдера (управление вебхуками, обновление статуса PR и т.д.) и автоматически создаст секрет аутентификации для git clone на его основе.

    Создание секрета для вебхука (опционально)

    Если вы планируете настраивать вебхуки, создайте секрет для валидации вебхуков:

    kubectl create secret generic webhook-secret \
      --from-literal=secret=your-webhook-secret-here \
      -n <your-namespace>

    Рекомендации по безопасности:

    • Храните токены надежно и используйте отдельные секреты для разных репозиториев или окружений
    • PAC автоматически создает секреты аутентификации для git clone, поэтому создавать их вручную не нужно

    Шаг 3: Обновите Repository CR

    Обновите ваш Repository CR, чтобы указать секрет аутентификации:

    apiVersion: pipelinesascode.tekton.dev/v1alpha1
    kind: Repository
    metadata:
      name: my-private-repo
      namespace: project-pipelines
    spec:
      url: "https://gitlab.com/user/private-repo"
      git_provider:
        type: gitlab
        url: "https://gitlab.com"
        secret:
          name: gitlab-secret
          key: token
        webhook_secret:
          name: webhook-secret
          key: secret

    Примечание: PAC использует git_provider.secret для операций с API и автоматически создает секрет аутентификации для git clone на его основе для использования в PipelineRuns.

    Проверка доступа к приватному репозиторию

    После настройки аутентификации проверьте, что PAC может получить доступ к вашему приватному репозиторию:

    Проверьте Repository CR

    kubectl get repository <repo-name> -n <your-namespace> -o yaml

    Пример вывода (сокращенный):

    apiVersion: pipelinesascode.tekton.dev/v1alpha1
    kind: Repository
    metadata:
      name: my-repo
      namespace: project-pipelines
    spec:
      url: "https://gitlab.com/user/private-repo"
      git_provider:
        type: gitlab
        url: "https://gitlab.com"
        secret:
          name: gitlab-secret
          key: token

    Проверьте логи контроллера PAC

    # Установите namespace PAC (по умолчанию: tekton-pipelines)
    PAC_NAMESPACE="tekton-pipelines"
    
    kubectl logs -n ${PAC_NAMESPACE} \
      -l app=pipelines-as-code-controller \
      --tail=100

    Ищите ошибки аутентификации или проблемы с подключением к Git-провайдеру.

    Тестовый запуск Pipeline

    Запустите тестовый pipeline, чтобы проверить доступ:

    # Сделайте коммит для запуска pipeline
    git commit --allow-empty -m "Test private repo access"
    git push origin main

    Пример вывода:

    [main abc1234] Test private repo access
    Enumerating objects: 3, done.
    Writing objects: 100% (2/2), 240 bytes | 240.00 KiB/s, done.
    To https://gitlab.com/user/private-repo
       def5678..abc1234  main -> main

    Проверьте, что PipelineRun создан успешно:

    kubectl get pipelineruns -n <your-namespace>

    Пример вывода:

    NAME                    STARTED        DURATION   STATUS
    simple-pipeline-xxxxx   1 minute ago  25s        Succeeded

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

    Проверка ошибок аутентификации

    Проблема: PAC не может получить доступ к приватному репозиторию.

    Решения:

    1. Проверьте права токена: Убедитесь, что токен GitLab имеет область действия api

    2. Проверьте наличие секрета: Убедитесь, что секрет GitLab существует в правильном namespace:

      kubectl get secret gitlab-secret -n <your-namespace>

      Пример вывода:

      NAME              TYPE     DATA   AGE
      gitlab-secret     Opaque   1      5m
    3. Проверьте ключ секрета: Убедитесь, что секрет содержит ключ token:

      kubectl get secret gitlab-secret -n <your-namespace> -o yaml

      Пример вывода (сокращенный, token закодирован в base64):

      apiVersion: v1
      kind: Secret
      metadata:
        name: gitlab-secret
        namespace: project-pipelines
      data:
        token: Z2xwYXQt...
    4. Проверьте Repository CR: Убедитесь, что ссылка на секрет в Repository CR указана корректно:

      kubectl get repository <repo-name> -n <your-namespace> -o yaml | grep -A 5 git_provider

      Пример вывода:

      git_provider:
        type: gitlab
        url: "https://gitlab.com"
        secret:
          name: gitlab-secret
          key: token

    Токен истек

    Проблема: Токен доступа истек.

    Решения:

    1. Сгенерируйте новый токен доступа у вашего Git-провайдера

    2. Обновите Kubernetes Secret:

      kubectl create secret generic gitlab-secret \
        --from-literal=token=new-token-here \
        -n <your-namespace> \
        --dry-run=client -o yaml | kubectl apply -f -

      Пример вывода:

      secret/gitlab-secret configured
    3. При необходимости перезапустите поды контроллера PAC:

      kubectl rollout restart deployment pipelines-as-code-controller -n <tekton-namespace>  # Замените <tekton-namespace> на ваш namespace (по умолчанию: tekton-pipelines)

      Пример вывода:

      deployment.apps/pipelines-as-code-controller restarted

    Рекомендации по безопасности

    1. Управление токенами

    • Используйте отдельные токены: Используйте разные токены для разных репозиториев или окружений
    • Устанавливайте срок действия: Задавайте срок действия токенов для повышения безопасности
    • Регулярно обновляйте: Периодически меняйте токены доступа
    • Ограничивайте области действия: Предоставляйте только минимально необходимые права

    2. Управление секретами

    • Используйте namespaces: Храните секреты в соответствующих namespaces
    • RBAC: Используйте RBAC для контроля доступа к секретам
    • Внешние менеджеры секретов: Рассмотрите использование внешних инструментов управления секретами (например, Sealed Secrets, Vault)

    3. Безопасность

    • Принцип наименьших привилегий: Предоставляйте минимально необходимые права
    • Аудит доступа: Регулярно проверяйте, кто имеет доступ к репозиториям
    • Мониторинг логов: Следите за логами контроллера PAC на предмет проблем с аутентификацией

    Следующие шаги

    • Configure Custom Certificates - Настройка пользовательских CA-сертификатов для самоподписанных сертификатов
    • Advanced Repository Configuration - Узнайте о расширенных настройках репозитория
    • Configure GitLab Repository - Руководство по настройке репозитория GitLab
    • Common Issues - Руководство по устранению распространенных проблем