Naar de hoofdinhoud

Licentiebeleid

Het licentiebeleid bepaalt op twee plekken wat de licentie van een afhankelijkheid betekent:

  • Pull requests. De licentiescan beoordeelt de licenties van de afhankelijkheden in een pull request, en de check fremforge/license-scan blokkeert of waarschuwt.
  • Downloads. Het pakketbeleid beoordeelt de licenties van een bestand in je registry voordat het mag worden gedownload.

Beide lezen dezelfde lijsten. Je opent het via Beveiliging › Beleid › Licentiebeleid. Alleen een eigenaar van de organisatie kan het opslaan.

De regels

InstellingPull requestsDownloads
Toegestane licentiesSlagen altijd. Ze worden nooit door de drempel geblokkeerd of gemarkeerd.Slagen.
Downloads: alleen toegestane licentiesGeen effect.Elke licentie die niet op de lijst met toegestane licenties staat, wordt geweigerd. Vereist minstens één toegestane licentie.
Geweigerde licentiesBlokkeren het samenvoegen.Geweigerd.
Licenties die waarschuwenAdviserende bevinding.Toegestaan met een waarschuwing.
Onbekende licentieallow, warn of block voor een licentie die ontbreekt of geen SPDX-expressie is.Hetzelfde.
Meerdere licentiesall: elke licentie die een component opgeeft, moet slagen. any: één licentie die slaagt is genoeg.Hetzelfde, voor een expressie als MIT OR GPL-3.0-only.
Pull requests: blokkeren vanafEen licentie die op geen enkele lijst staat, blokkeert op of boven dit niveau en is daaronder adviserend. De standaard is restricted.Geen drempel.

Items op de lijsten zijn SPDX-identifiers, één per regel, zoals MIT, LicenseRef-acme of GPL-2.0-only WITH Classpath-exception-2.0. Hoofdletters maken bij het vergelijken niet uit. Een licentie kan maar op één lijst staan. Elke lijst bevat maximaal 100 items. In een expressie wordt elke licentie afzonderlijk gecontroleerd: bij OR is één licentie die slaagt genoeg, bij AND moet elke licentie slagen.

Als pull requests en downloads nog verschillen

Voordat deze pagina bestond, had elke scope eigen lijsten, op het tabblad Licenties en op de pagina Pakketbeleid. Er is niets gemigreerd. Komen je twee sets al overeen, dan toont de pagina ze als één beleid. Verschillen ze, dan meldt de pagina dat en vult ze het formulier met een voorstel waarin per scope de strengste regel wint:

  • de geweigerde licenties van beide;
  • de licenties met waarschuwing van beide, zonder de geweigerde;
  • de strengste actie voor onbekende licenties;
  • all voor meerdere licenties als een van beide scopes all had;
  • voor lijsten met toegestane licenties: de licenties die op beide lijsten staan, of de ene lijst die items heeft. Een licentie die ook geweigerd wordt of een waarschuwing geeft, verdwijnt van de lijst met toegestane licenties.

Een lijst met toegestane licenties kan niet altijd worden samengevoegd zonder een scope soepeler te maken. In die gevallen toont de pagina een opmerking. Een lijst met toegestane licenties voor downloads wordt bijvoorbeeld ook de lijst voor pull requests, waardoor die licenties voortaan ook in pull requests slagen.

Er verandert niets tot je opslaat.

Bekijk het resultaat voordat je opslaat

Onder Wat opslaan verandert toont de pagina:

  • elke opgeslagen instelling die verandert, voor pull requests en voor downloads;
  • elke licentie waarvan het resultaat verandert, met het resultaat ervoor en erna in elke scope. Daarbij worden gangbare licenties gecontroleerd en elke licentie die in je pull requests is voorgekomen.

Licentiebeleid opslaan wordt alleen aangeboden voor het beleid waarvan de wijzigingen op het scherm staan. Pas je het formulier aan, kies dan eerst Wijzigingen bekijken. Een opslag die niets zou veranderen, wordt niet aangeboden.

Geen onderdeel van dit beleid

  • Of pull requests worden gescand. Je zet licentiescans aan of uit op Beveiliging › Beleid › Scanners.
  • Modus van de downloadblokkade. Uit, Schaduw of Afdwingen blijft op Pakketbeleid.
  • Overschrijvingen per repository van de regels voor pull requests. Die staan onderaan deze pagina, zie Overschrijvingen per repository.
  • Licentie-instellingen per type in een pakketbeleid. Een pakkettype dat eigen licentieregels instelt, houdt die. De pagina toont welke types dat zijn.
  • Uitzonderingen voor één component en licentie.

API

EndpointScopeDoet
GET /orgs/{org}/licence-policypolicy:readHet beleid (unified: true), of policy: null met het proposal waarin de strengste regel wint, en de bijbehorende proposal_notes. Daarnaast de opgeslagen velden van elke scope en package_policy_version.
POST /orgs/{org}/licence-policy/previewpolicy:readAlleen lezen. De wijzigingen per scope en de licenties waarvan het resultaat verandert.
PUT /orgs/{org}/licence-policypolicy:writeSlaat het beleid op in beide scopes. Elk veld is verplicht. Stuur de package_policy_version mee die je hebt gelezen.
curl -X PUT "https://frem.sh/_app/api/v1/orgs/acme/licence-policy" \
  -H "Authorization: Bearer $FREMFORGE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "allow": ["MIT", "Apache-2.0", "BSD-3-Clause"],
    "deny": ["AGPL-3.0-only", "SSPL-1.0"],
    "warn": ["MPL-2.0"],
    "allow_only_downloads": false,
    "unknown": "warn",
    "multiple": "all",
    "block_severity": "restricted",
    "package_policy_version": 7
  }'

Een verouderde package_policy_version wordt geweigerd met 409 policy-version-conflict. Een licentie op twee lijsten wordt geweigerd met 400 licence-on-two-lists. Elke opslag wordt geaudit als security.licence_policy.updated met elk gewijzigd veld. De downloadkant wordt daarnaast geaudit als package_policy.updated.

De oudere endpoints werken nog en schrijven maar één scope: PUT /orgs/{org}/code-security/licenses/settings en de licentievelden van PUT /orgs/{org}/package-policy. Gebruik je die, dan toont de pagina de twee scopes weer als verschillend.

Gerelateerd