Visão geral da segurança do codespace
O GitHub Codespaces foi projetado para ser uma segurança mais rígida por padrão. Consequentemente, você deverá garantir que as suas práticas de desenvolvimento de software não corram o risco de reduzir a posição de segurança do seu codespace.
Este guia descreve a forma como o GitHub Codespaces mantêm seu ambiente de desenvolvimento seguro e fornece algumas das boas práticas que ajudarão a manter sua segurança enquanto você trabalha. Como em qualquer ferramenta de desenvolvimento, lembre-se de que você só deve abrir e trabalhar em repositórios que você conhece e confia.
Isolamento de ambiente
O GitHub Codespaces foi projetado para manter seus codespaces separados um do outro, cada um usando sua própria máquina virtual e rede.
Máquinas virtuais isoladas
Cada código é hospedado na sua própria máquina virtual recém-construída (VM). Dois códigos nunca são colocalizados na mesma VM.
Toda vez que você reiniciar um codespace, ele será implantado em uma nova VM com as últimas atualizações de segurança disponíveis.
Rede isolada
Cada codespace tem a sua própria rede virtual isolada. Usamos firewalls para bloquear conexões recebidas da internet e impedir que os codespace se comuniquem entre si em redes internas. Os codespace podem fazer conexões de saída na internet.
Autenticação
Você pode se conectar a um codespace usando um navegador da Web ou por meio do Visual Studio Code. Se você se conectar por meio do VS Code, será solicitado que você se autentique no GitHub.
Toda vez que um codespace é criado ou reiniciado, atribui-se um novo token de GitHub com um período de vencimento automático. Este período permite que você trabalhe no código sem precisar efetuar a autenticação novamente durante um dia de trabalho típico, mas reduz a chance de deixar uma conexão aberta quando você parar de usar o codespace.
O escopo do token irá variar dependendo do acesso ao repositório onde o codespace foi criado:
- Se você tiver acesso de gravação no repositório: o token terá como escopo o acesso de leitura/gravação no repositório.
- Se você tiver acesso de leitura apenas no repositório: o token só permitirá que o código seja clonado do repositório de origem. Se você fizer um commit no codespace ou efetuar push e um novo branch, o GitHub Codespaces criará automaticamente um fork do repositório ou, se você já tiver um fork para o repositório upstream, vinculará o codespace a ele. O token é atualizado para ter acesso de leitura e gravação no fork. Para saber mais, confira Usando controle de origem no seu codespace.
- Se você autorizou seu codespace a acessar outros repositórios: o token terá como escopo o acesso de leitura ou leitura/gravação ao repositório de origem e a qualquer outro repositório ao qual você tenha autorizado o acesso. Para saber mais, confira Gerenciar o acesso a outros repositórios em seu codespace.
Conexões de codespace
Você pode conectar-se ao seu codespace usando o túnel criptografado TLS fornecido pelo serviço do GitHub Codespaces. Somente o criador de um codespace pode conectar-se a um codespace. As conexões são autenticadas com GitHub.
Se você precisar permitir acesso externo a serviços em execução em um codespace, você poderá habilitar o encaminhamento de portas para acesso público ou privado.
Encaminhamento de porta
Se você precisar conectar-se a um serviço (como um servidor web de desenvolvimento) em execução no seu codespace, você poderá configurar o encaminhamento de portas para tornar o serviço disponível na internet.
Os proprietários da organização podem restringir a capacidade de disponibilizar portas de encaminhamento publicamente ou na organização. Para saber mais, confira Como restringir a visibilidade das portas encaminhadas.
Portas encaminhadas de modo privado: são acessíveis na Internet, mas somente o criador do codespace pode acessá-las, após a autenticação no GitHub.
Portas encaminhadas publicamente na sua organização: são acessíveis na Internet, mas somente para os membros da mesma organização que o codespace, após a autenticação no GitHub.
Portas encaminhadas publicamente: são acessíveis na Internet e qualquer pessoa na Internet pode acessá-las. Não é necessária autenticação para acessar portas públicas encaminhadas.
Todas as portas encaminhadas são privadas por padrão, o que significa que você precisará efetuar a autenticação antes de acessar a porta. O acesso às portas privadas encaminhadas por um codespace é controlado por cookies de autenticação, com um período de vencimento de 3 horas. Quando o cookie vencer, você deverá efetuar a autenticação novamente.
Uma porta pública encaminhada voltará automaticamente para a privada quando você remover e adicionar novamente a porta, ou se você reiniciar o codespace.
Você pode usar o painel "Portas" para configurar uma porta para acesso público ou privado, e você pode parar o encaminhamento de portas quando ela não for mais necessária. Para saber mais, confira Encaminhar portas no seu código.
Práticas recomendadas de segurança para seus codespaces
Os codespaces são projetados para ter segurança enrijecida por padrão. Para ajudar a manter esta postura, recomendamos que você siga as práticas recomendadas de segurança durante seus procedimentos de desenvolvimento:
- Como em qualquer ferramenta de desenvolvimento, lembre-se de que você só deve abrir e trabalhar em repositórios que você conhece e confia.
- Antes de adicionar novas dependências ao codespace, verifique se elas são bem mantidas e se lançam atualizações para corrigir quaisquer vulnerabilidades de segurança encontradas nos seus codespaces.
Usando segredos de ambiente de desenvolvimento para acessar informações confidenciais
Sempre use segredos de ambiente de desenvolvimento quando quiser usar informações confidenciais (como tokens de acesso) em um codespace. Você pode acessar seus segredos como variáveis de ambiente no codespace, inclusive a partir do terminal. Por exemplo, você pode iniciar um terminal no codespace e usar echo $SECRET_NAME
para ver o valor de um segredo de ambiente de desenvolvimento.
Os valores de segredos são copiados em variáveis de ambiente sempre que o codespace é retomado ou criado e também são sincronizados quando eles são alterados.
Os segredos de ambiente de desenvolvimento não serão copiados para o ambiente se você não tiver acesso para gravação ao repositório do codespace.
Para mais informações sobre segredos, consulte:
- Gerenciando segredos específicos da sua conta para o GitHub Codespaces
- Gerenciando segredos do ambiente de desenvolvimento para seu repositório ou organização
Trabalhando com contribuições e repositórios de outras pessoas
Quando você cria um codespace a partir de um branch de PR a partir de uma bifurcação, o token na área do codespace irá variar dependendo se o repositório é público ou privado:
- Para um repositório privado, o codespace recebe acesso tanto à bigurcação quanto ao principal.
- Para um repositório público, o código só terá acesso à bifurcação e à abertura de PRs no principal.
Também oferecemos proteção adicional nesses cenários não injetando nenhum dos segredos do codespace no ambiente. Para saber mais, confira Gerenciando segredos específicos da sua conta para o GitHub Codespaces.
Note
O escopo do token no codespace poderá mudar se você criar um codespace com base em um fork no qual só tenha acesso de leitura e, depois, fizer um commit ou efetuar push de um novo branch no codespace. Nessa situação, como em qualquer outro repositório, GitHub Codespaces cria automaticamente um fork ou vincula seu codespace a um fork existente pertencente à sua conta e atualiza o token para ter acesso de leitura e gravação ao fork recém-vinculado. Para saber mais, confira Usando controle de origem no seu codespace.
Quando GitHub Codespaces vincula seu codespace a um fork existente, esse fork pode ser um fork do fork do qual você criou um codespace ou seu fork do repositório upstream compartilhado.
Práticas recomendadas adicionais
Há algumas boas práticas e riscos adicionais dos quais você deve estar ciente ao usar o GitHub Codespaces.
Compreendendo o arquivo devcontainer.json de um repositório
Quando você cria um codespace, se um arquivo devcontainer.json
for encontrado para seu repositório, ele será analisado e usado para configurar o codespace. O arquivo devcontainer.json
contém recursos avançados, como a instalação de extensões de terceiros e a execução de código arbitrário fornecido em um postCreateCommand
.
Para saber mais, confira Introdução aos contêineres de desenvolvimento.
Conceder acesso por meio de funcionalidades
Certos recursos de desenvolvimento podem potencialmente adicionar risco ao seu ambiente. Por exemplo, a assinatura, segredos injetados em variáveis de ambiente, acesso de registro autenticado e acesso a pacotes podem apresentar possíveis problemas de segurança. Recomendamos que se conceda acesso apenas àqueles que dela necessitem e que se adote uma política que seja o mais restritiva possível.
Como usar extensões
Qualquer extensão adicional do VS Code que você tenha instalado tem o potencial de introduzir mais risco. Para ajudar a mitigar esse risco, certifique-se de que você só instale extensões confiáveis, e que elas sejam sempre atualizadas.
Como Usar a Sincronização de Configurações
A Sincronização de Configurações do VS Code pode permitir que conteúdo potencialmente mal-intencionado seja transferido entre dispositivos. Por padrão, a Sincronização de Configurações está desabilitada para codespaces abertos no navegador. Se estiver criando um codespace para um repositório em cujo conteúdo você não confia, abra o codespace no navegador e deixe a Sincronização de Configurações desabilitada.
Se você habilitou a Sincronização de Configurações nas preferências de usuário e deseja permitir que as alterações nas configurações sincronizem dos codespaces para outras instâncias do VS Code, adicione uma lista selecionada de repositórios confiáveis, em vez de confiar em todos os repositórios. Quando você cria codespaces de repositórios confiáveis, as alterações feitas nas configurações nos codespaces são sincronizadas com as configurações armazenadas em cache na nuvem, da qual elas podem ser transferidas para os dispositivos. Para saber mais sobre como gerenciar a Sincronização de Configurações, confira Como personalizar o GitHub Codespaces para sua conta.