Product SiteDocumentation Site

12.4.3. Аутентификация и авторизация

Zot поддерживает гибкие механизмы аутентификации и тонкую настройку прав доступа (авторизации) к репозиториям.

12.4.3.1. LDAP

Интеграция с LDAP/Active Directory позволяет использовать централизованные учётные записи.
Пример конфигурации (config.json):
"http": {
    …
    "auth": {
        "ldap": {
            "insecure": true,
            "address": "dc1.test.alt",
            "port": 389,
            "startTLS": false,
            "baseDN": "OU=OU,DC=test,DC=alt",
            "userAttribute": "sAMAccountName",
            "userGroupAttribute": "memberOf",
            "skipVerify": false,
            "credentialsFile": "/etc/zot/ldap-creds.json"
        }
    }
}
где:
  • insecure — разрешает подключение к LDAP-серверу без использования TLS/SSL. Установите значение true, если сервер не поддерживает шифрование (рекомендуется только для тестовых сред);
  • address — IP-адрес или доменное имя LDAP-сервера;
  • port — порт службы LDAP (обычно 389 для незашифрованного соединения, 636 для LDAPS);
  • startTLS — включает шифрование соединения с помощью StartTLS. Установите true, если сервер поддерживает StartTLS поверх порта 389;
  • baseDN — базовое Distinguished Name (DN), с которого начинается поиск пользователей в каталоге;
  • userAttribute — имя атрибута, содержащего логин пользователя (для AD обычно используется sAMAccountName);
  • userGroupAttribute — имя атрибута, содержащего информацию о группах, в которые входит пользователь (в AD это memberOf);
  • skipVerify — пропускает проверку сертификата сервера при использовании TLS/StartTLS (не рекомендуется в production);
  • credentialsFile — путь к файлу с учётными данными для привязки (bind) к LDAP-серверу.
Файл учётных данных (/etc/zot/ldap-creds.json):
{
  "bindDN": "cn=administrator_zot@test.alt",
  "bindPassword": "P@$$word"
}
где:
  • bindDN — учётная запись, используемая для поиска пользователей в каталоге;
  • bindPassword — пароль для учётной записи.

12.4.3.2. HTTP Basic Auth (htpasswd)

Простейший способ хранения учётных данных — локальный файл с учётными данными в формате htpasswd (хеши bcrypt).
Создание файла пользователей:
# htpasswd -Bbn alice mypass > /etc/zot/htpasswd
Конфигурация:
{
  "http": {
    …
    "auth": {
      "htpasswd": {
        "path": "/etc/zot/htpasswd"
      }
    }
  }
}

Примечание

Если пользователь существует в LDAP, используется только LDAP. Если пользователя нет в LDAP, но он есть в htpasswd, вход возможен через htpasswd — это позволяет иметь гибридную схему (например, сервисные учётные записи в файле, пользователи — в AD).

12.4.3.3. Авторизация

При использовании схемы доступа, основанной только на аутентификации, любой прошедший проверку пользователь получает полный доступ к реестру. Для более гибкого управления Zot поддерживает политики авторизации на уровне репозиториев, основанные на идентичности пользователя или группы. Правила доступа определяются в зависимости от репозитория, пользователя и выполняемого действия.
Правила доступа определяются в секции accessControl по принципу:
репозиторий → пользователь/группа → разрешённые действия (read, create, update, delete)
Поддерживаются пять типов политик, основанных на идентичности.

Таблица 12.4. Политики контроля доступа

Тип политики
Атрибут
Описание
По умолчанию
defaultPolicy
Действия, разрешённые аутентифицированному пользователю при отсутствии явных правил
Для конкретного пользователя
users, actions
Права для конкретных пользователей
Для группы
groups, actions
Права для групп
Анонимная
anonymousPolicy
Доступ для неаутентифицированных пользователей
Метрики
metrics
Доступ к endpoint метрик
Администраторская
adminPolicy
Полный доступ ко всем репозиториям
Пример конфигурации:
{
  "http": {
    …
    "accessControl": {
        "repositories": {
        "**": {
            "defaultPolicy": ["read"],
            "policies": [{
            "users": ["alice"],
            "actions": ["read", "create"]
            }]
        },
        "secure/*": {
            "policies": [{
            "groups": ["admins"],
            "actions": ["read", "create", "delete"]
            }],
            "defaultPolicy": ["read"]
        }
        },
        "adminPolicy": {
        "users": ["admin"],
        "actions": ["read", "create", "update", "delete"]
        }
    }
  }
}
Пример предоставления прав группе LDAP:
{
  "accessControl": {
    "repositories": {
      "myalt": {
         "policies": [{
                     "groups": ["CN=DevOps,OU=OU,DC=test,DC=alt"],
                     "actions": ["read", "create", "update"]
                     }]
            }
        }
   }
}

Важно

Для выполнения операций create, update и delete обязательно должно быть разрешено действие read.
Учётные данные для аутентификации могут быть указаны:
  • в веб-интерфейсе:
    Zot. Окно аутентификации
  • командной строке:
    $ zli image list --config local --user alice:mypass
    $ zli image list --config local --user 'mun:P@$$word'
    

Примечание

При использовании CLI необходимо экранировать специальные символы в пароле (например, $, !, &) или заключать строку в кавычки.