pam-approver

Projekte, die den nachfolgenden Best Practices folgen, können sich freiwillig selbst zertifizieren und zeigen, dass sie einen Core-Infrastruktur-Initiative-/OpenSSF-Badge erhalten haben.

Es gibt keine Auswahl an Praktiken, die garantieren können, dass Software niemals Fehler oder Schwachstellen hat. Selbst formale Methoden können fehlschlagen, wenn die Spezifikationen oder Annahmen falsch sind. Auch gibt es keine Auswahl an Praktiken, die garantieren können, dass ein Projekt eine gesunde und gut funktionierende Entwicklungsgemeinschaft erhalten wird. Allerdings können Best Practices dabei helfen, die Ergebnisse von Projekten zu verbessern. Zum Beispiel ermöglichen einige Praktiken die Mehrpersonen-Überprüfung vor der Freigabe, die sowohl helfen können ansonsten schwer zu findende technische Schwachstellen zu finden und gleichzeitig dazu beitragen Vertrauen und den Wunsch nach wiederholter Zusammenarbeit zwischen Entwicklern verschiedener Unternehmen zu schaffen. Um ein Badge zu verdienen, müssen alle MÜSSEN und MÜSSEN NICHT Kriterien erfüllt sein, alle SOLLTEN Kriterien müssen erfüllt sein oder eine Rechtfertigung enthalten, und alle EMPFHOLEN Kriterien müssen erfüllt sein oder nicht (wir wollen sie zumindest berücksichtigt wissen). Wenn lediglich ein allgemeiner Kommentar angebeben werden soll, keine direkte Begründung, dann ist das erlaubt, wenn der Text mit "//" und einem Leerzeichen beginnt. Feedback ist willkommen auf derGitHub-Website als Issue oder Pull-Request. Es gibt auch eine E-Mail-Liste für allgemeine Diskussionen.

Wir stellen Ihnen gerne die Informationen in mehreren Sprachen zur Verfügung, allerdings ist die englische Version maßgeblich, insbesondere wenn es Konflikte oder Inkonsistenzen zwischen den Übersetzungen gibt.
Wenn dies Ihr Projekt ist, zeigen Sie bitte Ihren Baseline-Badge-Status auf Ihrer Projektseite! Der Baseline-Badge-Status sieht so aus: Baseline-Badge-Level für Projekt 13345 ist baseline-1 So betten Sie das Baseline-Badge ein:
Sie können Ihren Baseline-Badge-Status anzeigen, indem Sie Folgendes in Ihre Markdown-Datei einbetten:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/13345/baseline)](https://www.bestpractices.dev/projects/13345)
oder indem Sie Folgendes in Ihr HTML einbetten:
<a href="https://www.bestpractices.dev/projects/13345"><img src="https://www.bestpractices.dev/projects/13345/baseline"></a>


Dies sind die Baseline Niveau 2 Kriterien. Dies sind Kriterienversion v2026.02.19.

Baseline Series: Baseline Niveau 1 Baseline Niveau 2 Baseline Niveau 3

        

 Grundlagen

  • Allgemein

    Hinweis: Andere Projekte können den selben Namen benutzen.

    Mobile-friendly approver UI for Google Cloud Privileged Access Manager (PAM).

    Bitte verwenden Sie das SPDX-License-Expression-Format; Beispiele sind "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "GPL-2.0+", "LGPL-3.0+", "MIT" und "(BSD-2-Clause OR Ruby)". Geben sie nicht die einfachen oder doppelten Anführungszeichen mit an.
    Wenn es mehr als eine Programmiersprache gibt, listen Sie sie als kommagetrennte Werte (Leerzeichen sind optional) auf und sortieren Sie sie von am häufigsten zum am wenigsten verwendeten. Wenn es eine lange Liste gibt, bitte mindestens die ersten drei häufigsten auflisten. Wenn es keine Programmiersprache gibt (z. B. ist dies nur ein Dokumentations- oder Testprojekt), verwenden Sie das einzelne Zeichen "-". Bitte verwenden Sie eine herkömmliche Großschreibung für jede Sprache, z.B. "JavaScript".
    Das Common Platform Enumeration (CPE) ist ein strukturiertes Namensschema für IT-Systeme, Software und Pakete. Es wird in diversen Systemen und Datenbanken bei der Meldung von Schwachstellen verwendet.

    Mobile-friendly, backend-less approver UI for Google Cloud Privileged Access Manager (PAM); a static SPA that calls the PAM API directly from the browser.

 Steuerelemente 18/19

  • Steuerelemente


    Wenn eine CI/CD-Aufgabe ohne angegebene Berechtigungen ausgeführt wird, MUSS das CI/CD-System die Berechtigungen der Aufgabe standardmäßig auf die niedrigsten in der Pipeline gewährten Berechtigungen setzen. [OSPS-AC-04.01]
    Konfigurieren Sie die Einstellungen des Projekts so, dass neuen Pipelines standardmäßig die niedrigsten verfügbaren Berechtigungen zugewiesen werden, wobei zusätzliche Berechtigungen nur bei Bedarf für bestimmte Aufgaben gewährt werden.

    The repository's default GitHub Actions token permission is set to read-only (default_workflow_permissions: read, with can_approve_pull_request_reviews: false), so any task executed without explicit permissions defaults to the lowest level rather than write. In addition, every workflow declares least privilege explicitly: cd.yml, release-drafter.yml, and scorecard.yml set top-level permissions: {} (deny-all) and grant only the specific scopes each job needs, and tailwind-update.yml defaults to contents: read. See https://github.com/schack/pam-approver/blob/main/.github/workflows/cd.yml



    Wenn ein offizieller Release erstellt wird, MUSS diesem Release eine eindeutige Versionskennung zugewiesen werden. [OSPS-BR-02.01]
    Weisen Sie jedem vom Projekt erstellten Release eine eindeutige Versionskennung zu und folgen Sie dabei einer konsistenten Namenskonvention oder einem Nummerierungsschema. Beispiele sind SemVer, CalVer oder Git-Commit-ID.


    Wenn ein offizieller Release erstellt wird, MUSS dieser Release ein beschreibendes Protokoll funktionaler und sicherheitsrelevanter Änderungen enthalten. [OSPS-BR-04.01]
    Stellen Sie sicher, dass alle Releases ein beschreibendes Änderungsprotokoll enthalten. Es wird empfohlen sicherzustellen, dass das Änderungsprotokoll von Menschen lesbar ist und Details über Commit-Nachrichten hinaus enthält, wie z.B. Beschreibungen der Sicherheitsauswirkung oder Relevanz für verschiedene Anwendungsfälle. Um Maschinenlesbarkeit zu gewährleisten, platzieren Sie den Inhalt unter einer Markdown-Überschrift wie "## Changelog".

    Every official release is assigned a unique CalVer identifier of the form YEAR.MONTH.SEQUENCE (e.g. 2026.6.0). The version is computed automatically from existing tags so each release gets a distinct, non-reused number, and the scheme is documented in CONTRIBUTING.md "Releases". Released git tags and container image tags carry that identifier. See https://github.com/schack/pam-approver/releases



    Wenn eine Build- und Release-Pipeline Abhängigkeiten einbindet, MUSS sie standardisierte Tools verwenden, wo verfügbar. [OSPS-BR-05.01]
    Verwenden Sie ein gängiges Tool für Ihr Ökosystem, wie z.B. Paketmanager oder Abhängigkeits-Management-Tools, um Abhängigkeiten zur Build-Zeit einzubinden. Dies kann die Verwendung einer Abhängigkeitsdatei, Lock-Datei oder Manifest umfassen, um die erforderlichen Abhängigkeiten zu spezifizieren, die dann vom Build-System eingezogen werden.

    The pipeline ingests dependencies with standardized tooling where available: ▎ - Container base images (nginx, Debian) are pulled via standard Docker/BuildKit (FROM + multi-arch buildx), pinned by tag and digest. ▎ - GitHub Actions are consumed via the native uses: mechanism, pinned by commit SHA, and tracked for updates by Dependabot (.github/dependabot.yml). ▎ - There are no language-package runtime dependencies to ingest (the app ships zero npm dependencies by design), so no package-manager install step is needed. ▎ - The single standalone tool, the Tailwind CSS CLI, has no suitable package-manager distribution for this use, so it is fetched over HTTPS from its official GitHub release and verified against the publisher's sha256sums.txt (and re-verified in the Dockerfile with sha256sum -c) before use.



    Wenn ein offizieller Release erstellt wird, MUSS dieser Release signiert sein oder in einem signierten Manifest erfasst werden, das die kryptographischen Hashes jedes Assets enthält. [OSPS-BR-06.01]
    Signieren Sie alle freigegebenen Software-Assets zur Build-Zeit mit einer kryptographischen Signatur oder Attestierungen, wie z.B. GPG- oder PGP-Signatur, Sigstore-Signaturen, SLSA-Provenance oder SLSA-VSAs. Fügen Sie die kryptographischen Hashes jedes Assets in eine signierte Manifest- oder Metadaten-Datei ein.

    Every official release's container image is signed with Sigstore cosign (keyless, via GitHub OIDC). The signature is applied to the multi-arch image index digest, and that OCI manifest accounts for each asset (per-architecture manifests and layers) by its SHA-256 digest, so the signed object cryptographically covers every component. Releases also ship SLSA provenance and an SBOM attestation. Verification steps are documented in SECURITY.md (https://github.com/schack/pam-approver/blob/main/SECURITY.md):



    Wenn das Projekt ein Release erstellt hat, MUSS die Projektdokumentation eine Beschreibung enthalten, wie das Projekt seine Abhängigkeiten auswählt, bezieht und verfolgt. [OSPS-DO-06.01]
    Es wird empfohlen, diese Informationen zusammen mit der technischen und Design-Dokumentation des Projekts auf einer öffentlich zugänglichen Ressource wie dem Quellcode-Repository, der Projektwebsite oder einem anderen Kanal zu veröffentlichen.

    The primary branch (main) is protected by a GitHub repository ruleset that requires a pull request and requires the test and build status checks (from .github/workflows/cd.yml) to pass before merging, with strict up-to-date enforcement and no bypass actors. Changes therefore cannot land on main unless the automated checks pass.



    Die Projektdokumentation MUSS Anweisungen enthalten, wie die Software gebaut wird, einschließlich erforderlicher Bibliotheken, Frameworks, SDKs und Abhängigkeiten. [OSPS-DO-07.01]
    Es wird empfohlen, diese Informationen zusammen mit der Beiträgerdokumentation des Projekts zu veröffentlichen, z. B. in CONTRIBUTING.md oder anderen Entwickleraufgabendokumentationen. Dies kann auch mithilfe von Makefile-Zielen oder anderen Automatisierungsskripten dokumentiert werden.

    The software builds with a single command using Docker, which is the only required tool. docker build . (or docker compose up --build, README "Run locally": https://github.com/schack/pam-approver#run-locally) builds the image. All libraries, frameworks, and SDKs are fetched and version-pinned inside the multi-stage Dockerfile (https://github.com/schack/pam-approver/blob/main/Dockerfile) — the Tailwind CSS standalone CLI (downloaded and SHA-256 verified) and the nginx base image — so nothing needs manual installation. The build runs in CI on every PR (.github/workflows/cd.yml) and the Dockerfile is hadolint-linted.



    Während aktiv, MUSS die Projektdokumentation eine Liste von Projektmitgliedern mit Zugriff auf sensible Ressourcen enthalten. [OSPS-GV-01.01]
    Dokumentieren Sie Projektteilnehmer und ihre Rollen durch Artefakte wie members.md, governance.md, maintainers.md oder eine ähnliche Datei im Quellcode-Repository des Projekts. Dies kann so einfach sein wie die Aufnahme von Namen oder Account-Handles in einer Liste von Maintainern, oder komplexer sein, abhängig von der Governance des Projekts.

    pam-approver is a single-maintainer project. SECURITY.md lists the sole member with access to sensitive resources (Henrik Schack, @schack), who holds GitHub repository admin and GHCR package publish access, and documents that there are no long-lived secrets or signing keys to manage (keyless OIDC signing via cosign, a public OAuth client ID, and no stored client secret or deployment credential). See https://github.com/schack/pam-approver/blob/main/SECURITY.md#maintainers-and-access-to-sensitive-resources



    Während aktiv, MUSS die Projektdokumentation Beschreibungen der Rollen und Verantwortlichkeiten für Mitglieder des Projekts enthalten. [OSPS-GV-01.02]
    Dokumentieren Sie Projektteilnehmer und ihre Rollen durch Artefakte wie members.md, governance.md, maintainers.md oder ähnliche Dateien im Quellcode-Repository des Projekts.

    SECURITY.md documents the roles and responsibilities. As the sole maintainer, Henrik Schack (@schack) is responsible for reviewing and merging pull requests, cutting and signing releases, keeping dependencies current, and triaging and resolving bug and security reports, with no other members or delegated roles at this time. See https://github.com/schack/pam-approver/blob/main/SECURITY.md#maintainers-and-access-to-sensitive-resources



    Während das Projekt aktiv ist, MUSS die Projektdokumentation einen Leitfaden für Code-Beitragende enthalten, der Anforderungen für akzeptable Beiträge beinhaltet. [OSPS-GV-03.02]
    Erweitern Sie die Inhalte von CONTRIBUTING.md oder CONTRIBUTING/ in der Projektdokumentation, um die Anforderungen für akzeptable Beiträge zu beschreiben, einschließlich Codierungsstandards, Testanforderungen und Einreichungsrichtlinien für Code-Beitragende. Es wird empfohlen, dass dieser Leitfaden die verbindliche Quelle sowohl für Beitragende als auch für Genehmiger ist.

    Während das Projekt aktiv ist, MUSS das Versionskontrollsystem von allen Code-Beitragenden verlangen, dass sie bei jedem Commit bestätigen, dass sie rechtlich berechtigt sind, die zugehörigen Beiträge zu leisten. [OSPS-LE-01.01]
    Fügen Sie ein DCO in das Repository des Projekts ein, das Code-Beitragende dazu verpflichtet zu bestätigen, dass sie rechtlich berechtigt sind, die zugehörigen Beiträge bei jedem Commit zu leisten. Verwenden Sie eine Statusüberprüfung, um sicherzustellen, dass die Bestätigung erfolgt ist. Ein CLA erfüllt diese Anforderung ebenfalls. Einige Versionskontrollsysteme, wie GitHub, können dies in den Nutzungsbedingungen der Plattform enthalten.

    Not currently enforced. pam-approver is a single-maintainer project: every human commit is authored by the maintainer, who is the copyright holder, so there is no third-party contribution whose legal provenance is in question. The remaining commits on the branch are automated (Dependabot, the Tailwind-update workflow, and release-drafter), which cannot meaningfully assert a DCO. No DCO or CLA sign-off requirement is in place today; one would be added before accepting external code contributions.



    Wenn ein Commit in den primären Branch erfolgt, MÜSSEN alle automatisierten Statusüberprüfungen für Commits bestanden werden oder manuell umgangen werden. [OSPS-QA-03.01]
    Konfigurieren Sie das Versionskontrollsystem des Projekts so, dass alle automatisierten Statusüberprüfungen bestanden werden müssen oder eine manuelle Bestätigung erforderlich ist, bevor ein Commit in den primären Branch zusammengeführt werden kann. Es wird empfohlen, dass optionale Statusüberprüfungen NICHT als Bestehen-oder-Durchfallen-Anforderung konfiguriert werden, die Genehmiger versucht sein könnten zu umgehen.

    The primary branch (main) is protected by a GitHub repository ruleset that requires a pull request plus passing test and build status checks (from .github/workflows/cd.yml) before any change can merge, with strict up-to-date enforcement and no bypass actors. Status checks must pass for a change to land on main.



    Bevor ein Commit akzeptiert wird, MÜSSEN die CI/CD-Pipelines des Projekts mindestens eine automatisierte Test-Suite ausführen, um sicherzustellen, dass die Änderungen den Erwartungen entsprechen. [OSPS-QA-06.01]
    Automatisierte Tests sollten vor jedem Merge in den primären Branch ausgeführt werden. Die Test-Suite sollte in einer CI/CD-Pipeline ausgeführt werden und die Ergebnisse sollten für alle Beitragenden sichtbar sein. Die Test-Suite sollte in einer konsistenten Umgebung ausgeführt werden und so ausgeführt werden, dass Beitragende die Tests lokal ausführen können. Beispiele für Test-Suites sind Unit-Tests, Integrationstests und End-to-End-Tests.

    Every pull request runs the test job in .github/workflows/cd.yml before it can be merged: it runs the shell test suite (tests/entrypoint_test.sh), the JS unit tests (node --test over tests/app.test.js), and the container header tests (tests/nginx_headers_test.sh), plus hadolint and shellcheck. The build job depends on test, and both are required status checks in the main branch ruleset, so no change is accepted to the primary branch unless the automated test suite passes.



    Wenn das Projekt eine Veröffentlichung vorgenommen hat, MUSS die Projektdokumentation Design-Dokumentation enthalten, die alle Aktionen und Akteure innerhalb des Systems demonstriert. [OSPS-SA-01.01]
    Fügen Sie Designs in die Projektdokumentation ein, die die Aktionen und Akteure erklären. Akteure umfassen jedes Subsystem oder jede Entität, die ein anderes Segment im System beeinflussen kann. Stellen Sie sicher, dass dies für neue Funktionen oder Breaking Changes aktualisiert wird.

    The README "How it fits together" section (https://github.com/schack/pam-approver#how-it-fits-together) documents the design with an architecture diagram and describes all actors and data flows: the approver (browser), IAP (gateway in front of the static nginx pod), Google Identity Services (browser-based OAuth), the Google PAM REST API (called directly from the browser with a Bearer token), and Google IAM (which enforces per-user authorization). The actions are documented too: sign in, list entitlements/pending grants, and approve or deny with a reason ("Approving grants" section). SECURITY.md "Security model" further documents the actors, the token flow, and the trust boundaries. Given there is no backend and no server-side state, these cover the full set of actors and actions in the system.



    Wenn das Projekt eine Veröffentlichung vorgenommen hat, MUSS die Projektdokumentation Beschreibungen aller externen Software-Schnittstellen der veröffentlichten Software-Assets enthalten. [OSPS-SA-02.01]
    Dokumentieren Sie alle Software-Schnittstellen (APIs) der veröffentlichten Software-Assets und erklären Sie, wie Benutzer mit der Software interagieren können und welche Daten erwartet oder produziert werden. Stellen Sie sicher, dass dies für neue Funktionen oder Breaking Changes aktualisiert wird.

    Wenn das Projekt eine Veröffentlichung vorgenommen hat, MUSS das Projekt eine Sicherheitsbewertung durchführen, um die wahrscheinlichsten und folgenschwersten potenziellen Sicherheitsprobleme zu verstehen, die innerhalb der Software auftreten könnten. [OSPS-SA-03.01]
    Die Durchführung einer Sicherheitsbewertung informiert sowohl Projektmitglieder als auch nachgelagerte Verbraucher darüber, dass das Projekt versteht, welche Probleme innerhalb der Software auftreten könnten. Das Verständnis darüber, welche Bedrohungen realisiert werden könnten, hilft dem Projekt, Risiken zu verwalten und anzugehen. Diese Informationen sind für nachgelagerte Verbraucher nützlich, um den Sicherheitssachverstand und die Praktiken des Projekts zu demonstrieren. Stellen Sie sicher, dass dies für neue Funktionen oder Breaking Changes aktualisiert wird.

    A security assessment of the system is documented across SECURITY.md "Security model" (https://github.com/schack/pam-approver/blob/main/SECURITY.md) and the README "Security posture" section (https://github.com/schack/pam-approver#security-posture). Because the app is a static single-page app with no backend, the most likely and impactful risks are identified and mitigated: client-side XSS (strict CSP with no unsafe-inline, output via textContent), credential exposure (no client secret or refresh tokens, public OAuth client ID, access token kept only in the browser and never written to the image), clickjacking (frame-ancestors none, X-Frame-Options DENY), authorization bypass (enforced by Google IAM on the PAM API, not the app, plus OAuth hd domain checks), injection into the rendered config.js (entrypoint.sh validates env values), and supply-chain risk (pinned/digest-locked dependencies, SBOM, cosign-signed images, Dependabot, Trivy/Scorecard scanning).



    Während das Projekt aktiv ist, MUSS die Projektdokumentation eine Richtlinie für koordinierte Offenlegung von Schwachstellen (CVD) mit einem klaren Zeitrahmen für die Reaktion enthalten. [OSPS-VM-01.01]
    Erstellen Sie eine SECURITY.md-Datei im Stammverzeichnis, die die Richtlinie des Projekts für koordinierte Offenlegung von Schwachstellen beschreibt. Fügen Sie eine Methode zur Meldung von Schwachstellen hinzu. Setzen Sie Erwartungen dafür, wie das Projekt reagieren und gemeldete Probleme angehen wird.

    SECURITY.md documents a coordinated vulnerability disclosure policy (https://github.com/schack/pam-approver/blob/main/SECURITY.md#reporting-a-vulnerability): vulnerabilities are reported privately via GitHub private vulnerability reporting or email (not public issues); the maintainer acknowledges within a few days; and once a fix is available a new image is published and the advisory is disclosed. This is coordinated (private until a fix ships) with a stated response timeframe.



    Während das Projekt aktiv ist, MUSS die Projektdokumentation eine Möglichkeit zur privaten Meldung von Schwachstellen direkt an die Sicherheitskontakte innerhalb des Projekts bieten. [OSPS-VM-03.01]
    Bieten Sie Sicherheitsforschern eine Möglichkeit, Schwachstellen privat an das Projekt zu melden. Dies kann eine dedizierte E-Mail-Adresse, ein Webformular, spezialisierte VCS-Tools, E-Mail-Adressen für Sicherheitskontakte oder andere Methoden sein.

    SECURITY.md provides two private reporting channels directly to the security contact (https://github.com/schack/pam-approver/blob/main/SECURITY.md#reporting-a-vulnerability): GitHub private vulnerability reporting via the repository Security tab (enabled on the repo, so "Report a vulnerability" → https://github.com/schack/pam-approver/security/advisories/new works), and email to the maintainer at henrik@schack.dk. Reporters are explicitly asked not to open public issues.



    Während das Projekt aktiv ist, MUSS die Projektdokumentation öffentlich Daten über entdeckte Schwachstellen veröffentlichen. [OSPS-VM-04.01]
    Bereitstellen von Informationen über bekannte Schwachstellen in einem vorhersehbaren öffentlichen Kanal, wie z.B. einem CVE-Eintrag, Blogbeitrag oder einem anderen Medium. Soweit möglich sollten diese Informationen betroffene Version(en) enthalten, wie ein Verbraucher feststellen kann, ob er betroffen ist, und Anweisungen zur Schadensbegrenzung oder Behebung.

    SECURITY.md states that once a fix is available, a new image is published and the advisory is disclosed (https://github.com/schack/pam-approver/blob/main/SECURITY.md#reporting-a-vulnerability). Disclosure uses GitHub Security Advisories on the repository, which are public, receive a GHSA identifier, and are syndicated to the GitHub Advisory Database. No vulnerabilities have been discovered to date, so none have needed publishing yet, but the channel (GitHub Security Advisories) and the documented practice to disclose after a fix are in place.



Diese Daten sind unter der Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0) verfügbar. Dies bedeutet, dass ein Datenempfänger die Daten mit oder ohne Änderungen weitergeben darf, solange der Datenempfänger den Text dieser Vereinbarung mit den weitergegebenen Daten zur Verfügung stellt. Bitte nennen Sie Henrik Schack und die OpenSSF Best Practices Badge-Mitwirkenden als Urheber.

Projekt-Badge-Eintrag im Besitz von: Henrik Schack.
Eintrag erstellt: 2026-06-23 19:20:33 UTC, zuletzt aktualisiert: 2026-06-27 03:40:02 UTC. Letztes erreichtes Badge: 2026-06-27 03:40:02 UTC.