Verwenden Sie das Vault SSH OTP-Backend mit Jenkins

8

Ich richte Vault ein, um Geheimnisse zu speichern. SSH-Backend mit OTP-Authentifizierung scheint eine gute Möglichkeit zu sein, die Verwaltung von SSH-Schlüsseln für den Zugriff zu beenden.

Ich habe ein funktionierendes SSH-Backend und möchte Jenkins mit der SSH-OTP-Authentifizierung verbinden, damit ich auch die Bereitstellungsschlüssel entfernen kann.

Ich habe mir Jenkins Plugins für Vault angesehen, aber sie funktionieren nur zum Abrufen von Geheimnissen aus Vault.

Gibt es Plugins oder Jenkins-Hacks für diesen Zweck oder wenn nicht, ist es möglich, eines meiner eigenen zu schreiben?

Hinweis : Derzeit verwendet Jenkins SSH-Schlüssel. Ich möchte die Verwendung von Schlüsseln vermeiden und Jenkins so konfigurieren, dass jedes Mal ein SSH-OTP von Vault abgerufen wird, wenn SSH für eine Bereitstellung auf einem Host ausgeführt werden muss.

Grumpyops
quelle
Können Sie erklären, was nicht funktioniert?
030
1
Wenn Sie Abkürzungen verwenden, definieren Sie diese bitte beim ersten Mal. In der Zwischenzeit gehe ich davon aus, dass Sie das einmalige SSH-Passwort meinen, wenn Sie über OTP sprechen. Sie können der Frage auch Dokumentationslinks hinzufügen, die Sie gelesen haben.
030
Können Sie angeben, ob Sie das Problem gelöst haben?
030

Antworten:

1

Ich habe mir Jenkins Plugins für Vault angesehen, aber sie funktionieren nur zum Abrufen von Geheimnissen aus Vault.

Dies hängt davon ab, wie die aktuelle Konfiguration zum Bereitstellen von Apps verwendet wird.

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

Wenn man Jenkins-Pipelines verwendet, kann man die keyId durch die im Hashicorp-Tresor definierte ersetzen.

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
quelle