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-scanblokkeert 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
| Instelling | Pull requests | Downloads |
|---|---|---|
| Toegestane licenties | Slagen altijd. Ze worden nooit door de drempel geblokkeerd of gemarkeerd. | Slagen. |
| Downloads: alleen toegestane licenties | Geen effect. | Elke licentie die niet op de lijst met toegestane licenties staat, wordt geweigerd. Vereist minstens één toegestane licentie. |
| Geweigerde licenties | Blokkeren het samenvoegen. | Geweigerd. |
| Licenties die waarschuwen | Adviserende bevinding. | Toegestaan met een waarschuwing. |
| Onbekende licentie | allow, warn of block voor een licentie die ontbreekt of geen SPDX-expressie is. | Hetzelfde. |
| Meerdere licenties | all: 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 vanaf | Een 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;
allvoor meerdere licenties als een van beide scopesallhad;- 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
| Endpoint | Scope | Doet |
|---|---|---|
GET /orgs/{org}/licence-policy | policy:read | Het 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/preview | policy:read | Alleen lezen. De wijzigingen per scope en de licenties waarvan het resultaat verandert. |
PUT /orgs/{org}/licence-policy | policy:write | Slaat 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.