Utiliser le backend Vault SSH OTP avec Jenkins

8

Je configure Vault pour stocker des secrets. Le backend SSH avec l'authentification OTP semble être un bon moyen d'arrêter de gérer les clés SSH pour l'accès.

J'ai un backend SSH qui fonctionne, et je cherche à connecter Jenkins avec l'authentification SSH-OTP afin de pouvoir également supprimer les clés de déploiement.

J'ai regardé les plugins Jenkins pour le coffre-fort, mais ils ne fonctionnent que pour récupérer les secrets de Vault.

Existe-t-il des plugins ou des hacks Jenkins à cet effet, ou sinon, est-il possible d'en écrire un?

Remarque : Actuellement, Jenkins utilise des clés SSH. Je veux éliminer l'utilisation de clés et configurer Jenkins pour obtenir un OTP SSH de Vault chaque fois qu'il a besoin de SSH dans un hôte pour un déploiement.

grumpyops
la source
Pourriez-vous expliquer ce qui ne fonctionne pas?
030
1
Si vous utilisez des abréviations, veuillez les définir la première fois. En attendant, je suppose que vous voulez dire mot de passe SSH à usage unique lorsque vous parlez d'OTP. Vous pouvez également ajouter des liens de documentation que vous avez lus à la question.
030
Pourriez-vous indiquer si vous avez résolu le problème?
030

Réponses:

1

J'ai regardé les plugins Jenkins pour le coffre-fort, mais ils ne fonctionnent que pour récupérer les secrets de Vault.

Cela dépend de l'apparence de la configuration actuelle utilisée pour déployer des applications.

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

Si l'on utilise des pipelines Jenkins, alors on pourrait remplacer le keyId par celui qui est défini dans le coffre-fort 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
la source