Пустой результат Jenkins hashicorp-vault-плагина

#jenkins #hashicorp-vault

#Дженкинс #хэшкорп-хранилище

Вопрос:

Я попробовал пример конвейера Дженкинса, упомянутый здесь: https://plugins .jenkins.io/hashicorp-vault-plugin

 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'
    }
}
 

Итак, я установил hashicorp-vault-plugin 2.2.0 в Jenkins 2.173 и запустил контейнер-докер Vault (v1.1.1), используя

 docker run -d --name vaulttest -p 80:8200 --cap-add=IPC_LOCK -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' vault
 

Затем я настроил учетные данные токена в Jenkins, используя токен «myroot»

Я создал секреты внутри Vault (используя WebUI)

 testing
   value_one
   value_two
another_test
   value
 

Прежде всего, в примере есть ошибка: при использовании путей «секрет / тестирование» и «секрет / another_test» плагин завершается с ошибкой 404:

 Invalid path for a versioned K/V secrets engine. See the API docs for the appropriate API endpoints to use. If using the Vault CLI, use 'vault kv get' for this operation."
 

Это можно исправить при использовании путей «секрет / данные / тестирование» и «секрет / данные / another_test» (см. https://issues.jenkins-ci.org/browse/JENKINS-44900 )

При последующем вызове задания переменные кажутся пустыми:

 [Pipeline] sh
  echo

[Pipeline] sh
  echo

[Pipeline] sh
  echo
 

Соединение определенно работает, потому что при предоставлении неверных учетных данных или недопустимых путей я получаю ошибки.

Также извлечение секретов напрямую возвращает действительный ответ:

 / # vault kv get secret/testing
====== Metadata ======
Key              Value
---              -----
created_time     2019-04-17T05:31:23.581020191Z
deletion_time    n/a
destroyed        false
version          3

====== Data ======
Key          Value
---          -----
value_one    HUGO
value_two    BETTY
 

Чего мне здесь не хватает?

Ответ №1:

Как видно здесь https://issues.jenkins-ci.org/browse/JENKINS-52646 Vault KV V2 возвращает другой Json-резонанс.

Поэтому вы должны использовать

 def secrets = [
    [$class: 'VaultSecret', path: 'secret/data/testing', secretValues: [
        [$class: 'VaultSecretValue', envVar: 'testing', vaultKey: 'data']]]
]
 

чтобы получить правильный ответ json.

Полученный Json-ответ затем может быть передан в «readJSON»

 def result = readJSON text: testing
echo result.value_one
echo result.value_two