[Документация Yandex Cloud](../../index.md) > [Yandex Cloud Registry](../index.md) > [Концепции](index.md) > Паттерны фильтрации

# Паттерны фильтрации

Паттерны фильтрации — это шаблоны в формате [Ant Style](https://docs.spring.io/spring-framework/docs/5.3.15/javadoc-api/org/springframework/util/AntPathMatcher.html), которые позволяют по пути к артефакту ограничить, какие артефакты в реестре доступны пользователям. Есть два вида шаблонов:
* паттерны включения — описывают разрешенные пути к артефактам;
* паттерны исключения — описывают запрещенные пути к артефактам.

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

Паттерны задаются при [создании](../operations/registry/create.md) или обновлении реестра.

## Docker {#docker}

`<репозиторий>` может состоять из нескольких сегментов (например `library/nginx`, `traefik/whoami`, `team/service/sidecar`) и содержать только цифры, строчные латинские буквы и символы `.`, `_`, `-`.

Описание | Паттерн включения | Паттерн исключения
--- | --- | ---
Ограничить доступ к репозиторию | `["**"]` | `["<репозиторий>/**"]`
Ограничить доступ к Docker-образам с указанным тегом | `["**"]` | `["<репозиторий>/<тег>"]`
Ограничить доступ к Docker-образам с указанным хешем | `["**"]` | `["<репозиторий>/sha256:<хеш>"]`
Ограничить доступ к Docker-образам с тегом `latest` | `["**"]` | `["**/latest"]`
Разрешить доступ к Docker-образу | `["<Docker-образ>/**"]` | `[]`

## Maven {#maven}

Все символы-разделители в пути необходимо заменять на `/`. Например, использовать вместо `com.example:mylib:1.0.0` паттерн `com/example/mylib/1.0.0`.

Описание | Паттерн включения | Паттерн исключения
--- | --- | ---
Ограничить доступ к группе проектов | `["**"]` | `["<группа>/**"]`
Ограничить доступ к артефакту | `["**"]` | `["<группа>/<артефакт>/**"]`
Ограничить доступ к версии | `["**"]` | `["<группа>/<артефакт>/<версия>/**"]`
Ограничить доступ к файлу | `["**"]` | `["<группа>/<артефакт>/<версия>/<файл>"]`
Ограничить доступ к снапшотам | `["**"]` | `["**/*-SNAPSHOT/**"]`
Предоставить доступ только к двум группам проектов | `["<группа-1>/**", "<группа-2>/**"]` | `[]`

## NPM {#npm}

Паттерны применяются к пути в формате `<пакет>/<файл>`. Например, для `express@4.18.0` путь — `express/express-4.18.0.tgz`.

Описание | Паттерн включения | Паттерн исключения
--- | --- | ---
Ограничить доступ к пакету | `["**"]` | `["<пакет>/**"]`
Ограничить доступ к версии | `["**"]` | `["<пакет>/*-<версия>.tgz"]`
Ограничить доступ к мажорной версии 2 | `["**"]` | `["<пакет>/<пакет>-2.*.tgz"]`
Ограничить доступ к пространству имен (`scope`) | `["**"]` | `["@<пространство_имен>/**"]`
Ограничить доступ к пакету в пространстве имен | `["**"]` | `["@<пространство_имен>/<пакет>/**"]`
Предоставить доступ только к одному пространству имен | `["@<пространство_имен>/**"]` | `[]`
Предоставить доступ только к двум пакетам | `["<пакет-1>/**", "<пакет-2>/**"]` | `[]`

## NuGet {#nuget}

Паттерны применяются к пути в формате `<пакет>/<версия>`. Например, для `Newtonsoft.Json@13.0.3` путь — `newtonsoft.json/13.0.3`. Имя файла `.nupkg` в путь не попадает: оно вычисляется отдельно (`<пакет>.<версия>.nupkg`) на уровне хранилища. Поэтому фильтрация работает с гранулярностью до версии, а не до отдельного файла.

{% note warning %}

NuGet принудительно приводит путь к нижнему регистру. Например, пакет `Newtonsoft.Json` преобразуется в `newtonsoft.json`. Поэтому вместо паттерна `Newtonsoft.Json/**` нужно использовать `newtonsoft.json/**`.

{% endnote %}

Описание | Паттерн включения | Паттерн исключения
--- | --- | ---
Ограничить доступ к пакету | `["**"]` | `["<пакет>/**"]`
Ограничить доступ к версии | `["**"]` | `["<пакет>/<версия>"]`
Ограничить доступ к мажорным версиям 2 | `["**"]` | `["<пакет>/2.*"]`
Предоставить доступ только к двум пакетам | `["<пакет-1>/**", "<пакет-2>/**"]` | `[]`

## PyPI {#pypi}

Паттерны применяются к пути в формате `<пакет>/<версия>/<файл>`, например `requests/2.31.0/requests-2.31.0.tar.gz`.

Описание | Паттерн включения | Паттерн исключения
--- | --- | ---
Ограничить доступ к пакету | `["**"]` | `["<пакет>/**"]`
Ограничить доступ к версии | `["**"]` | `["<пакет>/<версия>/**"]`
Ограничить доступ к файлу | `["**"]` | `["<пакет>/<версия>/<файл>"]`
Ограничить доступ к мажорным версиям 2 | `["**"]` | `["<пакет>/2.*/**"]`
Предоставить доступ только к двум пакетам | `["<пакет-1>/**", "<пакет-2>/**"]` | `[]`

## Binary {#binary}

Паттерны применяются к пути в формате `<пакет>/<версия>/<файл>`. `<пакет>` может состоять из нескольких сегментов, например `tools/cli`.

{% note info %}

Так как `<пакет>` может содержать символ `/`, `<пространство_имен>/**` ограничивает доступ ко всем пакетам под этим префиксом. Например, паттерн `tools/**` ограничивает доступ к `tools/cli/...`, `tools/utils/...` и т.п.

{% endnote %}

Описание | Паттерн включения | Паттерн исключения
--- | --- | ---
Ограничить доступ к пакету | `["**"]` | `["<пакет>/**"]`
Ограничить доступ к версии | `["**"]` | `["<пакет>/<версия>/**"]`
Запретить загрузку файла | `["**"]` | `["<пакет>/<версия>/<файл>"]`
Ограничить доступ к пространству имен | `["**"]` | `["<пространство_имен>/**"]`
Предоставить доступ только к двум пакетам | `["<пакет-1>/**", "<пакет-2>/**"]` | `[]`

## Go {#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}

В 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.

{% note warning %}

`pool/` и `dists/` не зависят друг от друга. `.deb` в `pool/` не привязан к конкретному дистрибутиву — связь обеспечивает индекс пакетов в `dists/<дистрибутив>/<компонент>/binary-<архитектура>/`. Чтобы полностью ограничить доступ к дистрибутиву или компоненту, нужно блокировать и индекс в `dists/`, и соответствующие пакеты в `pool/`, иначе пользователь не найдет пакеты по индексам, но сможет сделать прямой запрос по `pool/...`.

{% endnote %}

Описание | Паттерн включения | Паттерн исключения
--- | --- | ---
Ограничить доступ к дистрибутиву | `["**"]` | `["dists/<дистрибутив>/**"]`
Ограничить доступ к компоненту `non-free` | `["**"]` | `["pool/non-free/**", "dists/*/non-free/**"]`
Ограничить доступ к архитектуре `i386` | `["**"]` | `["pool/*/i386/**", "dists/*/*/binary-i386/**"]`
Ограничить доступ к пакету | `["**"]` | `["pool/*/*/*/<пакет>/**"]`
Ограничить доступ к версии | `["**"]` | `["pool/*/*/*/<пакет>/<версия>/**"]`