pam-approver

Projetos que seguem as melhores práticas abaixo podem se autocertificar voluntariamente e mostrar que alcançaram um selo de melhores práticas da Open Source Security Foundation (OpenSSF).

Não existe um conjunto de práticas que possa garantir que o software nunca terá defeitos ou vulnerabilidades; mesmo métodos formais podem falhar se as especificações ou suposições estiverem erradas. Nem existe qualquer conjunto de práticas que possa garantir que um projeto sustentará uma comunidade de desenvolvimento saudável e bem-funcionada. No entanto, seguir as melhores práticas pode ajudar a melhorar os resultados dos projetos. Por exemplo, algumas práticas permitem revisão multipessoal antes do lançamento, o que pode ajudar a encontrar vulnerabilidades técnicas difíceis de encontrar e ajudar a construir confiança e desejo de interação repetida entre desenvolvedores de diferentes empresas. Para ganhar um selo, todos os critérios DEVE e NÃO DEVE devem ser atendidos, todos os critérios DEVERIA devem ser atendidos OU não atendidos com justificativa, e todos os critérios SUGERIDO devem ser atendidos OU não atendidos (queremos que sejam considerados pelo menos). Se você quiser inserir texto de justificativa como um comentário genérico, em vez de ser uma justificativa de que a situação é aceitável, inicie o bloco de texto com '//' seguido de um espaço. Feedback é bem-vindo via site do GitHub como questões ou pull requests Há também uma lista de discussão para discussão geral.

Fornecemos com prazer as informações em vários idiomas, no entanto, se houver qualquer conflito ou inconsistência entre as traduções, a versão em inglês é a versão autoritativa.
Se este é o seu projeto, por favor mostre o status do seu selo básico na página do seu projeto! O status do selo básico se parece com isto: O nível do selo básico para o projeto 13345 é baseline-1 Aqui está como incorporar o selo básico:
Você pode mostrar o status do seu selo básico incorporando isto no seu arquivo markdown:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/13345/baseline)](https://www.bestpractices.dev/projects/13345)
ou incorporando isto no seu HTML:
<a href="https://www.bestpractices.dev/projects/13345"><img src="https://www.bestpractices.dev/projects/13345/baseline"></a>


Estes são os critérios de Nível Básico 2. Estes são critérios da versão v2026.02.19.

Baseline Series: Nível Básico 1 Nível Básico 2 Nível Básico 3

        

 Fundamentos

  • Geral

    Observe que outros projetos podem usar o mesmo nome.

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

    Use o formato de expressão de licença SPDX; exemplos incluem "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "GPL-2.0+", "LGPL-3.0+", "MIT" e "(BSD-2-Clause OR Ruby)". Não inclua aspas simples ou aspas duplas.
    Se houver mais de uma linguagem, liste-as como valores separados por vírgula (espaços opcionais) e ordene-as da mais usada para a menos usada. Se houver uma longa lista, liste pelo menos as três primeiras mais comuns. Se não houver linguagem (por exemplo, este é um projeto apenas de documentação ou apenas de teste), use o caractere único "-". Use uma capitalização convencional para cada linguagem, por exemplo, "JavaScript".
    O Common Platform Enumeration (CPE) é um esquema de nomenclatura estruturado para sistemas de tecnologia da informação, software e pacotes. Ele é usado em vários sistemas e bancos de dados ao relatar vulnerabilidades.

    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.

 Controles 18/19

  • Controles


    Quando uma tarefa de CI/CD é executada sem permissões especificadas, o sistema de CI/CD DEVE definir como padrão as permissões da tarefa para as menores permissões concedidas no pipeline. [OSPS-AC-04.01]
    Configure as definições do projeto para atribuir as menores permissões disponíveis a novos pipelines por padrão, concedendo permissões adicionais somente quando necessário para tarefas específicas.

    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



    Quando um lançamento oficial é criado, esse lançamento DEVE receber um identificador de versão único. [OSPS-BR-02.01]
    Atribua um identificador de versão único a cada versão de lançamento produzida pelo projeto, seguindo uma convenção de nomenclatura ou esquema de numeração consistente. Exemplos incluem SemVer, CalVer ou id de commit git.


    Quando um lançamento oficial é criado, esse lançamento DEVE conter um registro descritivo de modificações funcionais e de segurança. [OSPS-BR-04.01]
    Certifique-se de que todos os lançamentos incluam um registro de alterações descritivo. É recomendado garantir que o registro de alterações seja legível por humanos e inclua detalhes além das mensagens de commit, como descrições do impacto de segurança ou relevância para diferentes casos de uso. Para garantir a legibilidade por máquina, coloque o conteúdo sob um cabeçalho markdown como \"## 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



    Quando um pipeline de compilação e lançamento ingere dependências, ele DEVE usar ferramentas padronizadas quando disponíveis. [OSPS-BR-05.01]
    Use ferramentas comuns para o seu ecossistema, como gerenciadores de pacotes ou ferramentas de gerenciamento de dependências para ingerir dependências no momento da compilação. Isso pode incluir o uso de um arquivo de dependências, arquivo de bloqueio ou manifesto para especificar as dependências necessárias, que são então incorporadas pelo sistema de compilação.

    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.



    Quando um lançamento oficial é criado, esse lançamento DEVE ser assinado ou contabilizado em um manifesto assinado incluindo os hashes criptográficos de cada ativo. [OSPS-BR-06.01]
    Assine todos os ativos de software lançados no momento da construção com uma assinatura criptográfica ou atestados, como assinatura GPG ou PGP, assinaturas Sigstore, proveniência SLSA ou VSAs SLSA. Inclua os hashes criptográficos de cada ativo em um manifesto assinado ou arquivo de metadados.

    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):



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir uma descrição de como o projeto seleciona, obtém e rastreia suas dependências. [OSPS-DO-06.01]
    É recomendado publicar essas informações juntamente com a documentação técnica e de design do projeto em um recurso publicamente visível, como o repositório de código-fonte, site do projeto ou outro canal.

    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.



    A documentação do projeto DEVE incluir instruções sobre como compilar o software, incluindo bibliotecas, frameworks, SDKs e dependências necessários. [OSPS-DO-07.01]
    Recomenda-se publicar essas informações junto com a documentação de colaboradores do projeto, como em CONTRIBUTING.md ou outra documentação de tarefas de desenvolvimento. Isso também pode ser documentado usando alvos de Makefile ou outros scripts de automação.

    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.



    Enquanto ativo, a documentação do projeto DEVE incluir uma lista de membros do projeto com acesso a recursos sensíveis. [OSPS-GV-01.01]
    Documente os participantes do projeto e seus papéis através de artefatos como members.md, governance.md, maintainers.md ou arquivo similar dentro do repositório de código-fonte do projeto. Isso pode ser tão simples quanto incluir nomes ou identificadores de conta em uma lista de mantenedores, ou mais complexo dependendo da governança do projeto.

    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



    Enquanto ativo, a documentação do projeto DEVE incluir descrições dos papéis e responsabilidades dos membros do projeto. [OSPS-GV-01.02]
    Documente os participantes do projeto e seus papéis através de artefatos como members.md, governance.md, maintainers.md ou arquivo similar dentro do repositório de código-fonte do projeto.

    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



    Enquanto ativo, a documentação do projeto DEVE incluir um guia para contribuidores de código que inclui requisitos para contribuições aceitáveis. [OSPS-GV-03.02]
    Estenda o conteúdo de CONTRIBUTING.md ou CONTRIBUTING/ na documentação do projeto para delinear os requisitos para contribuições aceitáveis, incluindo padrões de codificação, requisitos de testes e diretrizes de submissão para contribuidores de código. É recomendado que este guia seja a fonte da verdade tanto para contribuidores quanto para aprovadores.

    Enquanto ativo, o sistema de controle de versão DEVE exigir que todos os contribuidores de código afirmem que estão legalmente autorizados a fazer as contribuições associadas em cada commit. [OSPS-LE-01.01]
    Inclua um DCO no repositório do projeto, exigindo que os contribuidores de código afirmem que estão legalmente autorizados a confirmar as contribuições associadas em cada commit. Use uma verificação de status para garantir que a afirmação seja feita. Um CLA também satisfaz este requisito. Alguns sistemas de controle de versão, como o GitHub, podem incluir isso nos termos de serviço da plataforma.

    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.



    Quando um commit é feito na branch primária, quaisquer verificações de status automatizadas para commits DEVEM passar ou ser manualmente ignoradas. [OSPS-QA-03.01]
    Configure o sistema de controle de versão do projeto para exigir que todas as verificações de status automatizadas passem ou exijam reconhecimento manual antes que um commit possa ser mesclado na branch primária. É recomendado que quaisquer verificações de status opcionais NÃO sejam configuradas como um requisito de aprovação ou reprovação que os aprovadores possam ser tentados a ignorar.

    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.



    Antes de um commit ser aceito, os pipelines de CI/CD do projeto DEVEM executar pelo menos um conjunto de testes automatizados para garantir que as alterações atendam às expectativas. [OSPS-QA-06.01]
    Testes automatizados devem ser executados antes de cada mesclagem na branch primária. O conjunto de testes deve ser executado em um pipeline de CI/CD e os resultados devem ser visíveis a todos os contribuidores. O conjunto de testes deve ser executado em um ambiente consistente e deve ser executado de uma maneira que permita aos contribuidores executar os testes localmente. Exemplos de conjuntos de testes incluem testes unitários, testes de integração e testes de ponta a ponta.

    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.



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir documentação de design demonstrando todas as ações e atores dentro do sistema. [OSPS-SA-01.01]
    Inclua designs na documentação do projeto que expliquem as ações e atores. Atores incluem qualquer subsistema ou entidade que possa influenciar outro segmento no sistema. Certifique-se de que isso seja atualizado para novos recursos ou mudanças que quebrem compatibilidade.

    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.



    Quando o projeto tiver feito um lançamento, a documentação do projeto DEVE incluir descrições de todas as interfaces de software externas dos ativos de software lançados. [OSPS-SA-02.01]
    Documente todas as interfaces de software (APIs) dos ativos de software lançados, explicando como os usuários podem interagir com o software e quais dados são esperados ou produzidos. Certifique-se de que isso seja atualizado para novos recursos ou mudanças que quebrem compatibilidade.

    Quando o projeto tiver feito um lançamento, o projeto DEVE realizar uma avaliação de segurança para compreender os problemas de segurança potenciais mais prováveis e impactantes que poderiam ocorrer dentro do software. [OSPS-SA-03.01]
    Realizar uma avaliação de segurança informa tanto os membros do projeto quanto os consumidores a jusante que o projeto compreende quais problemas poderiam surgir dentro do software. Compreender quais ameaças poderiam se concretizar ajuda o projeto a gerenciar e tratar riscos. Essa informação é útil para os consumidores a jusante demonstrarem a perspicácia e as práticas de segurança do projeto. Certifique-se de que isso seja atualizado para novos recursos ou mudanças disruptivas.

    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).



    Enquanto ativo, a documentação do projeto DEVE incluir uma política para divulgação coordenada de vulnerabilidades (CVD), com um prazo claro para resposta. [OSPS-VM-01.01]
    Crie um arquivo SECURITY.md na raiz do diretório, descrevendo a política do projeto para divulgação coordenada de vulnerabilidades. Inclua um método para relatar vulnerabilidades. Estabeleça expectativas sobre como o projeto responderá e tratará problemas relatados.

    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.



    Enquanto ativo, a documentação do projeto DEVE fornecer um meio para relato privado de vulnerabilidades diretamente aos contatos de segurança dentro do projeto. [OSPS-VM-03.01]
    Forneça um meio para que pesquisadores de segurança relatem vulnerabilidades privadamente ao projeto. Isso pode ser um endereço de e-mail dedicado, um formulário web, ferramentas especializadas do VCS, endereços de e-mail para contatos de segurança ou outros métodos.

    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.



    Enquanto ativo, a documentação do projeto DEVE publicar publicamente dados sobre vulnerabilidades descobertas. [OSPS-VM-04.01]
    Forneça informações sobre vulnerabilidades conhecidas em um canal público previsível, como uma entrada CVE, postagem em blog ou outro meio. Na medida do possível, essa informação deve incluir versão(ões) afetada(s), como um consumidor pode determinar se está vulnerável e instruções para mitigação ou remediação.

    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.



Estes dados estão disponíveis sob o Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). Isso significa que um Destinatário de Dados pode compartilhar os Dados, com ou sem modificações, desde que o Destinatário de Dados disponibilize o texto deste acordo com os Dados compartilhados. Por favor, dê crédito a Henrik Schack e aos contribuidores do selo de melhores práticas OpenSSF.

Entrada de selo do projeto de propriedade de: Henrik Schack.
Entrada criada em 2026-06-23 19:20:33 UTC, última atualização em 2026-06-27 03:40:02 UTC. Selo de aprovação alcançado pela última vez em 2026-06-27 03:40:02 UTC.