GitHub Actions es la plataforma de integración continua y entrega continua (CI/CD) de GitHub que permite a los equipos de desarrollo automatizar su flujo de trabajo, incluidos los procesos de creación, prueba y despliegue.

Una desventaja de utilizar GitHub Actions es que tus registros son públicos, y cualquiera puede acceder a ellos con los permisos necesarios.

Para evitar que los datos sensibles queden expuestos en los registros de GitHub Actions, debes utilizar variables de entorno encriptadas para almacenar los datos sensibles de forma segura. Estas variables de entorno encriptadas se conocen como GitHub Actions Secrets.

Este artículo te muestra cómo utilizar GitHub Actions Secrets para evitar que aparezca información sensible en tus registros de GitHub Actions.

Requisitos Previos:

Para seguir este tutorial:

Cómo Mantener Seguros Tus Registros de GitHub Action

Cuando creas flujos de trabajo utilizando GitHub Actions, cualquier visitante de tu repositorio puede ver los registros, por lo que no deberían incluir información sensible. Sin embargo, no puedes eliminar sin más tus tokens, contraseñas y otra información sensible — los necesitas para las pruebas y para que tu aplicación funcione correctamente.

La solución es ocultarlos con el comando de flujo de trabajo ::add-mask::, que pone un asterisco (*) en lugar de los datos sensibles a los que se aplica.

La siguiente sección te muestra cómo enmascarar un registro.

Cómo Enmascarar Registros

Primero, abre el repositorio clonado en tu editor de texto.

Crea el directorio .github/workflows/ en el root de tu repositorio para almacenar los archivos de tu flujo de trabajo. A continuación, crea un nuevo archivo llamado hide-secrets.yml en el directorio .github/workflows y añádele el siguiente código:

name: Hide Sensitive Information
on: push
jobs:
  print-secret-token:
    runs-on: ubuntu-latest
    steps:
      - name: echo a secret
        run: echo "your secret token is verySecretToken"

Confirma los cambios y envíalos a tu repositorio de GitHub. El flujo de trabajo GitHub Actions actualizado estará activo y se activará cada vez que envíes un nuevo cambio.

Abre tu repositorio en GitHub y selecciona la pestaña Acciones para ver los registros. Tu flujo de trabajo debería aparecer como sigue:

Previsualización de tu flujo de trabajo en GitHub
Previsualización de tu flujo de trabajo en GitHub

Examinando los registros del flujo de trabajo, encontrarás la cadena verySecretToken impresa en los registros. Haz clic en tu flujo de trabajo y, a continuación, en el nombre de la tarea (print-secret-token) para ver el registro. Debería tener este aspecto

Examina tus registros de acciones de GitHub
Examina tus registros de acciones de GitHub

Para ocultarlo, utiliza el comando ::add-mask::, edita el archivo hide-secrets.yml y añade un nuevo paso al trabajo print-secret-token:

name: Hide Sensitive Information
on: push
jobs:
  print-secret-token:
    runs-on: ubuntu-latest
    steps:
      - name: Add Mask
        run: echo "::add-mask::verySecretToken"
      - name: echo a secret  
        run: echo "your secret token is verySecretToken"

Debes añadir el paso Add Mask al principio, ya que el enmascaramiento sólo se aplica después de que se haya ejecutado ::add-mask::. Si colocas el secret verySecretToken antes del paso Add Mask, seguirá apareciendo sin enmascarar. Así que, para asegurarte de que el valor está enmascarado, es esencial que utilices ::add-mask:: lo antes posible.

Una vez que confirmes y publiques tus modificaciones en tu repositorio de GitHub, la cadena verySecretToken será sustituida por asteriscos (*) siempre que aparezca en tus registros:

Hacer textos sin formato
Hacer textos sin formato

Aunque esto soluciona el problema del enmascaramiento, introduce uno nuevo. Tu verySecretToken sigue estando en el archivo de flujo de trabajo, por lo que cualquiera con acceso al código fuente puede verlo.

Otro inconveniente de enmascarar texto plano es que si enmascaras sólo una parte de una palabra, se ocultarán todas las instancias de la misma. Por ejemplo, toma la siguiente frase «Programar es genial, pero mis días más productivos son aquellos en los que no escribo un programa» Si enmascaras la palabra «programa», no sólo enmascarará la palabra al final de la frase, sino también en cualquier otro lugar donde aparezca, como en «programación»

Si intentas enmascarar texto sin formato, acabarás con algo así:

Problema al enmascarar textos sin formato
Problema al enmascarar textos sin formato

Un enfoque mejor para ocultar datos sensibles en los registros GitHub Actions es utilizar GitHub Actions de GitHub, como se demuestra en el siguiente apartado.

Cómo Utilizar GitHub Actions Secrets

Puedes utilizar GitHub Actions Secrets para almacenar cualquier dato privado que quieras utilizar en tu flujo de trabajo de acciones de GitHub. Los secrets se crean como pares clave/valor a nivel de repositorio u organización.

Mientras que ese repositorio sólo puede acceder a los secrets creados a nivel de repositorio, los secrets creados a nivel de organización son compartidos por todos los repositorios de una organización.

Los secrets creados a nivel de repositorio están disponibles para ser utilizados en acciones por cualquiera que tenga permisos de rol de colaborador. Puedes cambiar el valor de tus secrets en cualquier momento. Sin embargo, los secrets no pueden utilizarse con flujos de trabajo de un repositorio bifurcado.

Se aplican las siguientes directrices para nombrar los secretos:

  • Los nombres de los secrets no pueden contener espacios.
  • Los nombres de secrets no distinguen mayúsculas de minúsculas.
  • Los nombres secrets no pueden empezar por un número.
  • Los nombres de secrets no pueden empezar por el prefijo GITHUB_.
  • Los nombres de los secrets deben ser únicos — no pueden existir secrets con el mismo nombre en el mismo nivel.

Puedes utilizar estos secrets dentro del flujo de trabajo de las acciones de GitHub simplemente añadiendo secrets antes de tu nombre secrets como una variable YML, como se muestra a continuación:

${{ secrets.MY_SECRET_TOKEN }}

También puedes enmascarar secrets para mayor seguridad, como se muestra en el siguiente apartado.

Cómo Enmascarar Secrets

En primer lugar, crea un secret de GitHub. En tu repositorio en GitHub, haz clic en la pestaña Settings, selecciona Secrets Actions en la barra lateral izquierda y, a continuación, haz clic en  New repository secret para añadir un nuevo secreto:

Crear un nuevo secret de repositorio
Crear un nuevo secret de repositorio

Dale a tu secret un nombre y un valor secreto, y luego haz clic en Add secret:

Añadir un nuevo secret de GitHub
Añadir un nuevo secret de GitHub

Ahora que has creado tu secret y le has dado el valor verySecretToken, puedes utilizarlo en tu archivo de flujo de trabajo. Abre tu archivo hide-secrets.yml y realiza los siguientes cambios:

name: Hide Sensitive Information
on: push
jobs:
  print-secret-token:
    runs-on: ubuntu-latest
    steps:
      - name: Add Mask
        run: echo "::add-mask::${{ secrets.MY_SECRET_TOKEN }}"
      - name: Echo a secret  
        run: echo "your secret token is ${{ secrets.MY_SECRET_TOKEN }}"

La única diferencia entre este código y el anterior es que has sustituido el token secret por tu recién creado secret de GitHub «${{ secrets.MY_SECRET_TOKEN }}

Una vez que confirmes el código y envíes los cambios a tu repositorio de GitHub, tus secrets estarán ocultos:

Secrets de acciones de GitHub enmascarados
Secrets de acciones de GitHub enmascarados

Resumen

No debes revelar ninguna información sensible en tus registros GitHub Action. El enmascaramiento de texto plano es una forma de ocultar datos, pero cualquiera que acceda a tus archivos de flujo de trabajo puede ver la información que intentas ocultar.

Como demuestra este tutorial, GitHub Actions Secret es un enfoque mucho más seguro para salvaguardar tus datos sensibles, y luego enmascararlos.

Lee nuestra documentación para saber más sobre el uso de Git en Kinsta. Prueba ahora gratis nuestro Alojamiento de Aplicaciones.

Jeremy Holcombe Kinsta

Editor de Contenidos y Marketing en Kinsta, Desarrollador Web de WordPress y Redactor de Contenidos. Aparte de todo lo relacionado con WordPress, me gusta la playa, el golf y el cine. También tengo problemas con la gente alta ;).