Skip to main content

Usar segredos em ações do GitHub

Saiba como criar segredos nos níveis de repositório, ambiente e organização para fluxos de trabalho do GitHub Actions.

Tool navigation

Como criar segredos para um repositório

Para criar segredos ou variáveis no GitHub para um repositório de conta pessoal, você deve ser o proprietário do repositório. Para criar segredos ou variáveis no GitHub para um repositório da organização, você deve ter acesso admin . Por fim, para criar segredos ou variáveis para um repositório de conta pessoal ou um repositório de organização por meio da API REST, você deve ter acesso de colaborador.

  1. Em GitHub, acesse a página principal do repositório.

  2. No nome do repositório, clique em Settings. Caso não consiga ver a guia "Configurações", selecione o menu suspenso , clique em Configurações.

    Captura de tela de um cabeçalho de repositório que mostra as guias. A guia "Configurações" é realçada por um contorno laranja-escuro.

  3. Na seção "Security" da barra lateral, selecione Secrets and variables e clique em Actions.

  4. Clique na guia Segredos.

     Captura de tela da página "Segredos e variáveis de ações". A guia "Segredos" está contornada em laranja escuro.

  5. Clique em Novo segredo de repositório.

  6. No campo Nome, digite um nome para o segredo.

  7. No campo Segredo, insira o valor do segredo.

  8. Clique em Adicionar segredo.

Se o seu repositório tiver segredos de ambiente ou puder acessar segredos da organização principal, esses segredos também serão listados nesta página.

Para adicionar um segredo do repositório, use o subcomando gh secret set. Substitua secret-name pelo nome do segredo.

gh secret set SECRET_NAME

A CLI solicitará que você digite o valor de um segredo. Como alternativa, você pode ler o valor do segredo a partir de um arquivo.

gh secret set SECRET_NAME < secret.txt

Para listar todos os segredos do repositório, use o subcomando gh secret list.

Criar segredos para um ambiente

Para criar segredos ou variáveis para um ambiente em um repositório de conta pessoal, você deve ser o proprietário do repositório. Para criar segredos ou variáveis para um ambiente em um repositório da organização, é necessário ter acesso de admin. Para saber mais sobre os ambientes, confira Gerenciar ambientes para implantação.

  1. Em GitHub, acesse a página principal do repositório.

  2. No nome do repositório, clique em Settings. Caso não consiga ver a guia "Configurações", selecione o menu suspenso , clique em Configurações.

    Captura de tela de um cabeçalho de repositório que mostra as guias. A guia "Configurações" é realçada por um contorno laranja-escuro.

  3. Na barra lateral esquerda, clique em Ambientes.

  4. Clique no ambiente ao qual você deseja adicionar um segredo.

  5. Em Segredos do ambiente, clique em Adicionar segredo.

  6. Digite um nome para o segredo na caixa de entrada Nome.

  7. Insira o valor para o seu segredo.

  8. Clique em Adicionar segredo.

Para adicionar um segredo a um ambiente, use o subcomando gh secret set com o sinalizador --env ou -e seguido do nome do ambiente.

gh secret set --env ENV_NAME SECRET_NAME

Para listar todos os segredos de um ambiente, use o subcomando gh secret list com o sinalizador --env ou -e seguido do nome do ambiente.

gh secret list --env ENV_NAME

Criando segredos para uma organização

Ao criar um segredo ou uma variável em uma organização, você poderá usar uma política para limitar o acesso por repositório. Por exemplo, você pode conceder acesso a todos os repositórios ou limitar o acesso a apenas repositórios privados ou a uma lista específica de repositórios.

Os proprietários da organização e os usuários com as permissões "Gerenciar variáveis de ações da organização" ou "Gerenciar segredos de ações da organização" podem criar segredos ou variáveis no nível da organização.

Para saber mais, confira Sobre as funções da organização personalizadas.

  1. Em GitHub, acesse a página principal da organização.

  2. No nome da organização, clique em Settings. Caso não consiga ver a guia "Configurações", selecione o menu suspenso , clique em Configurações.

    Captura de tela das guias no perfil de uma organização. A guia "Configurações" está contornada em laranja escuro.

  3. Na seção "Security" da barra lateral, selecione Secrets and variables e clique em Actions.

  4. Clique na guia Segredos.

    Captura de tela da página "Segredos e variáveis de ações". A guia "Segredos" está contornada em laranja escuro.

    Observação

    A página "Actions secrets and variables" pode não mostrar guias distintas para segredos e variáveis, dependendo de suas permissões. Os proprietários e usuários da organização com as permissões "Gerenciar variáveis de ações da organização" e "Gerenciar segredos de ações da organização" verão as guias Variáveis e Segredos. Para saber mais, confira Sobre as funções da organização personalizadas.

  5. Clique em Novo segredo da organização.

  6. Digite um nome para o segredo na caixa de entrada Nome.

  7. Insira o Valor do segredo.

  8. Na lista suspensa Acesso do repositório, escolha uma política de acesso.

  9. Clique em Adicionar segredo.

Observação

Por padrão, a GitHub CLI é autenticada com os escopos repo e read:org. Para gerenciar os segredos da organização, você também precisa autorizar o escopo admin:org.

gh auth login --scopes "admin:org"

Para adicionar um segredo a uma organização, use o subcomando gh secret set com o sinalizador --org ou -o seguido do nome da organização.

gh secret set --org ORG_NAME SECRET_NAME

Por padrão, o segredo só está disponível para repositórios privados. Para especificar que o segredo deve estar disponível para todos os repositórios na organização, use o sinalizador --visibility ou -v.

gh secret set --org ORG_NAME SECRET_NAME --visibility all

Para especificar que o segredo deve estar disponível para repositórios selecionados na organização, use o sinalizador --repos ou -r.

gh secret set --org ORG_NAME SECRET_NAME --repos REPO-NAME-1, REPO-NAME-2

Para listar todos os segredos de uma organização, use o subcomando gh secret list com o sinalizador --org ou -o seguido do nome da organização.

gh secret list --org ORG_NAME

Rever o acesso para os segredos do nível da organização

Você pode verificar quais políticas de acesso são aplicadas a um segredo na sua organização.

  1. Em GitHub, acesse a página principal da organização.

  2. No nome da organização, clique em Settings. Caso não consiga ver a guia "Configurações", selecione o menu suspenso , clique em Configurações.

    Captura de tela das guias no perfil de uma organização. A guia "Configurações" está contornada em laranja escuro.

  3. Na seção "Security" da barra lateral, selecione Secrets and variables e clique em Actions.

  4. A lista de segredos inclui quaisquer permissões e políticas configuradas. Para obter mais detalhes sobre as permissões configuradas para cada segredo, clique em Atualizar.

Usar segredos em um fluxo de trabalho

Observação

  • Com exceção do GITHUB_TOKEN, os segredos não são transmitidos para o executor quando um fluxo de trabalho é disparado de um repositório com fork.
  • Os segredos não são passados automaticamente para fluxos de trabalho reutilizáveis. Para saber mais, confira Reutilizar fluxos de trabalho.
  • Os segredos não ficam disponíveis para fluxos de trabalho disparados por eventos do Dependabot. Para saber mais, confira Solução de problemas do Dependabot no GitHub Actions.
  • Se os seus fluxos de trabalho de GitHub Actions tiverem de acessar recursos de um provedor de nuvem compatível com o OpenID Connect (OIDC), você poderá configurar seus fluxos de trabalho para efetuar a autenticção diretamente no provedor de nuvem. Isso permitirá que você pare de armazenar essas credenciais como segredos de longa duração e proporcione outros benefícios de segurança. Para saber mais, confira OpenID Connect.

Aviso

Mascara todas as informações confidenciais que não são um segredo GitHub usando ::add-mask::VALUE. Isso faz com que o valor seja tratado como um segredo e ocultado dos logs.

Para fornecer uma ação com um segredo como uma entrada ou uma variável de ambiente, use o contexto secrets para acessar os segredos criados no seu repositório. Para saber mais, confira Referência de contextos e Sintaxe de fluxo de trabalho para o GitHub Actions.

steps:
  - name: Hello world action
    with: # Set the secret as an input
      super_secret: ${{ secrets.SuperSecret }}
    env: # Or as an environment variable
      super_secret: ${{ secrets.SuperSecret }}

Não é possível referenciar segredos diretamente em condicionais if:. Em vez disso, considere definir segredos como variáveis de ambiente no nível de trabalho e, em seguida, fazer referência às variáveis de ambiente para executar etapas condicionalmente no trabalho. Para obter mais informações, confira Referência de contextos e jobs.<job_id>.steps[*].if.

Se um segredo não for definido, o valor retornado de uma expressão que referencia o segredo (como ${{ secrets.SuperSecret }} no exemplo) será uma cadeia de caracteres vazia.

Evite a transmissão de segredos entre processos da linha de comando sempre que possível. Os processos de linha de comando podem estar visíveis para outros usuários (por meio do comando ps) ou ser capturados por eventos de auditoria de segurança. Para ajudar a proteger os segredos, considere o uso de variáveis de ambiente, STDIN ou outros mecanismos compatíveis com o processo de destino.

Se você passar segredos dentro de uma linha de comando, inclua-os dentro das regras de aspas corretas. Muitas vezes, os segredos contêm caracteres especiais que não intencionalmente podem afetar o seu shell. Para escapar desses caracteres especiais, use aspas com suas variáveis de ambiente. Por exemplo:

Exemplo de uso do Bash

steps:
  - shell: bash
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "$SUPER_SECRET"

Exemplo de uso do PowerShell

steps:
  - shell: pwsh
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "$env:SUPER_SECRET"

Exemplo de uso do Cmd.exe

steps:
  - shell: cmd
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "%SUPER_SECRET%"

Como armazenar segredos grandes

Para usar segredos com mais de 48 KB, você pode usar uma solução alternativa para armazenar segredos no repositório e salvar a frase secreta de descriptografia como um segredo no GitHub. Por exemplo, você pode usar gpg para criptografar um arquivo contendo o segredo localmente antes de fazer check-in do arquivo criptografado no repositório do GitHub. Para obter mais informações, confira a Página do manual do GPG.

Aviso

Tenha cuidado para que os segredos não sejam impressos quando o fluxo de trabalho for executado. Quando usar essa alternativa, o GitHub não eliminará segredos que estão impressos nos logs.

  1. Execute o comando a seguir no terminal para criptografar o arquivo que contém o segredo usando gpg e o algoritmo de criptografia AES256. Neste exemplo, my_secret.json é o arquivo que contém o segredo.

    gpg --symmetric --cipher-algo AES256 my_secret.json
    
  2. Você receberá a solicitação para inserir a frase secreta. Guarde a frase secreta, pois você precisará criar um novo segredo no GitHub que usa a frase secreta como valor.

  3. Criar um novo segredo que contém a frase secreta. Por exemplo, crie um segredo com o nome LARGE_SECRET_PASSPHRASE e defina o valor do segredo como a frase secreta usada na etapa acima.

  4. Copie o arquivo criptografado para um caminho no repositório e faça commit. Neste exemplo, o arquivo criptografado é my_secret.json.gpg.

    Aviso

    Copie o arquivo my_secret.json.gpg criptografado que termina com a extensão de arquivo .gpg e não o arquivo my_secret.json não criptografado.

    git add my_secret.json.gpg
    git commit -m "Add new secret JSON file"
    
  5. Crie um script do shell no repositório para descriptografar o arquivo de segredo. Neste exemplo, o script se chama decrypt_secret.sh.

    Shell
    #!/bin/sh
    
    # Decrypt the file
    mkdir $HOME/secrets
    # --batch to prevent interactive command
    # --yes to assume "yes" for questions
    gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \
    --output $HOME/secrets/my_secret.json my_secret.json.gpg
    
  6. Confirme que o shell script é executável antes de colocá-lo no repositório.

    chmod +x decrypt_secret.sh
    git add decrypt_secret.sh
    git commit -m "Add new decryption script"
    git push
    
  7. No fluxo de trabalho do GitHub Actions, use um step para chamar o script do shell e descriptografar o segredo. Para ter uma cópia do repositório no ambiente em que o fluxo de trabalho é executado, você precisará usar a ação actions/checkout. Referencie o script do shell usando o comando run relativo à raiz do repositório.

    name: Workflows with large secrets
    
    on: push
    
    jobs:
      my-job:
        name: My Job
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v5
          - name: Decrypt large secret
            run: ./decrypt_secret.sh
            env:
              LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
          # This command is just an example to show your secret being printed
          # Ensure you remove any print statements of your secrets. GitHub does
          # not hide secrets that use this workaround.
          - name: Test printing your secret (Remove this step in production)
            run: cat $HOME/secrets/my_secret.json
    

Armazenar Blobs binários de Base64 como segredos

Você pode usar a codificação de Base64 para armazenar pequenos blobs binários como segredos. Em seguida, você pode fazer referência ao segredo no seu fluxo de trabalho e decodificá-lo para usar no executor. Para ver os limites de tamanho, confira Usar segredos em ações do GitHub.

Observação

  • Observe que o Base64 converte apenas binário em texto e não substitui a criptografia real.
  • O uso de outro shell pode exigir comandos diferentes para decodificar o segredo em um arquivo. Em executores do Windows, recomendamos usar um shell do bash com shell: bash para usar os comandos na etapa run acima.
  1. Use base64 para codificar seu arquivo em uma cadeia de caracteres Base64. Por exemplo:

    No macOS, você pode executar:

    base64 -i cert.der -o cert.base64
    

    No Linux, você pode executar:

    base64 -w 0 cert.der > cert.base64
    
  2. Crie um segredo que contenha a string de Base64. Por exemplo:

    $ gh secret set CERTIFICATE_BASE64 < cert.base64
    ✓ Set secret CERTIFICATE_BASE64 for octocat/octorepo
    
  3. Para acessar a cadeia de caracteres Base64 por meio do executor, encaminhe o segredo para base64 --decode. Por exemplo:

    name: Retrieve Base64 secret
    on:
      push:
        branches: [ octo-branch ]
    jobs:
      decode-secret:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v5
          - name: Retrieve the secret and decode it to a file
            env:
              CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
            run: |
              echo $CERTIFICATE_BASE64 | base64 --decode > cert.der
          - name: Show certificate information
            run: |
              openssl x509 -in cert.der -inform DER -text -noout
    

Próximas etapas

Para obter informações de referência, confira Referência de segredos.