50 lines
2.1 KiB
Bash
50 lines
2.1 KiB
Bash
#!/bin/bash
|
||
###################################################
|
||
# Обновление TTL токенов в hashicorp vault
|
||
# из списка. Список токенов в формате csv:
|
||
# Сергей Калинин, 2022
|
||
#--------------------------------------------------
|
||
# путь к записи;имя токена
|
||
# secret-some/service-1/secret-1;vault_token
|
||
# secret-other/service-2;token
|
||
###################################################
|
||
|
||
CUR_DATETIME=$(/usr/bin/date +'%d.%m.%Y_%H:%M:%S')
|
||
|
||
# Файл со списком токенов, по умолчанию /etc/vault/renew_tokens
|
||
TOKENS_LIST=${1:-/etc/vault/renew_tokens}
|
||
|
||
# Оставшееся время жизни токена в часах.
|
||
# Если разница между периодом обновления и TTL (временем жизни)
|
||
# меньше этого значения, то токен требует обновления
|
||
TIME_REMAIN=24
|
||
|
||
while read LINE; do
|
||
TOKEN_URL=$(echo $LINE | cut -d ";" -f1)
|
||
#echo "$TOKEN_URL"
|
||
TOKEN_NAME=$(echo $LINE | cut -d ";" -f2)
|
||
#echo "$TOKEN_NAME"
|
||
TOKEN=$(docker exec -t vault vault kv get -format=json ${TOKEN_URL} | jq -r ".data.data.${TOKEN_NAME}")
|
||
#echo "$TOKEN"
|
||
TOKEN_DATA=$(docker exec -t vault vault token lookup ${TOKEN})
|
||
#echo "$TOKEN_DATA"
|
||
TOKEN_RENEW_PERIOD=$(echo "${TOKEN_DATA}" | grep -E -i "^period\s+[0-9]+h" | grep -E -o "[0-9]+")
|
||
TOKEN_TTL=$(echo "${TOKEN_DATA}" | grep -E -i -o "^ttl\s+[0-9]+h" | grep -E -o "[0-9]+")
|
||
DELTA=$(expr ${TOKEN_RENEW_PERIOD} - ${TOKEN_TTL})
|
||
|
||
echo "${CUR_DATETIME}: Renew period of token ${TOKEN_URL}/${TOKEN_NAME} is a ${TOKEN_RENEW_PERIOD}, remain TTL: ${TOKEN_TTL}, delta: ${DELTA}"
|
||
|
||
RESULT=""
|
||
if [[ $TOKEN_TTL -lt $TIME_REMAIN ]]; then
|
||
RESULT=$(docker exec -t vault vault token renew $TOKEN)
|
||
else
|
||
echo "${CUR_DATETIME}: Token ${TOKEN_URL}/${TOKEN_NAME} renew not needed"
|
||
fi
|
||
|
||
if [[ $(echo "$RESULT" | grep -E "${TOKEN}") ]]; then
|
||
echo "${CUR_DATETIME}: Token ${TOKEN_URL}/${TOKEN_NAME} was renewed"
|
||
else
|
||
echo "${CUR_DATETIME}: ${RESULT}"
|
||
fi
|
||
done < $TOKENS_LIST
|