Обновление одного значения в hashicorp Vault - PullRequest
0 голосов
/ 07 мая 2019

Я использую сервер хранилища hashicorp, который отлично работает для предоставления секретов и другой конфиденциальной информации серверам приложений.

Секреты хранятся как объекты json в секретах, и приложение извлекает и анализирует их как объекты json

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу обновить одно значение в файле секретов.Может кто-нибудь сказать мне, как обновить одно значение в файле секретов формата json?

Ниже приведен пример файла секретов, который у нас есть

{
  "data": {
    "cloud.aws.credentials.accessKey": "AWS_KEY",
    "cloud.aws.credentials.secretKey": "akjdfhadsFADSFadsfadksbfadsfADSF123123",
    "cloud.aws.region.static": "AWS_REGION",
    "app.base.url": "http://app.env.abc:8080",
    "app.password": "ThisIsASamplePassword",
    "app.base.url": "http://localhost:7070/applicationname",
    "app.user.name": "this.is.a.sample"
  }
}

мы используем довольно много ключей доступа AWSи наша политика безопасности заключается в смене ключа каждые 60 дней.

До хранилища мы вращались, используя скрипт bash и команды aws cli, но я не могу найти способ сделать это в хранилище

Чтобы получить значение с помощью команды vault kv get, я получаю

====== Metadata ======
Key              Value
---              -----
created_time     2019-05-08T08:29:59.3579731Z
deletion_time    n/a
destroyed        false
version          2

==== Data ====
Key     Value
---     -----
data    map[cloud.aws.credentials.accessKey:AWS_KEY cloud.aws.credentials.secretKey:akjdfhadsFADSFadsfadksbfadsfADSF123123 cloud.aws.region.static:AWS_REGION app.base.url:http://localhost:7070/applicationname app.password:ThisIsASamplePassword app.user.name:this.is.a.sample]

Я пробовал команду patch, но она только перезаписывает все значение или создает новый ключ / значение.

Key              Value
---              -----
created_time     2019-05-08T08:33:57.5164447Z
deletion_time    n/a
destroyed        false
version          3
[ansible@ntt00app32 tmp]$ vault kv get secret/cms-service,devint
====== Metadata ======
Key              Value
---              -----
created_time     2019-05-08T08:33:57.5164447Z
deletion_time    n/a
destroyed        false
version          3

================= Data =================
Key                                Value
---                                -----
cloud.aws.credentials.accessKey    TEST_KEY
data                               map[cloud.aws.region.static:AWS_REGION app.base.url:http://localhost:7070/applicationname app.password:ThisIsASamplePassword app.user.name:this.is.a.sample cloud.aws.credentials.accessKey:AWS_KEY cloud.aws.credentials.secretKey:akjdfhadsFADSFadsfadksbfadsfADSF123123]```

any help in doing this will be much appreciated.

1 Ответ

0 голосов
/ 10 мая 2019

Отвечая на мой собственный вопрос.Обновление единственного значения в хранилище hashicorp, где секреты хранятся в виде объекта json, может быть легко выполнено с использованием cURL, JQ и некоторых сценариев bash.

Скрипт сырой вставлен ниже, который может быть изменен в соответствии с требованиями

#!/bin/bash

TOKEN="<TOKEN>"
VALUE_ONE="This"
VAULE_TWO="That"

# Retrieving secret
object=$(curl -s --header X-Vault-Token:$TOKEN http://127.0.0.1:8200/v1/secret/data/appname)

# Retrieving block that we are interested in (Optional)
new_object=$(echo $object | /usr/bin/jq -r '.data')

# Replacing First Value
replace_VALUE_ONE=$(echo $new_object | jq '.data."vaule.one" = '\"$VALUE_ONE\"'')

# Replacing Second Value
final=$(echo $replace_VALUE_ONE | jq '.data."vaule.two" = '\"$VAULE_TWO\"'')

# Updating the Vault
curl --header X-Vault-Token:$TOKEN  --request POST --data "$final"  http://127.0.0.1:8200/v1/secret/data/appname

# Retrieving the secret again 
curl -s --header X-Vault-Token:$TOKEN  http://127.0.0.1:8200/v1/secret/data/appname
...