Usando claves secretas de la API en travis-ci

92

Me gustaría usar travis-ci para uno de mis proyectos .

El proyecto es un contenedor de API, por lo que muchas de las pruebas se basan en el uso de claves secretas de API. Para probar localmente, simplemente los almaceno como variables de entorno. ¿Cuál es una forma segura de usar esas llaves en Travis?

usuario94154
fuente

Respuestas:

99

Travis tiene una función para cifrar variables de entorno ( "Cifrar variables de entorno" ). Esto se puede utilizar para proteger sus claves secretas de API. He usado esto con éxito para mi clave API de Heroku.

Todo lo que tiene que hacer es instalar la gema travis, cifrar la cadena que desee y agregar la cadena cifrada en su .travis.yml. El cifrado solo es válido para un repositorio. El traviscomando obtiene su clave pública para su repositorio y luego puede descifrar la cadena durante la compilación.

gem install --user travis
travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo

Esto le da el siguiente resultado:

Please add the following to your .travis.yml file:

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="
Odi
fuente
12
No olvide documentar qué variables está utilizando y por qué, porque una vez cifradas, solo alguien con las claves originales puede recuperarlas.
jerseyboy
2
Parece que las versiones más nuevas de la gema Travis prefieren tener sus argumentos en el orden opuesto:, travis encrypt [args..] [options]es decir, querrás hacerlo travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo. Si se ponen las opciones primero y los datos que se van a cifrar en último lugar, se muestra una advertencia.
Jordan Running
3
Con la opción --add env.globaldel traviscomando, modificará su .travis.yml automáticamente.
Thomas
1
@RamIdavalapati: dado que los secretos están encriptados, esto se considera seguro, sí.
Odi
1
@ Ramesh-X: sí, ya que este cifrado es para TravisCI. Si alguien tiene control sobre TravisCI, podría obtener SECRET_ENV
Odi
7

de acuerdo con esto en la documentación de travis ci se dice que:

Si tiene instalados los clientes de línea de comandos de Heroku y Travis CI, puede obtener su clave, cifrarla y agregarla a su .travis.yml ejecutando el siguiente comando desde el directorio de su proyecto:

travis encrypt $(heroku auth:token) --add deploy.api_key

consulte el siguiente tutorial para instalar el cliente heroku de acuerdo con su sistema operativo

Espoir Murhabazi
fuente
Solo quiero verificar: la clave que agrega a su archivo es segura para cargarla en el control de versiones, ¿verdad?
vapurrmaid
5

También puede definir variables secretas en la configuración del repositorio :

Las variables definidas en la configuración del repositorio son las mismas para todas las compilaciones y, cuando reinicia una compilación anterior, utiliza los valores más recientes. Estas variables no están disponibles automáticamente para las bifurcaciones.

Defina variables en la configuración del repositorio que:

  • difieren por repositorio.
  • contienen datos confidenciales, como credenciales de terceros.

Para definir variables en la configuración del repositorio, asegúrese de haber iniciado sesión, navegue hasta el repositorio en cuestión, elija "Configuración" en el menú de engranajes y haga clic en "Agregar nueva variable" en la sección "Variables de entorno".

Pomber
fuente
1
No entendí cómo crear variables secretas . Al buscar en Google, los resultados explican cómo cifrar.
XedinUnknown
@XedinUnknown Esto se puede utilizar para variables secretas. Desde el enlace: "De forma predeterminada, el valor de estas nuevas variables de entorno está oculto de la línea de exportación en los registros. Esto corresponde al comportamiento de las variables cifradas en su .travis.yml. Las variables se almacenan cifradas en nuestros sistemas, y se descifra cuando se genera el script de compilación ".
bmaupin
0

Use un conjunto diferente de claves API y hágalo de la misma manera. Su caja de travis se configura para su ejecución de compilación y luego se vuelve a derribar por completo una vez finalizada la compilación. Tienes acceso de root a tu caja durante la compilación, por lo que puedes hacer lo que quieras con ella.

Markus
fuente
4
¿Qué quieres decir con "hazlo de la misma manera"? Realmente no me gusta la idea de almacenar claves API en el repositorio en sí (es decir, en el archivo .travis.yml), pero no parece haber otra forma de configurar las variables de entorno en travis.
BM5k
La variable env se cifrará con una clave pública, por lo que solo el propietario de la clave secreta puede descifrarla. No debes usar un token importante. En mi caso usé el que travis ya tenía para GitHub. Esto funcionó bastante bien y desde github puedo revocar ese token cada vez que siento que travis es un riesgo. Tener el token cifrado en mi repositorio no me hace dormir mal. github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml
eckes