Esta versión de GitHub Enterprise se discontinuó el 2021-09-23. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener un mejor desempeño, más seguridad y nuevas características, actualiza a la última versión de GitHub Enterprise. Para obtener ayuda con la actualización, contacta al soporte de GitHub Enterprise.

Secretos cifrados

Los secretos cifrados te permiten almacenar información sensible en tu organización o repositorio.

Nota: GitHub Actions estuvo disponible para GitHub Enterprise Server 2.22 como un beta limitado. El beta terminó. GitHub Actions está ahora disponible habitualmente en GitHub Enterprise Server 3.0 o superior. Para obtener más información, consulta la sección de notas de lanzamiento para GitHub Enterprise Server 3.0.


Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.

Acerca de los secretos cifrados

Los secretos son variables de ambiente cifradas que creas en una organización o repositorio. Los secretos que creas están disponibles para utilizarse en los flujos de trabajo de GitHub Actions. GitHub utiliza una caja sellada de libsodium para ayudarte a garantizar que los secretos se cifran antes de llegar a GitHub y que permanezcan cifrados hasta que los utilices en un flujo de trabajo.

Para los secretos almacenados a nivel organizacional, peudes utilizar las políticas de acceso para controlar qué repositorios pueden utilizar secretos organizacionales. Los secretos a nivel organizacional te permiten compartir secretos entre repositorios múltiples, lo cual reduce la necesidad de crear secretos duplicados. El actualizar un secreto de organización en una ubicación también garantiza que el cambio tome efecto en todos los flujos de trabajo del repositorio que lo utilicen.

Nombrar tus secretos

Las siguientes reglas aplican a los nombres secretos:

  • Los nombres secretos solo contienen caracteres alfanuméricos ([a-z], [A-Z], [0-9]) o guiones bajos (_). No se permiten espacios.

  • Los nombres secretos no deben comenzar con el prefijo GITHUB_.

  • Los nombres secretos no deben comenzar con un número.

  • Los nombres de secreto no distinguen entre mayúsculas y minúsculas.

  • Los nombres secretos deben ser únicos en el nivel en el que se hayan creado.

    Por ejemplo, un secreto que se creó a nivel de repositorio debe tener un nombre único en éste, y un secreto que se creó a nivel de organización debe tener un nombre único en este nivel.

    Si un secreto con el mismo nombre existe en varios niveles, aquél en el nivel más bajo tomará presedencia. Por ejemplo, si un secreto a nivel de organización tiene el mismo nombre que un secreto a nivel de repositorio, entonces el secreto a nivel de repositorio tomará precedencia.

Para ayudarte a garantizar que GitHub redacta tus secretos en bitácoras, evita utilizar datos estructurados como los valores de los secretos. Por ejemplo, evita crear secretos que contengan JSON o blobs de Git codificados.

Acceder a tus secretos

Para hacer que un secreto esté disponible para una acción, debes configurar el secreto como una variable de entrada o de entorno en tu archivo de flujo de trabajo. Revisa el archivo README de la acción para saber qué variables de entrada y de entorno espera la acción. Para obtener más información, consulta "Sintaxis del flujo de trabajo paraGitHub Actions".

Puedes usar y leer secretos cifrados en un archivo de flujo de trabajo si tienes acceso para editar el archivo. Para obtener más información, consulta "Permisos de acceso en GitHub."

Advertencia: GitHub redacta automáticamente secretos impresos en el registro, pero debes evitar imprimir secretos en el registro intencionalmente.

También puedes administrar secretos utilizando la API de REST. Para obtener más información, consulta la sección "Secretos".

Limitar permisos de credenciales

Cuando generes credenciales, te recomendamos que otorgues los mínimos permisos posibles. Por ejemplo, en lugar de usar credenciales personales, usa implementar claves o una cuenta de servicio. Considera otorgar permisos de solo lectura si eso es todo lo que se necesita, y limita el acceso lo máximo posible. Cuando generes un token de acceso personal (PAT), selecciona el menor número de ámbitos necesarios.

Nota: Puedes utilizar la API de REST para administrar los secretos. Para obtener más información, consulta la sección " API de secretos de GitHub Actions".

Crear secretos cifrados para un repositorio

Para crear secretos para un repositorio de una cuenta de usuario, deberás ser el propietario de éste. Para crear secretos para un repositorio de una organización, deberás tener acceso de administrador.

  1. En GitHub Enterprise Server, visita la página principal del repositorio.
  2. Debajo de tu nombre de repositorio, da clic en Configuración. Botón de configuración del repositorio
  3. En la barra lateral izquierda, haz clic en Secrets (Secretos).
  4. Da clic en Secreto de repositorio nuevo.
  5. Teclea un nombre para tu secreto en el cuadro de entrada Name.
  6. Ingresa el valor de tu secreto.
  7. Haz clic en Agregar secreto (Agregar secreto).

Si tu repositorio puede acceder a los secretos de la organización padre, entonces estos secretos también se listan en esta página.

Para aprender más sobre el CLI de GitHub, consulta la sección "Acerca del CLI de GitHub".

Para agregar un secreto de repositorio, utiliza el subcomando gh secret set. Reemplaza a secret-name con el nombre de tu secreto.

gh secret set secret-name

El CLI te pedirá ingresar un valor secreto. Como alternativa, puedes leer el valor del secreto desde un archivo.

gh secret set secret-name < secret.txt

Para listar todos los secretos del repositorio, utiliza el subcomando gh secret list.

Crear secretos cifrados para una organización

Cuando creas un secreto en una organización, puedes utilizar una política para limitar el acceso de los repositorios a este. Por ejemplo, puedes otorgar acceso a todos los repositorios, o limitarlo a solo los repositorios privados o a una lista específica de estos.

Para crear secretos a nivel organizacional, deberás tener acceso de administrador.

  1. En GitHub Enterprise Server, navega hasta la página principal de la organización.
  2. Debajo del nombre de tu organización, da clic en Ajustes. Botón de configuración de organización
  3. En la barra lateral izquierda, haz clic en Secrets (Secretos).
  4. Da clic en Secreto de organización nuevo.
  5. Teclea un nombre para tu secreto en el cuadro de entrada Name.
  6. Ingresa el Valor para tu secreto.
  7. Desde la lista desplegable Acceso de los repositorios, elige una política de acceso.
  8. Haz clic en Agregar secreto (Agregar secreto).

Nota: Predeterminadamente, el CLI de GitHub se autentica con los alcances repo y read:org. Para administrar los secretos de la organización, debes autorizar el alcance admin:org adicionalmente.

gh auth login --scopes "admin:org"

Para agregar un secreto para una organización, utiliza el subcomando gh secret set con el marcador --org o -o seguido del nombre de la organización.

gh secret set --org organization-name secret-name

Predeterminadamente, el secreto solo se encuentra disponible para los repositorios privados. Para especificar que el secreto debe estar disponible para todos los repositorios dentro de la organización, utiliza el marcador --visibility o -v.

gh secret set --org organization-name secret-name --visibility all

Para especificar que el secreto debe estar disponible para los repositorios seleccionados dentro de la organización, utiliza el marcador --repos o -r.

gh secret set --org organization-name secret-name --repos repo-name-1,repo-name-2"

Para listar todos los secretos para una organización, utiliza el subcomando gh secret list con el marcador --org o -o seguido del nombre de la organización.

gh secret list --org organization-name

Revisar el acceso a los secretos de nivel organizacional

Puedes revisar qué políticas de acceso se están aplicando a un secreto en tu organización.

  1. En GitHub Enterprise Server, navega hasta la página principal de la organización.
  2. Debajo del nombre de tu organización, da clic en Ajustes. Botón de configuración de organización
  3. En la barra lateral izquierda, haz clic en Secrets (Secretos).
  4. La lista de secretos incluye cualquier política y permiso configurado. Por ejemplo: Lista de secretos
  5. Para encontrar más detalles sobre los permisos configurados para cada secreto, da clic en Actualizar.

Usar secretos cifrados en un flujo de trabajo

Nota:Con la excepción de GITHUB_TOKEN, los secretos no se pasan al ejecutador cuando un flujo de trabajo se dispara desde un repositorio bifurcado.

Para proporcionar una acción con un secreto como variable de entrada o de entorno, puedes usar el contexto de secrets para acceder a los secretos que has creado en tu repositorio. Para obtener más información, consulta las secciones de "Contextos" y "Sintaxis de flujo de trabajo para GitHub Actions".

steps:
  - name: Hello world action
    with: # Set the secret as an input
      super_secret: ${{ secrets.SuperSecret }}
    env: # Or as an environment variable
      super_secret: ${{ secrets.SuperSecret }}

Evita pasar secretos entre procesos desde la línea de comando, siempre que sea posible. Los procesos de la línea de comando pueden ser visibles para otros usuarios (utilizando el comando ps) o ser capturados por eventos de auditoría de seguridad. Para ayudar a proteger los secretos, considera usar variables de entorno, STDIN u otros mecanismos admitidos por el proceso de destino.

Si debes pasar secretos dentro de una línea de comando, enciérralos usando las normas de uso de comillas adecuadas. Los secretos suelen contener caracteres especiales que pueden afectar involuntariamente a tu shell. Para evitar estos caracteres especiales, usa comillas en tus variables de entorno. Por ejemplo:

Ejemplo usando Bash

steps:
  - shell: bash
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "$SUPER_SECRET"

Ejemplo usando PowerShell

steps:
  - shell: pwsh
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "$env:SUPER_SECRET"

Ejemplo usando Cmd.exe

steps:
  - shell: cmd
    env:
      SUPER_SECRET: ${{ secrets.SuperSecret }}
    run: |
      example-command "%SUPER_SECRET%"

Límites para los secretos

Puedes almacenar hasta 1000 secretos de organización y 100 secretos de repositorio.

Un flujo de trabajo que se haya creado en un repositorio puede acceder a la siguiente cantidad de secretos:

  • Todos los 100 secretos de repositorio.
  • Si se asigna acceso a más de 100 secretos de la organización para este repositorio, el flujo de trabajo solo puede utilizar los primeros 100 secretos de organización (que se almacenan por orden alfabético por nombre de secreto).

Los secretos tienen un tamaño máximo de 64 KB. Para usar secretos de un tamaño mayor a 64 KB, puedes almacenar los secretos cifrados en tu repositorio y guardar la contraseña de descifrado como un secreto en GitHub. Por ejemplo, puedes usar gpg para cifrar tus credenciales de manera local antes de verificar el archivo en tu repositorio en GitHub. Para obtener más información, consulta la página del manual "gpg".

Advertencia: Evita que tus secretos se impriman cuando se ejecute tu acción. Cuando usas esta solución, GitHub no redacta los secretos que están impresos en los registros.

  1. Ejecuta el siguiente comando en tu terminal para cifrar el archivo my_secret.json usando gpg y el algoritmo de cifras AES256.

    $ gpg --symmetric --cipher-algo AES256 my_secret.json
  2. Se te pedirá que ingreses una contraseña. Recuerda la contraseña, porque deberás crear un nuevo secreto en GitHub que use esa contraseña como valor.

  3. Crear un nuevo secreto que contiene la frase de acceso. Por ejemplo, crea un nuevo secreto con el nombre LARGE_SECRET_PASSPHRASE y establece el valor del secreto para la contraseña que seleccionaste en el paso anterior.

  4. Copia tu archivo cifrado en tu repositorio y confírmalo. En este ejemplo, el archivo cifrado es my_secret.json.gpg.

  5. Crea un script shell para descifrar la contraseña. Guarda este archivo como decrypt_secret.sh.

    #!/bin/sh
    
    # Decrypt the file
    mkdir $HOME/secrets
    # --batch to prevent interactive command
    # --yes to assume "yes" for questions
    gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \
    --output $HOME/secrets/my_secret.json my_secret.json.gpg
  6. Asegúrate de que tu shell script sea ejecutable antes de verificarlo en tu repositorio.

    $ chmod +x decrypt_secret.sh
    $ git add decrypt_secret.sh
    $ git commit -m "Add new decryption script"
    $ git push
  7. En tu flujo de trabajo, usa un step para llamar al shell script y descifrar el secreto. Para tener una copia de tu repositorio en el entorno en el que se ejecuta tu flujo de trabajo, deberás usar la acción code>actions/checkout. Haz referencia a tu shell script usando el comando run relacionado con la raíz de tu repositorio.

    name: Workflows with large secrets
    
    on: push
    
    jobs:
      my-job:
        name: My Job
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Decrypt large secret
            run: ./.github/scripts/decrypt_secret.sh
            env:
              LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
          # Este comando es solo un ejemplo para mostrar cómo se imprime tu secreto.
          # Asegúrate de eliminar las declaraciones impresas de tus secretos. GitHub 
          # no oculta los secretos que usan esta solución.
          - name: Test printing your secret (Elimina este paso en la producción)
            run: cat $HOME/secrets/my_secret.json