Search code examples
dockersonatypenexus3

Nexus 3 Docker Content Selector selects too many images


I am using Nexus 3 as a docker repository and want to create a user that has only read-only access to a specific docker image (and its related tags)

For this I created a Content Selector with the following query (The name of the image is test for demonstration purposes): format == "docker" and path =~ "^(/v2/|/v2/library/)?(test(/.*)?)?$".

Then I created a Privilege with the action read, bound that to a role and added it to the user.

All is well, when I use the limited user I can fetch the image and not push. However, I can still pull images I should not be able to pull.

Consider the following: I create an image called testaaa:1 on the docker registry. Afterwards I docker login to the registry using my user with read-only access. I am suddenly able to pull docker pull hub.my-registry.com/testaaa:1 even though according to the query I should not be able to.

I tested the query in a Java Regex Tester, the query would not select testaaa. Am I missing something? I am having a hard time finding clues on this topic.

EDIT: Some more testing reveals that my user is actually able to pull all images from this registry. The Content Selector query I used is exactly the one suggested by the Sonatype documentation Content Selectors and Docker - REST API vs Docker Client


Solution

  • I have figured it out. The issue was not the Content Selector query, but a capability that I previously added. The capability granted any authenticated user the role nx-anonymous which lets anyone view any repository in Nexus. This meant that any authenticated user was allowed to read/pull any image from the repository.

    This error was entirely on my part. In case anyone has similar issues go have a look in the Nexus Settings -> System -> Capabilities and check if there are any capabilities that give your users unwanted roles.