Я использую Nexus 3 в качестве хранилища докеров и хочу создать пользователя, который имеет доступ только для чтения к определенному образу докера (и связанным с ним тегам).
Для этого я создал селектор контента со следующим запросом (имя изображения является тестовым для демонстрационных целей):
format == "docker" and path =~ "^(/v2/|/v2/library/)?(test(/.*)?)?$"
.
Затем я создал привилегию с чтением действия, привязал ее к роли и добавил пользователю.
Все хорошо, когда я использую ограниченного пользователя, я могу получить изображение, а не нажать. Тем не менее, я все еще могу получать изображения, которые не должны быть в состоянии извлечь.
Рассмотрим следующее: я создаю образ с именем testaaa:1 в реестре докеров. После этого я docker login
в реестр, используя своего пользователя с доступом только для чтения. Я вдруг могу тянуть docker pull hub.my-registry.com/testaaa:1
хотя по запросу не должен.
Я протестировал запрос в Java Regex Tester, запрос не выбрал тестааа. Я что-то упускаю? Я с трудом нахожу подсказки по этой теме.
Обновлено: Еще несколько тестов показывают, что мой пользователь действительно может извлекать все изображения из этого реестра. Запрос Content Selector, который я использовал, точно такой же, как предложен в документации Sonatype Селекторы контента и Docker — REST API и клиент Docker.
Действие «Чтение» позволяет пользователю извлечь изображение из репозитория. Чтобы убедиться, что я не включил анонимный доступ, я заглянул в настройки -> безопасность -> анонимный доступ. Флажок не установлен
Обычно я ограничиваю пользователей пространством имен, а не конкретными изображениями (например, path =^ "/v2/your_namespace/
"), поэтому у меня нет большого опыта в этом. Но регулярное выражение в документации выглядит неуклюжим, поскольку каждый элемент является необязательным (поэтому я думаю, что оно может соответствовать чему угодно. ..) Я предлагаю вам попробовать: path =~ "^/v2/(library/)?/test(/.*)?$"
И я совершенно уверен, что вы даже можете поместить library
часть uri в частный репозиторий, если вы используете только последние клиенты докеров.
Я понял это. Проблема заключалась не в запросе Content Selector, а в возможности, которую я ранее добавил. Эта возможность предоставила любому аутентифицированному пользователю роль nx-anonymous, которая позволяет любому просматривать любой репозиторий в Nexus. Это означало, что любой аутентифицированный пользователь мог читать/извлекать любое изображение из репозитория.
Эта ошибка была полностью с моей стороны. Если у кого-то есть подобные проблемы, загляните в Настройки Nexus -> Система -> Возможности и проверьте, есть ли какие-либо возможности, которые дают вашим пользователям нежелательные роли.
Просто, чтобы устранить возможное недоразумение:
read
изображение в мире докеров/нексуса = пользователь может тянуть (и я действительно не понимаю, в каком случае вы хотели бы, чтобы пользователь знал, что изображение существует, но не позволяет ему использовать его в любом случае). Что касается остальной части вашего вопроса, вы включили анонимный доступ к вашему экземпляру нексуса? В этом случае любой может прочитать что угодно. См. help.sonatype.com/repomanager3/nexus-repository-administration/…)