vault/scripts/renew_vault_token.sh

50 lines
2.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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