{"meta":{"title":"Armazenando seus segredos com segurança","intro":"Saiba mais sobre segredos no desenvolvimento de software e sobre como gerenciá-los com segurança.","product":"Introdução","breadcrumbs":[{"href":"/pt/get-started","title":"Introdução"},{"href":"/pt/get-started/learning-to-code","title":"Aprenda a codificar"},{"href":"/pt/get-started/learning-to-code/storing-your-secrets-safely","title":"Armazenando segredos com segurança"}],"documentType":"article"},"body":"# Armazenando seus segredos com segurança\n\nSaiba mais sobre segredos no desenvolvimento de software e sobre como gerenciá-los com segurança.\n\n## O que é um segredo?\n\nNo desenvolvimento de software, um segredo são as informações confidenciais usadas para autenticar ou autorizar o acesso a sistemas, serviços, dados e APIs. Os exemplos incluem:\n\n* **Chaves de API** e **tokens de acesso** que permitem interagir com serviços externos, como a API REST do GitHub. Os tokens de acesso também permitem que serviços, como o GitHub Actions, executem tarefas que precisam de autenticação, como testaremos posteriormente.\n* **Credenciais de banco de dados** que concedem acesso a armazenamento e bancos de dados locais e externos.\n* **Chaves privadas**, como chaves SSH e PGP privadas, que podem ser usadas para acessar outros servidores e criptografar dados.\n\nComo os segredos fornecem tanto acesso, inclusive a sistemas críticos, podemos entender por que é tão importante mantê-los **em segurança**.\n\n### O que pode acontecer quando um segredo é exposto?\n\n* Invasores podem obter **acesso não autorizado** a tudo a que o segredo permite acesso.\n* Hackers podem **roubar dados**, incluindo dados confidenciais do usuário. Isso pode ter ramificações legais e de privacidade, além de reduzir a confiança em você e em seu aplicativo.\n* A exposição de segredos pode **custar dinheiro** quando hackers executam cargas de trabalho não autorizadas nas contas de um provedor de nuvem.\n* Hackers podem usar um segredo exposto para excluir, modificar e encerrar servidores, o que pode causar **tempo de inatividade e perda de dados**.\n\nConsidere todo o acesso e as funcionalidades que um segredo concede a você e o que um hacker poderia fazer com isso. Por exemplo, se um personal access token de sua conta do GitHub fosse exposto, um hacker poderia postar e fazer alterações no GitHub como se fosse você.\n\n## Práticas recomendadas para gerenciar segredos\n\nPara evitar esses tipos de problemas, siga as práticas recomendadas para impedir vazamentos e limitar danos se um segredo for exposto.\n\n### Siga o **Princípio do menor privilégio (PoLP)**.\n\nSempre que possível, restrinja as ações e o acesso de um segredo apenas ao que é necessário. Por exemplo:\n\n* Se um segredo for usado apenas para ler dados, e não fazer alterações neles, opte por torná-lo **somente leitura**.\n* Se a API que você está usando permitir que um segredo seja limitado apenas a escopos ou permissões específicos, selecione apenas **aqueles de que você precisa**. Por exemplo, se você precisa apenas criar problemas com um segredo do GitHub, não há motivos para o segredo ter acesso ao conteúdo do repositório nem a qualquer outra coisa.\n* Se um segredo conceder a um invasor acesso total à conta de usuário que o possui, **considere criar contas de serviço** que possam assumir a propriedade do segredo.\n\n### Proteger segredos em seu aplicativo\n\n* **Nunca embuta um secreto no código**. Sempre use **variáveis de ambiente** ou as ferramentas de gerenciamento de segredos da plataforma (como os segredos do repositório do GitHub).\n* Se precisar compartilhar um segredo com alguém, use uma ferramenta dedicada, como um **gerenciador de senhas**. Nunca envie segredos por email ou mensagem instantânea.\n* Se possível, defina **datas de validade** e **gire os segredos** regularmente; isso reduz o risco de segredos antigos serem explorados.\n* Se seu aplicativo produzir um log, assegure que os **segredos serão ocultados antes de serem registrados nele**. Caso contrário, segredos ativos poderão ser salvos em arquivos de texto sem formatação.\n\n### Limitar o impacto caso um segredo seja exposto\n\n* Considere que o segredo foi comprometido, mesmo que tenha sido exposto por apenas um segundo, e **revogue-o imediatamente**. Em seguida, gere um novo segredo e armazene-o com segurança.\n* Verifique os **logs de atividades** que possam mostrar atividades suspeitas executadas com o segredo comprometido.\n* Considere como o segredo foi exposto e faça alterações em seus processos para que isso não volte a acontecer.\n\n## Como o GitHub ajuda a manter segredos em segurança\n\nVocê pode fazer muitas coisas para manter seus segredos em segurança, mas o GitHub também faz muito para ajudar com isso. Todos cometem erros, e estamos aqui para ajudar com recursos que capturam os segredos que você expõe acidentalmente:\n\n* A **proteção de push**, que testaremos posteriormente, impede o envio de segredos por push para seus repositórios no GitHub.\n* A **verificação de segredos** verifica os repositórios e cria alertas quando descobre um segredo. No caso de alguns segredos, também notificamos o provedor para que ele possa tomar medidas como revogar o segredo automaticamente.\n\n## Praticando o armazenamento seguro de segredos\n\nNeste exercício, criaremos um personal access token e o armazenaremos com segurança para que possamos usá-lo com o GitHub Actions. A ação que criaremos é um fluxo de trabalho simples que responde a uma questão.\n\n### 1. Criar um repositório para praticar\n\nVamos começar criando um repositório no qual trabalhar. A conta `new2code` tem um modelo de repositório que podemos usar para começar rapidamente.\n\n1. Navegue até a [página de novo repositório](https://github.com/new?template_owner=new2code\\&template_name=secret-action). Ao seguir este link, o modelo será pré-selecionado na conta `new2code`.\n2. Em \"Owner\", verifique se sua conta de usuário está selecionada.\n3. No campo \"Repository name\", digite `secret-action`.\n4. Abaixo do campo de descrição, selecione **Public** para definir a visibilidade do repositório.\n5. Clique em **Criar repositório**.\n\n### 2. Fazer commit de um token fictício\n\nTodos cometem erros, e é possível que você efetue commit de um segredo acidentalmente em algum momento de sua jornada de codificação. Neste exercício, faremos commit de um **token falso** intencionalmente para que possamos nos familiarizar e com o alerta que é disparado.\n\n1. Navegue até o repositório recém-criado.\n\n2. Navegue até o arquivo de fluxo de trabalho YAML clicando em `.github/workflows` na lista de arquivos.\n\n3. Abra o arquivo de fluxo de trabalho clicando em `comment.yml` na lista de arquivos.\n\n4. Para editar o arquivo de fluxo de trabalho, na parte superior direita, clique em <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-pencil\" aria-label=\"Edit this file\" role=\"img\"><path d=\"M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z\"></path></svg>.\n\n5. Na linha 13, `GH_TOKEN: \"\"`, insira este token fictício entre as aspas:\n\n   ```text\n   secret_scanning_ab85fc6f8d7638cf1c11da812da308d43_abcde\n   ```\n\n   O resultado final deve ter essa aparência:\n\n   ```yaml\n   GH_TOKEN: \"secret_scanning_ab85fc6f8d7638cf1c11da812da308d43_abcde\"\n   ```\n\n6. Para tentar fazer commit da alteração, na parte superior direita, clique em **Commit changes...** e em **Commit changes** novamente na caixa de diálogo.\n\n7. Agora, você deve ver o alerta de proteção de push com a mensagem \"Secret scanning found a GitHub Secret Scanning secret on line 13\".\n\n   ![Captura de tela de um alerta de proteção de push referente à Linha 13 do arquivo no qual tentamos fazer commit. O botão \"Cancel\" está realçado com um contorno laranja.](/assets/images/help/security/push-protection-example.png)\n\n   Se não estivéssemos testando um token fictício, isso nos alertaria de estarmos a um passo de expor um token. Examine as opções que você pode selecionar no alerta.\n\n8. Para interromper o commit e evitar expor o segredo, clique em **Cancel**. No canto superior direito, clique em **Cancel changes** e descarte as alterações não salvas, se solicitado.\n\n### 3. Criando um token real\n\nAgora, vamos tentar seguir nossas práticas recomendadas. Primeiro, criaremos um personal access token que permitirá que a ação ocorra em seu nome (o comentário criado parecerá vir da sua conta de usuário).\n\n> \\[!NOTE] Observe como seguimos o Princípio de privilégios mínimos em cada etapa de configuração. Seu token terá a validade mais curta necessária, só terá acesso ao repositório de que precisa e terá as permissões mínimas necessárias para funcionar.\n\n1. Navegue até a [nova página do personal access token](https://github.com/settings/personal-access-tokens/new).\n2. Em \"Token name\", dê um nome ao novo token. Você pode usar algo como \"Token de ação\".\n3. Em \"Expiration\", selecione \"7 days\".\n4. Em \"Repository access\", selecione **Apenas selecionar repositórios**.\n5. Na lista suspensa \"Select repositories\", selecione **apenas** o repositório de prática criado anteriormente.\n6. À direita de \"Repository permissions\" na seção \"Permissions\", clique em <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-unfold\" aria-label=\"Expand\" role=\"img\"><path d=\"m8.177.677 2.896 2.896a.25.25 0 0 1-.177.427H8.75v1.25a.75.75 0 0 1-1.5 0V4H5.104a.25.25 0 0 1-.177-.427L7.823.677a.25.25 0 0 1 .354 0ZM7.25 10.75a.75.75 0 0 1 1.5 0V12h2.146a.25.25 0 0 1 .177.427l-2.896 2.896a.25.25 0 0 1-.354 0l-2.896-2.896A.25.25 0 0 1 5.104 12H7.25v-1.25Zm-5-2a.75.75 0 0 0 0-1.5h-.5a.75.75 0 0 0 0 1.5h.5ZM6 8a.75.75 0 0 1-.75.75h-.5a.75.75 0 0 1 0-1.5h.5A.75.75 0 0 1 6 8Zm2.25.75a.75.75 0 0 0 0-1.5h-.5a.75.75 0 0 0 0 1.5h.5ZM12 8a.75.75 0 0 1-.75.75h-.5a.75.75 0 0 1 0-1.5h.5A.75.75 0 0 1 12 8Zm2.25.75a.75.75 0 0 0 0-1.5h-.5a.75.75 0 0 0 0 1.5h.5Z\"></path></svg> para exibir todas as permissões possíveis.\n7. Role para baixo até \"Issues\" e, na lista suspensa à direita, selecione \"Ler e escrever\".\n8. Na parte inferior da página, clique em **Gerar token**. Se solicitado, confirme clicando em **Generate token** novamente.\n\nÉ crucial lidar com o token resultante de maneira segura deste momento em diante. Como usaremos o token em breve, você pode copiá-lo para sua área de transferência.\n\n### 4. Armazenando o token com segurança\n\nAgora, podemos armazenar o novo token com segurança em nosso repositório.\n\n1. Navegue até o repositório criado no início do exercício.\n2. No nome do repositório, clique em **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-gear\" aria-label=\"gear\" role=\"img\"><path d=\"M8 0a8.2 8.2 0 0 1 .701.031C9.444.095 9.99.645 10.16 1.29l.288 1.107c.018.066.079.158.212.224.231.114.454.243.668.386.123.082.233.09.299.071l1.103-.303c.644-.176 1.392.021 1.82.63.27.385.506.792.704 1.218.315.675.111 1.422-.364 1.891l-.814.806c-.049.048-.098.147-.088.294.016.257.016.515 0 .772-.01.147.038.246.088.294l.814.806c.475.469.679 1.216.364 1.891a7.977 7.977 0 0 1-.704 1.217c-.428.61-1.176.807-1.82.63l-1.102-.302c-.067-.019-.177-.011-.3.071a5.909 5.909 0 0 1-.668.386c-.133.066-.194.158-.211.224l-.29 1.106c-.168.646-.715 1.196-1.458 1.26a8.006 8.006 0 0 1-1.402 0c-.743-.064-1.289-.614-1.458-1.26l-.289-1.106c-.018-.066-.079-.158-.212-.224a5.738 5.738 0 0 1-.668-.386c-.123-.082-.233-.09-.299-.071l-1.103.303c-.644.176-1.392-.021-1.82-.63a8.12 8.12 0 0 1-.704-1.218c-.315-.675-.111-1.422.363-1.891l.815-.806c.05-.048.098-.147.088-.294a6.214 6.214 0 0 1 0-.772c.01-.147-.038-.246-.088-.294l-.815-.806C.635 6.045.431 5.298.746 4.623a7.92 7.92 0 0 1 .704-1.217c.428-.61 1.176-.807 1.82-.63l1.102.302c.067.019.177.011.3-.071.214-.143.437-.272.668-.386.133-.066.194-.158.211-.224l.29-1.106C6.009.645 6.556.095 7.299.03 7.53.01 7.764 0 8 0Zm-.571 1.525c-.036.003-.108.036-.137.146l-.289 1.105c-.147.561-.549.967-.998 1.189-.173.086-.34.183-.5.29-.417.278-.97.423-1.529.27l-1.103-.303c-.109-.03-.175.016-.195.045-.22.312-.412.644-.573.99-.014.031-.021.11.059.19l.815.806c.411.406.562.957.53 1.456a4.709 4.709 0 0 0 0 .582c.032.499-.119 1.05-.53 1.456l-.815.806c-.081.08-.073.159-.059.19.162.346.353.677.573.989.02.03.085.076.195.046l1.102-.303c.56-.153 1.113-.008 1.53.27.161.107.328.204.501.29.447.222.85.629.997 1.189l.289 1.105c.029.109.101.143.137.146a6.6 6.6 0 0 0 1.142 0c.036-.003.108-.036.137-.146l.289-1.105c.147-.561.549-.967.998-1.189.173-.086.34-.183.5-.29.417-.278.97-.423 1.529-.27l1.103.303c.109.029.175-.016.195-.045.22-.313.411-.644.573-.99.014-.031.021-.11-.059-.19l-.815-.806c-.411-.406-.562-.957-.53-1.456a4.709 4.709 0 0 0 0-.582c-.032-.499.119-1.05.53-1.456l.815-.806c.081-.08.073-.159.059-.19a6.464 6.464 0 0 0-.573-.989c-.02-.03-.085-.076-.195-.046l-1.102.303c-.56.153-1.113.008-1.53-.27a4.44 4.44 0 0 0-.501-.29c-.447-.222-.85-.629-.997-1.189l-.289-1.105c-.029-.11-.101-.143-.137-.146a6.6 6.6 0 0 0-1.142 0ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM9.5 8a1.5 1.5 0 1 0-3.001.001A1.5 1.5 0 0 0 9.5 8Z\"></path></svg> Settings**. Caso não consiga ver a guia \"Configurações\", selecione o menu suspenso **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-kebab-horizontal\" aria-label=\"More\" role=\"img\"><path d=\"M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\"></path></svg>** , clique em **Configurações**.\n\n   ![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.](/assets/images/help/repository/repo-actions-settings.png)\n3. Na seção \"Security\" da barra lateral, selecione **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-key-asterisk\" aria-label=\"key-asterisk\" role=\"img\"><path d=\"M0 2.75A2.75 2.75 0 0 1 2.75 0h10.5A2.75 2.75 0 0 1 16 2.75v10.5A2.75 2.75 0 0 1 13.25 16H2.75A2.75 2.75 0 0 1 0 13.25ZM2.75 1.5c-.69 0-1.25.56-1.25 1.25v10.5c0 .69.56 1.25 1.25 1.25h10.5c.69 0 1.25-.56 1.25-1.25V2.75c0-.69-.56-1.25-1.25-1.25Z\"></path><path d=\"M8 4a.75.75 0 0 1 .75.75V6.7l1.69-.975a.75.75 0 0 1 .75 1.3L9.5 8l1.69.976a.75.75 0 0 1-.75 1.298L8.75 9.3v1.951a.75.75 0 0 1-1.5 0V9.299l-1.69.976a.75.75 0 0 1-.75-1.3L6.5 8l-1.69-.975a.75.75 0 0 1 .75-1.3l1.69.976V4.75A.75.75 0 0 1 8 4Z\"></path></svg> Secrets and variables** e clique em **Actions**.\n4. Em \"Repository secrets\", clique em **New repository secret**.\n5. No campo **Name**, digite um nome para o segredo. Para este exercício, usaremos `MY_TOKEN`.\n6. No campo **Secret**, cole o personal access token gerado anteriormente.\n7. Clique em **Adicionar segredo**.\n\nSeu segredo está criptografado com segurança e pronto para uso!\n\n### 5. Referenciando o token na ação\n\nAgora, podemos atualizar o arquivo de fluxo de trabalho YAML para usar o token e testar se ele funciona.\n\n1. Navegue de volta para seu repositório. Se estiver nas configurações de seu repositório, clique em **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-code\" aria-label=\"code\" role=\"img\"><path d=\"m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z\"></path></svg> Code** abaixo do nome do repositório.\n\n2. Navegue até o arquivo de fluxo de trabalho YAML clicando em `.github/workflows` na lista de arquivos.\n\n3. Abra o arquivo de fluxo de trabalho clicando em `comment.yml` na lista de arquivos.\n\n4. Para começar a editar o arquivo de fluxo de trabalho, na parte superior direita, clique em <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-pencil\" aria-label=\"Edit this file\" role=\"img\"><path d=\"M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z\"></path></svg>.\n\n5. Na linha 13, `GH_TOKEN: \"\"`, substitua as aspas vazias por `${{ secrets.MY_TOKEN }}`. Isso fará referência ao segredo do repositório que adicionamos anteriormente.\n\n   ```yaml\n   GH_TOKEN: ${{ secrets.MY_TOKEN }}\n   ```\n\n6. Para confirmar a alteração, na parte superior direita, clique em **Commit changes...**\n\n7. Na caixa de diálogo \"Commit changes\", edite \"Commit message\" para refletir a alteração que estamos fazendo. Por exemplo, você pode inserir \"Atualizando o fluxo de trabalho para usar o segredo do repositório\".\n\n8. Assegure que \"Commit directly to the `main` branch\" esteja selecionado.\n\n9. Clique em **Confirmar alterações**.\n\n### 6. Testando o token e o fluxo de trabalho\n\nDevemos estar prontos agora! Agora, vamos testar o fluxo de trabalho.\n\n1. No nome do seu repositório, clique em **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-issue-opened\" aria-label=\"issue-opened\" role=\"img\"><path d=\"M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\"></path><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z\"></path></svg> Issues**.\n\n   ![Captura de tela da página principal de um repositório. Na barra de navegação horizontal, uma guia, rotulada como \"Problemas\", é destacada em laranja escuro.](/assets/images/help/repository/repo-tabs-issues-global-nav-update.png)\n2. Clique em **Novo problema**.\n3. Em \"Add a title\", você pode digitar qualquer título desejado.\n4. Em \"Add a description\", na área de texto, digite `Hello`.\n5. Abaixo da área de texto, clique em **Create**.\n\nDepois que o fluxo de trabalho for concluído, você deverá ver um novo comentário aparecer. O comentário será criado por você mesmo, pois estamos usando seu token, e conterá uma saudação.\n\n## Próximas etapas\n\nPara se aprofundar mais na verificação de segredos e na proteção de push, conclua o curso [Introdução à verificação de segredos](https://github.com/skills/introduction-to-secret-scanning/tree/main) no GitHub Skills.\n\nOutra parte importante da segurança de código é aprender a identificar e corrigir vulnerabilidades de código nos projetos. Confira [Como localizar e corrigir sua primeira vulnerabilidade de código](/pt/get-started/learning-to-code/finding-and-fixing-your-first-code-vulnerability)."}