Kategorien
Angular

Privates NPM Repository mit Verdaccio (SSL, Docker) – Teil 4: Verdaccio absichern

Als Angular Entwickler stellt man schnell fest, dass sich viele Components / Modules / Directives / Services & Co. in mehreren Projekten wiederverwenden lassen. Da bietet sich natürlich ein eigenes privates Repository zum Hosten und Bereitstellen von NPM Packages an.

Bei Zotorn IT haben wir uns derzeit für die open source Lösung Verdaccio (https://verdaccio.org/, https://github.com/verdaccio/verdaccio) entschieden. Verdaccio kann man kinderleicht aufsetzen und konfigurieren.

Der Artikel besteht insgesamt aus 4 Teilen:

  1. Lokale Arbeitsplatzinstallation
  2. Serverinstallation mit Docker und SSL
  3. Handhabung Verdaccio & npm
  4. Verdaccio absichern

Teil 4: Verdaccio absichern

Das Problem mit der Verdaccio Standardconfig ist allerdings, dass mehr oder weniger jeder Lesezugriff auf unsere Registry hat und sich auch jeder anmelden kann. Nicht gerade optimal für eine private Registry. Also machen wir den Laden dicht.

Registrierung abschalten

Vieleicht hast du es ja schon beim Überfliegen der Default-Config gesehen. Wir setzen max_users: -1, um weitere Benutzerregistrierungen zu verhindern.

# config.yaml
auth:
  htpasswd:
    ...
    # Maximum amount of users allowed to register, defaults to "+infinity".
    # You can set this to -1 to disable registration.
    max_users: -1

Lese-, Schreib- und Löschzugriff beschränken

Oder wie es in npm Therminologie heisst: Access, Publish, Unpublish

Im packages Bereich der config.yaml lassen sich die Zugriffsberechtigungen der Packages einstellen. Wir müssen nur dafür sorgen, dass access, publish und unpublish immer auf $authenticated gesetzt sind, so können nur angemeldete Benutzer zugreifen.

packages:
  '@*/*':
    # scoped packages
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
  '**':
    # allow all users (including non-authenticated users) to read and
    # publish all packages
    #
    # you can specify usernames/groupnames (depending on your auth plugin)
    # and three keywords: "$all", "$anonymous", "$authenticated"
    access: $authenticated
    # allow all known users to publish/publish packages
    # (anyone can register by default, remember?)
    publish: $authenticated
    unpublish: $authenticated
    # if package is not available locally, proxy requests to 'npmjs' registry
    proxy: npmjs

Im packages Bereich kannst du theoretisch für jedes Package ein eigenes Regelwerk anlegen und sehr spezifische Anpassungen vornehmen. Mehr dazu findest du in der Verdaccio Docu.

Anschließend noch mal verdaccio neustarten und fertig.

Wenn du einen weiteren Benutzer registrieren willst, stell einfach max_users auf eine Zahl größer der aktuellen Benutzeranzahl, starte Verdaccio neu und registriere den Benutzer. Anschließend mit max_users: -1 wieder die Registrierung abschalten und den Neustart nicht vergessen.