Como acessar repositórios privados do GitHub

Neste tutorial, explicamos como usar secrets criptografados e o Cloud Key Management Service (Cloud KMS) para interagir com repositórios particulares do GitHub .

Você precisa de secrets criptografados para se conectar a repositórios privados do GitHub apenas para executar versões manuais. Ao executar versões usando os acionadores do Cloud Build, conecte-se automaticamente a qualquer repositório privado que não tenha secrets criptografados. Para receber informações sobre como criar acionadores, consulte Como automatizar versões usando acionadores.

Objetivos

  • Configurar uma chave SSH do GitHub.
  • Adicionar a chave SSH às chaves de implantação de um repositório privado.
  • Criptografar a chave SSH usando o Cloud KMS.
  • Enviar uma versão que descriptografe a chave e use-a para acessar o repositório particular.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud Platform, entre eles:

  • Cloud KMS
  • Cloud Build

Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto.

Usuários novos do GCP podem estar qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do GCP, na página do seletor de projetos, selecione ou crie um projeto do GCP.

    Acesse a página do seletor de projetos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform. Saiba como confirmar que o faturamento está ativado para seu projeto.

  4. Ative a(s) Cloud KMS API necessária(s).

    Ativar a(s) API

  5. Instale e inicialize o SDK do Cloud..
  6. Crie uma chave SSH para o GitHub.
  7. Adicione uma chave de implantação ao seu repositório privado.

Talvez seja necessário acessar o Guia de início rápido do Cloud KMS para se familiarizar com o produto.

Criar um KeyRing e uma CryptoKey do Cloud KMS

Para usar sua chave SSH com o Cloud Build, você precisa usar uma CryptoKey do Cloud KMS para criptografar e descriptografar a chave. As CryptoKeys são armazenadas em objetos KeyRing.

É possível criar KeyRings e CryptoKeys usando os comandos gcloud kms keyrings create e gcloud kms keys create.

Para criar um KeyRing, execute o comando a seguir no shell ou na janela do terminal. Para os objetivos deste tutorial, nomeie o KeyRing my-keyring:

gcloud kms keyrings create my-keyring --location=global

Em seguida, crie uma CryptoKey com o nome de github-key. Este comando cria a github-keyCryptoKey nomy-keyring KeyRing:

gcloud kms keys create github-key \
--location=global --keyring=my-keyring \
--purpose=encryption

A sinalização --location=global indica que o Cloud KMS deve exibir operações de leitura e gravação de vários locais geográficos.

Criptografar uma chave SSH

Quando você cria uma chave SSH, é criado um arquivo de chave id_rsa no seu ambiente. Como qualquer pessoa pode autenticar sua conta com esse arquivo, você deve criptografar o arquivo antes de usá-lo em uma versão.

Criptografe recursos usando o comando gcloud kms encrypt.

Para criptografar sua chave SSH, execute o seguinte comando. Certifique-se de especificar os caminhos corretos:

gcloud kms encrypt --plaintext-file=/path/to/sshkey/id_rsa \
--ciphertext-file=/path/to/save/encryptedkey/id_rsa.enc \
--location=global --keyring=my-keyring --key=github-key

Esse comando cria um arquivo id_rsa.enc que é uma cópia criptografada de id_rsa.

Conceder permissão de descriptografia à conta de serviço do Cloud Build

Você precisa conceder permissão à conta de serviço do Cloud Build para acessar e descriptografar a CryptoKey durante a versão.

Para saber como conceder permissão de descriptografia à conta de serviço, consulte Como usar recursos criptografados.

Criar ou atualizar o arquivo known_hosts

Você precisa fornecer um arquivo known_hosts, contendo a tecla rsa para github.com.

Para criar um arquivo known_hosts, execute o seguinte comando:

ssh-keyscan -t rsa github.com > known_hosts

Configurar a versão

Para configurar a versão:

  1. Crie um arquivo de configuração da versão com o nome cloudbuild.yaml com três etapas: a primeira etapa gcloud descriptografa a chave SSH que é armazenada em um volume chamado ssh. O volume é usado para manter os arquivos nas etapas da criação. A segunda etapa do git configura o git para usar a chave SSH adicionando-a ao arquivo known_hosts. A terceira etapa git usa a chave em known_hosts para se conectar ao repositório em git@github.com:[GIT-USERNAME]/[REPOSITORY].

    # Decrypt the file containing the key
    steps:
    - name: 'gcr.io/cloud-builders/gcloud'
      args:
      - kms
      - decrypt
      - --ciphertext-file=id_rsa.enc
      - --plaintext-file=/root/.ssh/id_rsa
      - --location=global
      - --keyring=my-keyring
      - --key=github-key
      volumes:
      - name: 'ssh'
        path: /root/.ssh
    
    # Set up git with key and domain
    - name: 'gcr.io/cloud-builders/git'
      entrypoint: 'bash'
      args:
      - '-c'
      - |
        chmod 600 /root/.ssh/id_rsa
        cat <<EOF >/root/.ssh/config
        Hostname github.com
        IdentityFile /root/.ssh/id_rsa
        EOF
        mv known_hosts /root/.ssh/known_hosts
      volumes:
      - name: 'ssh'
        path: /root/.ssh
    
    # Connect to the repository
    - name: 'gcr.io/cloud-builders/git'
      args:
      - clone
      - git@github.com:[GIT-USERNAME]/[REPOSITORY]
      volumes:
      - name: 'ssh'
        path: /root/.ssh
    
  2. Crie um novo diretório no seu ambiente, com os seguintes arquivos:

    1. O arquivo id_rsa.enc
    2. O arquivo known_hosts
    3. O arquivo YAML de configuração da versão

Enviar a versão

Para enviar a versão, execute o seguinte comando no diretório em que estão os arquivos id_rsa.enc, known_hosts e cloudbuild.yaml:

gcloud builds submit --config=cloudbuild.yaml .

A resposta será semelhante a:

Creating temporary tarball archive of 3 file(s) totalling 4.1 KiB before compression.
Uploading tarball of [.] to [gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/[PROJECT-ID]/builds/871b68bc---].
Logs are available at [https://console.cloud.google.com/gcr/builds/871b68bc---?project=[PROJECT-ID]].
----------------------------- REMOTE BUILD OUTPUT ------------------------------
starting build "871b68bc-cefc-4411-856c-2a2b7c7d2487"

FETCHSOURCE
Fetching storage object: gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178
Copying gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178...
/ [1 files][  3.9 KiB/  3.9 KiB]
Operation completed over 1 objects/3.9 KiB.
BUILD
Step #0: Already have image (with digest): gcr.io/cloud-builders/gcloud
Starting Step #0
Finished Step #0
Step #1: Already have image (with digest): gcr.io/cloud-builders/git
Starting Step #1
Step #1: # github.com SSH-2.0-libssh_0.7.0
Finished Step #1
Step #2: Already have image (with digest): gcr.io/cloud-builders/git
Starting Step #2
Step #2: Cloning into '[REPOSITORY-NAME]'...
Step #2: Warning: Permanently added the RSA host key for IP address 'XXX.XXX.XXX.XXX' to the list of known hosts.
Finished Step #2
PUSH
DONE
-----------------------------------------------------------------------------------------------------------------

ID                                    CREATE_TIME                DURATION  SOURCE                                                                              IMAGES  STATUS
871b68bc-cefc-4411-856c-2a2b7c7d2487  XXXX-XX-XXT17:57:21+00:00  13S       gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz  -                                 SUCCESS

Limpar

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform, faça o seguinte:

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do GCP, acesse a página Gerenciar recursos.

    Acessar a página Gerenciar recursos

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Build