👋 We've unified all of GitHub's product documentation in one place! Check out the content for REST API, GraphQL API, and Developers. Learn more on the GitHub blog.


Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.

Criar e armazenar segredos encriptados

Os segredos encriptados permitem que você armazene informações confidenciais no seu repositório ou organização.

GitHub Actions está disponível com GitHub Free, GitHub Pro, GitHub Free para organizações, GitHub Team, GitHub Enterprise Cloud e GitHub One. O GitHub Actions não está disponível para repositórios privados de contas que utilizam planos antigos por-repositório. Para obter mais informações, consulte os "produtos do GitHub".

Neste artigo

Sobre os segredos encriptados

Segredos são variáveis de ambiente encriptadas que você cria em um repositório ou organização. Os segredos que você cria estão disponíveis para utilização nos fluxos de trabalho em GitHub Actions. GitHub uses a libsodium sealed box to help ensure that secrets are encrypted before they reach GitHub, and remain encrypted until you use them in a workflow.

For secrets stored at the organization-level, you can use access policies to control which repositories can use organization secrets. Organization-level secrets let you share secrets between multiple repositories, which reduces the need for creating duplicate secrets. Updating an organization secret in one location also ensures that the change takes effect in all repository workflows that use that secret.

Nomear os seus segredos

As regras a seguir aplicam-se aos nomes dos segredos:

  • Os nomes dos segredos podem conter apenas caracteres alfanuméricos ([a-z], [A-Z], [0-9]) or sublinhado (_). Não são permitidos espaços.
  • Os nomes dos segredos não devem começar com o prefixo GITHUB_.
  • Os nomes dos segredos não devem começar com um número.
  • Os nomes dos segredos devem ser únicos no nível em que são criados. Por exemplo, um segredo criado no nível da organização deve ter um nome único nesse nível, e um segredo criado no nível do repositório deve ter um nome único nesse repositório. Se o segredo do nível de uma organização tiver o mesmo nome do segredo do nível do repositório, o segredo do nível do repositório prevalecerá.

Para ajudar a garantir que GitHub remova o seu segredo dos registros, evite usar dados estruturados como valores dos segredos. For example, avoid creating secrets that contain JSON or encoded Git blobs.

Acessar os seus segredos

Para disponibilizar um segredo para uma ação, você deve configurá-lo como uma entrada ou variável de ambiente no arquivo do fluxo de trabalho. Revise o arquivo LEIAME da ação para saber quais entradas e variáveis de ambientes a ação exige. Para obter mais informações, consulte "Sintaxe de fluxo de trabalho para o GitHub Actions".

You can use and read encrypted secrets in a workflow file if you have access to edit the file. For more information, see "Access permissions on GitHub."

Warning: GitHub automatically redacts secrets printed to the log, but you should avoid printing secrets to the log intentionally.

Você também pode gerenciar segredos usando o API REST. For more information, see "Secrets."

Permissões limitadas de credenciais

When generating credentials, we recommend that you grant the minimum permissions possible. For example, instead of using personal credentials, use deploy keys or a service account. Consider granting read-only permissions if that's all that is needed, and limit access as much as possible. When generating a personal access token (PAT), select the fewest scopes necessary.

Criar segredos encriptados para um repositório

To create secrets for a user account repository, you must be the repository owner. To create secrets for an organization repository, you must have admin access.

  1. No GitHub, navegue até a página principal do repositório.
  2. Under your repository name, click Settings.
    Repository settings button
  3. Na barra lateral esquerda, clique em Secrets (Segredos).
  4. Clique em Adicionar novo segredo.
  5. Digite um nome para o seu segredo na caixa de entrada Nome.
  6. Insira o valor para o seu segredo.
  7. Clique em Add secret (Adicionar segredo).

Se o seu repositório puder acessar segredos a partir da organização-mãe, esses segredos também serão listados nesta página.

Criar segredos encriptados para uma organização

Ao criar um segredo em uma organização, você pode usar uma política para limitar quais repositórios podem acessar esse segredo. 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.

To create secrets at the organization level, you must have admin access.

  1. On GitHub, navigate to the main page of the organization.
  2. Under your organization name, click Settings.
    Organization settings button
  3. Na barra lateral esquerda, clique em Secrets (Segredos).
  4. Clique em Novo segredo.
  5. Digite um nome para o seu segredo na caixa de entrada Nome.
  6. Insira o Valor para o seu segredo.
  7. Na lista suspensa Acesso do repositório, escolha uma política de acesso.
  8. Clique em Add secret (Adicionar segredo).

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. On GitHub, navigate to the main page of the organization.
  2. Under your organization name, click Settings.
    Organization settings button
  3. Na barra lateral esquerda, clique em Secrets (Segredos).
  4. A lista de segredos inclui quaisquer permissões e políticas configuradas. Por exemplo:
    Lista de segredos
  5. Para obter mais detalhes sobre as permissões configuradas para cada segredo, clique em Atualizar.

Using encrypted secrets in a workflow

Com exceção do GITHUB_TOKEN, os segredos não são disponibilizados para o executor quando um fluxo de trabalho é acionado a partir de um repositório bifurcado.

To provide an action with a secret as an input or environment variable, you can use the secrets context to access secrets you've created in your repository. For more information, see "Context and expression syntax for GitHub Actions" and "Workflow syntax for GitHub Actions."

steps:
  - name: Hello world action
    with: # Configura o segredo como uma entrada
      super_secret: ${{ secrets.SuperSecret }}
    env: # Ou como uma variável de ambiente
      super_secret: ${{ secrets.SuperSecret }}

Avoid passing secrets between processes from the command line, whenever possible. Command-line processes may be visible to other users (using the ps command) or captured by security audit events. To help protect secrets, consider using environment variables, STDIN, or other mechanisms supported by the target process.

If you must pass secrets within a command line, then enclose them within the proper quoting rules. Secrets often contain special characters that may unintentionally affect your shell. To escape these special characters, use quoting with your environment variables. Por exemplo:

Example using Bash

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

Example using PowerShell

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

Example using Cmd.exe

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

Limites para segredos

Your workflow can have up to 100 secrets. The names of secret environment variables must be unique in a repository.

Os segredos são limitados a 64 kB. Para usar segredos maiores que 64 kB, você pode armazenar segredos criptografados no seu repositório e salvar a frase secreta de descodificação como um segredo no GitHub. Por exemplo, você pode usar gpg para criptografar suas credenciais localmente antes de colocar o arquivo no repositório do GitHub. Para obter mais informações, consulte a "página do manual gpg".

Aviso: cuide para seus segredos não serem impressos quando a ação é executada. Quando usar essa alternativa, o GitHub não eliminará segredos que estão impressos nos logs.

  1. Execute o seguinte comando no seu terminal para criptografar o arquivo my_secret.json usando gpg e o algoritmo de cifragem AES256.

    $ 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 novo segredo com o nome LARGE_SECRET_PASSPHRASE e defina o valor do segredo para a frase secreta que você escolheu na etapa anterior.

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

  5. Crie um script shell para decifrar a senha. Salve o arquivo como decrypt_secret.sh.

    #!/bin/sh
    
    # Decrypt the file
    mkdir $HOME/secrets
    # --lote para evitar o comando interativo
    # --sim para supor "sim" para as perguntas
    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. A partir de seu fluxo de trabalho, use step para chamar o shell script e decifrar o segredo. To have a copy of your repository in the environment that your workflow runs in, you'll need to use the actions/checkout action. Faça referência ao shell script 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@v2
          - name: Decrypt large secret
            run: ./.github/scripts/decrypt_secret.sh
            env:
              LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
          # Esse comando é apenas um exemplo para mostrar seu segredo sendo impresso
          # Certifique-se de remover quaisquer declaração de impressão de seus segredos. O GitHub
          # não oculta segredos que usam essa alternativa.
          - name: Test printing your secret (Remove this step in production)
            run: cat $HOME/secrets/my_secret.json
    

Pergunte a uma pessoa

Não consegue encontrar o que procura?

Entrar em contato