Паттерны фильтрации
Паттерны фильтрации — это шаблоны в формате Ant Style
- паттерны включения — описывают разрешенные пути к артефактам;
- паттерны исключения — описывают запрещенные пути к артефактам.
Артефакт доступен пользователю, если путь артефакта совпадает хотя бы с одним паттерном включения и не совпадает ни с одним паттерном исключения.
Паттерны задаются при создании или обновлении реестра.
Docker
<репозиторий> может состоять из нескольких сегментов (например library/nginx, traefik/whoami, team/service/sidecar) и содержать только цифры, строчные латинские буквы и символы ., _, -.
| Описание | Паттерн включения | Паттерн исключения |
|---|---|---|
| Ограничить доступ к репозиторию | ["**"] |
["<репозиторий>/**"] |
| Ограничить доступ к Docker-образам с указанным тегом | ["**"] |
["<репозиторий>/<тег>"] |
| Ограничить доступ к Docker-образам с указанным хешем | ["**"] |
["<репозиторий>/sha256:<хеш>"] |
Ограничить доступ к Docker-образам с тегом latest |
["**"] |
["**/latest"] |
| Разрешить доступ к Docker-образу | ["<Docker-образ>/**"] |
[] |
Maven
Все символы-разделители в пути необходимо заменять на /. Например, использовать вместо com.example:mylib:1.0.0 паттерн com/example/mylib/1.0.0.
| Описание | Паттерн включения | Паттерн исключения |
|---|---|---|
| Ограничить доступ к группе проектов | ["**"] |
["<группа>/**"] |
| Ограничить доступ к артефакту | ["**"] |
["<группа>/<артефакт>/**"] |
| Ограничить доступ к версии | ["**"] |
["<группа>/<артефакт>/<версия>/**"] |
| Ограничить доступ к файлу | ["**"] |
["<группа>/<артефакт>/<версия>/<файл>"] |
| Ограничить доступ к снапшотам | ["**"] |
["**/*-SNAPSHOT/**"] |
| Предоставить доступ только к двум группам проектов | ["<группа-1>/**", "<группа-2>/**"] |
[] |
NPM
Паттерны применяются к пути в формате <пакет>/<файл>. Например, для express@4.18.0 путь — express/express-4.18.0.tgz.
| Описание | Паттерн включения | Паттерн исключения |
|---|---|---|
| Ограничить доступ к пакету | ["**"] |
["<пакет>/**"] |
| Ограничить доступ к версии | ["**"] |
["<пакет>/*-<версия>.tgz"] |
| Ограничить доступ к мажорной версии 2 | ["**"] |
["<пакет>/<пакет>-2.*.tgz"] |
Ограничить доступ к пространству имен (scope) |
["**"] |
["@<пространство_имен>/**"] |
| Ограничить доступ к пакету в пространстве имен | ["**"] |
["@<пространство_имен>/<пакет>/**"] |
| Предоставить доступ только к одному пространству имен | ["@<пространство_имен>/**"] |
[] |
| Предоставить доступ только к двум пакетам | ["<пакет-1>/**", "<пакет-2>/**"] |
[] |
NuGet
Паттерны применяются к пути в формате <пакет>/<версия>. Например, для Newtonsoft.Json@13.0.3 путь — newtonsoft.json/13.0.3. Имя файла .nupkg в путь не попадает: оно вычисляется отдельно (<пакет>.<версия>.nupkg) на уровне хранилища. Поэтому фильтрация работает с гранулярностью до версии, а не до отдельного файла.
Важно
NuGet принудительно приводит путь к нижнему регистру. Например, пакет Newtonsoft.Json преобразуется в newtonsoft.json. Поэтому вместо паттерна Newtonsoft.Json/** нужно использовать newtonsoft.json/**.
| Описание | Паттерн включения | Паттерн исключения |
|---|---|---|
| Ограничить доступ к пакету | ["**"] |
["<пакет>/**"] |
| Ограничить доступ к версии | ["**"] |
["<пакет>/<версия>"] |
| Ограничить доступ к мажорным версиям 2 | ["**"] |
["<пакет>/2.*"] |
| Предоставить доступ только к двум пакетам | ["<пакет-1>/**", "<пакет-2>/**"] |
[] |
PyPI
Паттерны применяются к пути в формате <пакет>/<версия>/<файл>, например requests/2.31.0/requests-2.31.0.tar.gz.
| Описание | Паттерн включения | Паттерн исключения |
|---|---|---|
| Ограничить доступ к пакету | ["**"] |
["<пакет>/**"] |
| Ограничить доступ к версии | ["**"] |
["<пакет>/<версия>/**"] |
| Ограничить доступ к файлу | ["**"] |
["<пакет>/<версия>/<файл>"] |
| Ограничить доступ к мажорным версиям 2 | ["**"] |
["<пакет>/2.*/**"] |
| Предоставить доступ только к двум пакетам | ["<пакет-1>/**", "<пакет-2>/**"] |
[] |
Binary
Паттерны применяются к пути в формате <пакет>/<версия>/<файл>. <пакет> может состоять из нескольких сегментов, например tools/cli.
Примечание
Так как <пакет> может содержать символ /, <пространство_имен>/** ограничивает доступ ко всем пакетам под этим префиксом. Например, паттерн tools/** ограничивает доступ к tools/cli/..., tools/utils/... и т.п.
| Описание | Паттерн включения | Паттерн исключения |
|---|---|---|
| Ограничить доступ к пакету | ["**"] |
["<пакет>/**"] |
| Ограничить доступ к версии | ["**"] |
["<пакет>/<версия>/**"] |
| Запретить загрузку файла | ["**"] |
["<пакет>/<версия>/<файл>"] |
| Ограничить доступ к пространству имен | ["**"] |
["<пространство_имен>/**"] |
| Предоставить доступ только к двум пакетам | ["<пакет-1>/**", "<пакет-2>/**"] |
[] |
Go
Паттерны применяются к пути в формате <модуль>/<версия>/<файл>.
Особенности:
- Префикс
vверсии удаляется:v1.5.2преобразуется в1.5.2. Поэтому вместо паттернаfoo/bar/v1.5.2/**нужно использоватьfoo/bar/1.5.2/**. - Суффиксы у мажорных версий модуля удаляются (например,
/v2,/v3и т.п). Для модуляregistry.yandex.cloud.net/foo/bar/v2@v2.1.0нужно использовать путьfoo/bar/2.1.0. - Префикс
registry.yandexcloud.netне включен в путь.
| Описание | Паттерн включения | Паттерн исключения |
|---|---|---|
| Ограничить доступ к модулю | ["**"] |
["<модуль>/**"] |
| Ограничить доступ к версии | ["**"] |
["<модуль>/<версия>/**"] |
| Ограничить доступ к файлу | ["**"] |
["<модуль>/<версия>/<файл>"] |
| Ограничить доступ к мажорной версии 2.x.x | ["**"] |
["<модуль>/2.*/**"] |
| Ограничить доступ к версиям pre-release | ["**"] |
["<модуль>/*-*/**"] |
Ограничить доступ к пространствам имен, например myorg/cli и myorg/server |
["**"] |
["myorg/**"] |
| Предоставить доступ только к двум модулям | ["<модуль-1>/**", "<модуль-2>/**"] |
[] |
Debian
В Debian-реестре артефакты хранятся в трех независимых пространствах имен:
pool/— бинарные пакеты (.deb). Пути видаpool/<компонент>/<архитектура>/<первая_буква_имени_пакета>/<пакет>/<версия>/<пакет>_<версия>_<архитектура>.deb. Например,pool/main/amd64/n/nginx/1.18.0-6.1/nginx_1.18.0-6.1_amd64.deb.dists/— метаданные репозитория. Например,dists/<дистрибутив>/Release,dists/<дистрибутив>/InRelease,dists/<дистрибутив>/<компонент>/binary-<arch>/Packagesи т.п.uploads/— буфер загружаемых файлов до их раскладки вpool/. Используется путьuploads/<файл>.
Паттерны применяются к пути хранения, который не всегда совпадает с URL.
Важно
pool/ и dists/ не зависят друг от друга. .deb в pool/ не привязан к конкретному дистрибутиву — связь обеспечивает индекс пакетов в dists/<дистрибутив>/<компонент>/binary-<архитектура>/. Чтобы полностью ограничить доступ к дистрибутиву или компоненту, нужно блокировать и индекс в dists/, и соответствующие пакеты в pool/, иначе пользователь не найдет пакеты по индексам, но сможет сделать прямой запрос по pool/....
| Описание | Паттерн включения | Паттерн исключения |
|---|---|---|
| Ограничить доступ к дистрибутиву | ["**"] |
["dists/<дистрибутив>/**"] |
Ограничить доступ к компоненту non-free |
["**"] |
["pool/non-free/**", "dists/*/non-free/**"] |
Ограничить доступ к архитектуре i386 |
["**"] |
["pool/*/i386/**", "dists/*/*/binary-i386/**"] |
| Ограничить доступ к пакету | ["**"] |
["pool/*/*/*/<пакет>/**"] |
| Ограничить доступ к версии | ["**"] |
["pool/*/*/*/<пакет>/<версия>/**"] |