Accede a repositorios privados de GitHub

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

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 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 Cloud Platform pueden optar por una prueba gratuita.

Antes de comenzar

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  3. Asegúrate de tener habilitada la facturación para tu proyecto.

    Aprende a habilitar la facturación

  4. Habilita las Cloud KMS API necesarias.

    Habilita las API

  5. Install and initialize the Cloud SDK.
  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 usar una CryptoKey de Cloud KMS para encriptar y desencriptar la clave. Las CryptoKeys se almacenan en objetos de llavero de claves.

Puedes crear llaveros de claves y CryptoKeys 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 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

Prepara la compilación

Para preparar la compilación, crea un directorio nuevo en tu entorno que contenga los siguientes archivos:

  • el archivo id_rsa.enc
  • el archivo known_hosts
  • un archivo YAML de solicitud de compilación

En la siguiente compilación, se desencripta la Llave SSH, se configura git para usar la llave SSH y se clona el repositorio en git@github.com:[GIT-USERNAME]/[REPOSITORY].

Después de cambiar los valores de marcador de posición del repositorio, guarda esta compilación de ejemplo 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

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. In the GCP Console, go to the Projects page.

    Go to the Projects page

  2. In the project list, select the project you want to delete and click Delete .
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Cloud Build