Accede a repositorios privados de GitHub

En este instructivo, se demuestra cómo usar secretos encriptados y Cloud Key Management Service (Cloud KMS) para interactuar con repositorios privados de GitHub.

Necesitas secretos encriptados para conectarte a repositorios privados de GitHub solo cuando ejecutas compilaciones manuales. Cuando ejecutas compilaciones con los activadores de Cloud Build, puedes conectarte automáticamente a cualquier repositorio privado que poseas sin secretos encriptados. Para obtener información sobre cómo crear activadores, consulta Automatiza compilaciones con activadores de compilación.

Objetivos

  • Configurar una Llave SSH para GitHub
  • Agregar una Llave SSH a claves de implementación del repositorio privado
  • Encriptar la Llave SSH con Cloud KMS
  • Enviar una compilación que desencripte la clave y usarla para acceder al repositorio privado.

Costos

En este instructivo, se usan componentes facturables de Google Cloud Platform, incluidos los siguientes:

  • Cloud KMS
  • Cloud Build

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

Los usuarios nuevos de GCP pueden ser aptos para una prueba gratuita.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. Selecciona o crea un proyecto de GCP.

    Ir a la página Administrar recursos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las Cloud KMS API necesarias.

    Habilita las API

  5. Realiza la instalación y la inicialización del SDK de Cloud.
  6. Crea una Llave SSH para GitHub.
  7. Agrega una clave de implementación a tu repositorio privado.

Puede que también quieras completar la guía de inicio rápido de Cloud KMS para familiarizarte con este producto.

Crea un llavero de claves de Cloud KMS y CryptoKey

Si deseas usar tu Llave SSH con Cloud Build, debes emplear una clave criptográfica de Cloud KMS para encriptar y desencriptar la llave. Las claves criptográficas se almacenan en un llavero de claves.

Puedes crear llaveros de claves y claves criptográficas con los comandos gcloud kms keyrings create y gcloud kms keys create.

Para crear un llavero de claves, ejecuta el comando siguiente en tu shell o ventana de la terminal. A los fines de este instructivo, otorga el nombre my-keyring al llavero de claves:

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

A continuación, crea un CryptoKey con el nombre github-key. Con este comando, se crea el CryptoKey github-key en el llavero de claves my-keyring:

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

La marca --location=global indica que Cloud KMS debe entregar operaciones de escritura y lectura de varias ubicaciones geográficas.

Encripta una Llave SSH

Cuando creas una Llave SSH, se crea un archivo de claves id_rsa en tu entorno. Debido a que cualquiera puede autenticarse en tu cuenta con este archivo, debes encriptar el archivo antes de usarlo en una compilación.

Puedes encriptar recursos con el comando gcloud kms encrypt.

Para encriptar tu Llave SSH, ejecuta el comando siguiente. Asegúrate de especificar las rutas correctas:

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

Con el comando, se crea un archivo id_rsa.enc, que es una copia encriptada de id_rsa.

Otorga el permiso de desencriptación de la cuenta de servicio de Cloud Build

Debes otorgar el permiso a la cuenta de servicio de Cloud Build para acceder y encriptar CryptoKey durante la compilación.

A fin de aprender a otorgar el permiso de desencriptación de la cuenta de servicio, consulta Usa recursos encriptados.

Crea o actualiza el archivo known_hosts

Debes proporcionar un archivo known_hosts que contenga la clave rsa para github.com.

Para crear un archivo known_hosts, ejecuta el comando siguiente:

ssh-keyscan -t rsa github.com > known_hosts

Configura la compilación

Para configurar la compilación, sigue estos pasos:

  1. Crea un archivo de configuración de compilación llamado cloudbuild.yaml con tres pasos: el primer paso de gcloud desencripta la Llave SSH y almacena la llave desencriptada en un volumen llamado ssh. El volumen se usa para conservar los archivos en los pasos de la compilación. El segundo paso de git configura git para usar la Llave SSH mediante su adición al archivo known_hosts. El tercer paso de git usa la llave en known_hosts para conectarse al repositorio en 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. Crea un directorio nuevo en tu entorno que contenga los archivos siguientes:

    1. El archivo id_rsa.enc
    2. El archivo known_hosts
    3. El archivo YAML de configuración de compilación

Envía la compilación

Para enviar la compilación, ejecuta el comando siguiente desde el directorio que contiene los archivos id_rsa.enc, known_hosts y cloudbuild.yaml:

gcloud builds submit --config=cloudbuild.yaml .

El resultado es similar al siguiente:

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

Limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. En la GCP Console, dirígete a la página Proyectos.

    Ir a la página Proyectos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar.
  3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Build