Как ограничить селектор контента тегом docker в Sonatype Nexus3? - PullRequest
0 голосов
/ 02 апреля 2019

Как разрешить доступ только к определенным тегам и указанным пространствам имен в Sonatype Nexus3?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

В качестве примера мы будем использовать изображение с именем: docker.domain.com/namespace/image:1.1.1

Мы хотим только разрешить пользователю извлекать изображения с тегом, соответствующим нашему регулярному выражению Semver (вы можете просто настроить регулярное выражение в соответствии со своими потребностями)

Content Selector

format == 'docker'  
&& (
    path == '/v2/' 
    || (
        path =~ '.*/namespace/.*' 
        && (
            path =~ '.*[0-9]+\.[0-9]+\.[0-9]+'
            || path =~ '.*/blobs/.*'
            )
        )
    )

Объяснение

  • && И оператор
  • || ИЛИ оператор
  • == РАВНЫЙ оператор
  • =~ оператор REGEX
  • format == 'docker' устанавливает тип формата, который должен быть выбран
  • path == '/v2/' предоставляет права входа в систему и манифеста, как объяснено Спецификация API docker v2
  • path=~'.*/blobs/.*' предоставляет доступ к слоям изображения
  • path=~'.*[0-9]+\.[0-9]+\.[0-9]+' Semver-regex

Наиболее важной частью является сочетание пространства имен и Semver-regex, пространства имен и пути BLOB-объектов.

Edit: Пожалуйста, см. rseddon s answer here для более глубокого объяснения.

1 голос
/ 03 апреля 2019

Изображения Docker хранятся в Nexus следующим образом:

enter image description here

BLOB-объекты являются слоями Docker, и они могут (и часто используются) совместно для несколькихДокер изображения.Такое совместное использование слоев является причиной того, почему Docker является эффективным форматом для хранения виртуальных машин.Но это также означает, что вы не можете ограничить доступ к слоям, вы можете ограничить доступ только к манифестам и тегам.Поэтому вам нужно создать привилегию селектора контента, которая разрешает доступ ко всем слоям.

Кроме того, вам необходимо разрешить доступ к /v2/ для входа в докер и /v1/search для поиска.

Таким образом, вам понадобится такая привилегия выбора контента, которая обеспечивает доступ кВещи, которые нужны всем:

path =~ "/v2/|/v2/blobs/.*|/v2/search/.*"

После этого вы можете выборочно разрешить доступ к манифестам и тегам с помощью таких селекторов контента:

path =^ "/v2/some-docker-image/"

path =^ "/v2/library/ubuntu/"
...