Como acessar repositórios particulares do GitHub

Este tutorial mostra como usar chaves secretas criptografadas e o Cloud Key Management Service (KMS) para interagir com repositórios particulares do GitHub.

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

Este tutorial usa componentes do Cloud Platform que podem ser cobrados, incluindo:

  • Cloud KMS
  • Cloud Build

Use a calculadora de preços para gerar uma estimativa de custo baseada na projeção de uso.

Novos usuários do Cloud Platform 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. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  4. Ativar Cloud KMS API.

    Ativar a 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 sobre o 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 fins deste tutorial, dê ao KeyRing o nome de my-keyring:

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

Em seguida, crie uma CryptoKey chamada github-key. Este comando cria a CryptoKey github-key no KeyRing my-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 disponibilizar operações de leitura e gravação a partir de vários locais geográficos.

Criptografar uma chave SSH

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

Você pode criptografar 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 do id_rsa.

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

Você precisa conceder à conta de serviço do Cloud Build permissão para acessar e descriptografar a CryptoKey durante a compilaçã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 chave rsa para o github.com.

Para criar um arquivo known_hosts, execute este comando:

ssh-keyscan -t rsa github.com > known_hosts

Preparar a versão

Para preparar a versão, crie um novo diretório em seu ambiente contendo o seguinte:

  • o arquivo id_rsa.enc
  • o arquivo known_hosts
  • um arquivo YAML de solicitação de versão

A seguinte versão descriptografa a chave SSH, configura git para usar a chave SSH e clona o repositório em git@github.com:[GIT-USERNAME]/[REPOSITORY].

Depois de alterar os valores do marcador de posição do repositório, salve esta amostra de versão como cloudbuild.yaml:

cloudbuild.yaml

# 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

# Use git clone.
- name: 'gcr.io/cloud-builders/git'
  args:
  - clone
  - git@github.com:[GIT-USERNAME]/[REPOSITORY]
  volumes:
  - name: 'ssh'
    path: /root/.ssh

Enviar a versão

Para enviar a versão, execute o seguinte comando a partir do diretório que contém o arquivo id_rsa.enc, o arquivo known_hosts e o arquivo cloudbuild.yaml:

gcloud builds submit --config=cloudbuild.yaml .

O resultado é parecido com o seguinte:

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

Como fazer a limpeza

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform, é possível fazer 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 "Projetos".

    Acessar a página Projetos

  2. Na lista de projetos, selecione um e clique em Excluir projeto.
  3. Na caixa de diálogo, digite o código 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