Utilice el back-end OTP de Vault SSH con Jenkins

8

Estoy configurando Vault para almacenar secretos. El backend SSH con autenticación OTP parece una buena manera de dejar de administrar claves SSH para el acceso.

Tengo SSH backend funcionando, y estoy buscando conectar a Jenkins con la autenticación SSH-OTP para que también pueda eliminar las claves de implementación.

Miré los complementos de Jenkins para bóveda, pero solo funcionan para obtener secretos de Vault.

¿Hay complementos o algún truco de Jenkins para este propósito, o si no, es posible escribir uno propio?

Nota : En este momento, Jenkins usa claves SSH. Quiero eliminar el uso de claves y configurar Jenkins para obtener un SSH OTP de Vault cada vez que necesite SSH en algún host para una implementación.

gruñones
fuente
¿Podría explicar lo que no funciona?
030
1
Si usa abreviaturas, defínalos la primera vez. Mientras tanto, supongo que te refieres a la contraseña SSH de un solo uso cuando hablas de OTP. También puede agregar enlaces de documentación que haya leído a la pregunta.
030
¿Podría indicar si resolvió el problema?
030

Respuestas:

1

Miré los complementos de Jenkins para bóveda, pero solo funcionan para obtener secretos de Vault.

Depende de cómo se vea la configuración actual para implementar aplicaciones.

https://github.com/jenkinsci/hashicorp-vault-plugin

Si se usan tuberías de Jenkins, se podría reemplazar el keyId con el que se define en la bóveda de Hashicorp.

node {
  // define the secrets and the env variables
  def secrets = [
      [$class: 'VaultSecret', path: 'secret/testing', secretValues: [
          [$class: 'VaultSecretValue', envVar: 'testing', vaultKey: 'value_one'],
          [$class: 'VaultSecretValue', envVar: 'testing_again', vaultKey: 'value_two']]],
      [$class: 'VaultSecret', path: 'secret/another_test', secretValues: [
          [$class: 'VaultSecretValue', envVar: 'another_test', vaultKey: 'value']]]
  ]

  // optional configuration, if you do not provide this the next higher configuration
  // (e.g. folder or global) will be used
  def configuration = [$class: 'VaultConfiguration',
                       vaultUrl: 'http://my-very-other-vault-url.com',
                       vaultCredentialId: 'my-vault-cred-id']

  // inside this block your credentials will be available as env variables
  wrap([$class: 'VaultBuildWrapper', configuration: configuration, vaultSecrets: secrets]) {
      sh 'echo $testing'
      sh 'echo $testing_again'
      sh 'echo $another_test'
  }
}
030
fuente