• Русский
  • Настройка Containerfile для сборки пользовательских образов, совместимых с Tasks

    Обзор функции

    В Tekton для повышения безопасности Tasks могут быть настроены с runAsNonRoot: true, что требует, чтобы контейнеры запускались от имени пользователей, не являющихся root. Поэтому при сборке пользовательских образов необходимо уделять особое внимание настройке Containerfile, чтобы обеспечить корректную работу этих образов в таких Tasks.

    В этом документе описывается, как настроить Containerfile для сборки пользовательских образов, совместимых с Tasks, с акцентом на конфигурацию прав пользователей.

    Сценарии использования

    Следующие сценарии требуют обращения к рекомендациям из этого документа:

    • Сборка пользовательского образа для использования в Tasks
    • Возникновение ошибок, связанных с правами доступа, при запуске существующих образов в Tasks
    • Обеспечение соответствия образа требованиям безопасности Tasks

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

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

    • Среда сборки OCI-образов
      • Вы можете использовать встроенный конвейер сборки платформы
      • Если необходимо использовать community/open-source инструменты, убедитесь, что у вас есть доступ в интернет или подготовлены офлайн-пакеты
    • Базовое понимание написания Containerfile
    • Файл Containerfile и связанная конфигурация

    Шаги

    1. Подтвердите базовый образ

    Сначала подтвердите версию release базового образа, поскольку команда создания пользователя может отличаться между версиями:

    # Проверьте версию release базового образа
    $ podman run -it --rm ${registry} cat /etc/os-release
    
    # Возможные результаты
    NAME="Alpine Linux"
    # or
    NAME="Debian GNU/Linux"
    # or
    NAME="Ubuntu"
    # or
    NAME="CentOS Linux"

    2. Добавьте пользователя без root-прав

    Добавьте в Containerfile пользователя без root-прав (рекомендуется использовать UID 65532):

    # В зависимости от базового образа выберите соответствующую команду
    
    # Alpine
    RUN adduser -u 65532 -h /home/nonroot -D nonroot
    
    # Debian
    RUN adduser --home /home/nonroot --uid 65532 nonroot --disabled-password --gecos ""
    
    # Ubuntu
    RUN apt-get update && apt-get install -y adduser \
        && adduser --home /home/nonroot --uid 65532 nonroot --disabled-password --gecos ""
    
    # CentOS
    RUN groupadd -g 65532 nonroot && useradd -u 65532 -U -d /home/nonroot -m nonroot

    3. Настройте необходимые права для пользователя (необязательно)

    Если пользователю требуется доступ к определенным каталогам или файлам, для него следует добавить необходимые права.

    # Назначьте владельцем каталога или файла пользователя nonroot
    RUN chown -R nonroot:nonroot /path/to/directory
    
    # В качестве альтернативы настройте права каталога или файла так, чтобы все могли читать и записывать, либо задайте другие минимально необходимые права
    RUN chmod -R a+rwx /path/to/directory

    4. Установите пользователя по умолчанию

    Установите пользователя по умолчанию в Containerfile (используйте UID вместо имени пользователя):

    Поскольку Pods, настроенные с runAsNonRoot, проверяют, что идентификатор пользователя не является root, а не имя пользователя.

    # Установите пользователя по умолчанию nonroot (с использованием UID)
    USER 65532

    5. Проверьте образ

    После сборки проверьте, может ли образ корректно запускаться:

    # Проверьте конфигурацию пользователя
    $ podman run -it --rm ${registry} id
    
    # Ожидаемый вывод
    uid=65532(nonroot) gid=65532(nonroot) groups=65532(nonroot)
    
    # Проверьте права приложения
    $ podman run -it --rm ${registry} ls -la /home/nonroot

    Результаты работы

    При такой конфигурации:

    1. Конфигурация пользователя

      • Последовательно используется UID 65532, что позволяет файлам, создаваемым в нескольких Tasks, иметь согласованные права доступа
      • Убедитесь, что у пользователя есть соответствующие права на рабочий каталог
      • Не используйте пользователя root или UID 0
    2. Конфигурация приложения

      • Убедитесь, что приложения могут нормально работать от имени пользователей без root-прав
      • Предварительно настройте необходимые права на каталоги в Containerfile
      • Используйте инструкцию VOLUME для определения каталогов, которые необходимо сохранять
    3. Рекомендации по безопасности

      • Регулярно обновляйте базовый образ для устранения уязвимостей безопасности
      • Используйте многослойную сборку, чтобы уменьшить размер образа
      • Следуйте принципу наименьших привилегий при настройке прав пользователей

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

    Если при запуске образа в Tasks возникают проблемы с правами доступа, вы можете:

    1. Проверить сообщения об ошибках в событиях Pod
    2. Убедиться, что конфигурация пользователя в образе корректна
    3. Проверить, что для приложения настроены необходимые права доступа

    Подробнее