Publique a partir do GitHub Actions usando autenticação multifator

Dec 07 2022
Apresentando a ação do GitHub Wait-For-Secrets
O GitHub Actions é uma excelente plataforma para criar pipelines de CI/CD para seus projetos. A StepSecurity cria soluções de segurança de código aberto para plataformas CI/CD.
Demonstração de espera por segredos

O GitHub Actions é uma excelente plataforma para criar pipelines de CI/CD para seus projetos. A StepSecurity cria soluções de segurança de código aberto para plataformas CI/CD. Temos o prazer de anunciar que estamos lançando uma nova ação do GitHub chamada Wait-for-secrets . Wait-for-secrets permite o uso de autenticação multifator para fluxos de trabalho de liberação.

O GitHub é a maior plataforma de hospedagem para projetos de código aberto. Os mantenedores desses projetos publicam em registros de pacotes populares, como o registro npm e o DockerHub.

O uso de fato dos mantenedores padrão é publicar a partir de seus computadores pessoais. A liberação de pacotes de uma máquina de desenvolvedor local cria um risco de segurança. O artefato de construção pode ser adulterado se a máquina do desenvolvedor estiver comprometida. Também dificulta a geração de proveniência e a validação do processo de liberação por outras pessoas.

A publicação usando plataformas de CI/CD, como o GitHub Actions, ajuda a resolver esses problemas. Os executores hospedados do GitHub Actions, por exemplo, são VMs efêmeras, em que cada trabalho é executado em uma nova VM separada.

A desvantagem de publicar a partir de um pipeline de CI/CD é que os desenvolvedores perdem a capacidade de usar a autenticação multifator. Registros de pacotes, como npm e PyPi, reforçam a autenticação multifator para pacotes populares. Mas, para publicar a partir de CI/CD, os desenvolvedores até agora tiveram que usar tokens de automação de fator único.

A StepSecurity criou a ação GitHub Wait-For-Secrets para oferecer aos desenvolvedores o melhor das duas opções. Para publicar a partir de um pipeline de CI/CD e usar a autenticação multifator para o processo de lançamento.

Estudo de caso

O popular pacote eslint-plugin-react usa Wait-for-secrets para publicar no registro npm usando uma senha única (OTP).

Aqui está um depoimento de Jordan Harband (https://github.com/ljharb), que o integrou ao fluxo de trabalho de lançamento do pacote eslint-plugin-react:

> Por anos, resisti a publicar da CI — publicar é a única ação verdadeiramente irrevogável e acredito fortemente que deveria exigir intervenção humana manual. Este é um dos primeiros fluxos de trabalho de “publicação de CI com interação humana manual” que eu vi que não exige que eu hospede nada, não perde o “dois fatores” usando um único fator de um token secreto e funciona tão bem no desktop quanto no celular.

> Vou abstrair isso em um fluxo de trabalho reutilizável em breve, para que eu possa usá-lo em muitos outros pacotes. Isso também me permitirá começar ergonomicamente usando o Github Releases pela primeira vez, pois posso encadear uma ação pós-publicação que cria automaticamente o texto do lançamento com base no meu changelog; Também posso conectar Slack e notificações push móveis. Isso resultará em uma porcentagem significativa do tráfego de download do npm não mais dependente apenas da segurança do meu computador pessoal.

O fluxo de trabalho de liberação se parece com isso.

Uso de espera por segredos no fluxo de trabalho de publicação do eslint-plugin-react

Aqui está uma captura de tela do log de compilação mostrando eslint-plugin-react publicado usando uma senha de uso único (OTP).

Log de compilação mostrando eslint-plugin-react publicado usando senha única (OTP)

Integrando espera por segredos em seu fluxo de trabalho do GitHub Actions

Para integrar a ação do GitHub Wait-for-secrets em seu fluxo de trabalho de publicação, siga estas etapas:

  1. Adicione a Ação Wait-for-secrets antes da etapa em que você precisa do segredo de publicação.

name: Wait-for-secrets Demo
on: workflow_dispatch

jobs:
  build:
    permissions:
      id-token: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: step-security/wait-for-secrets@v1
        id: get-otp
        with:
          secrets: |
            DUMMY_SECRET: 
              name: 'Dummy secret'
              description: 'Dummy secret to demo wait-for-secrets'
      - run: |
          echo ${{ steps.get-otp.outputs.DUMMY_SECRET }}

3. Quando estiver pronto para publicar, clique no URL no log de construção. Um site será aberto com detalhes sobre a execução do fluxo de trabalho.

4. Insira as credenciais temporárias, como uma senha única neste site.

5. A etapa de ação Wait-for-secrets receberá o token de autenticação multifator e interromperá o bloqueio. A etapa de publicação pode usar o token e prosseguir com a publicação.

Esperar por segredos O GitHub Action e a API de back-end que ele usa são de código aberto. Você pode encontrar fluxos de trabalho de amostra neste repositório:

https://github.com/step-security/wait-for-secrets