Initial release
parent
1156246ca1
commit
c0ad5382c1
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
CUR_DATETIME=$(/usr/bin/date +'%d%m%Y_%H%M%S')
|
||||||
|
/usr/bin/docker exec -t consul consul snapshot save /consul/backup/${CUR_DATETIME}_backup.snap
|
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/bash
|
||||||
|
######################################################################################
|
||||||
|
# Получение токена в hashicorp vault и запись его
|
||||||
|
# в переменную в gitlab в соответствующий проект
|
||||||
|
# Сергей Калинин, 2022
|
||||||
|
######################################################################################
|
||||||
|
# Формат входного файла:
|
||||||
|
# -----------------------------------------------------------------------------------
|
||||||
|
# Идентификатор_проекта_в_gitlab;Имя_переменной;Политика_в_vault;Время_жизни_токена
|
||||||
|
# 12;VAULT_TOKEN;some_policy_ro;24
|
||||||
|
# 33;TOKEN_VAULT_SOME;other_policy_rw;72
|
||||||
|
#
|
||||||
|
######################################################################################
|
||||||
|
|
||||||
|
TOKENS_LIST=${1:-"/etc/vault/create_tokens"}
|
||||||
|
GITLAB_API_URL=${GITLAB_API_URL:-"https://gitlab/api/v4"}
|
||||||
|
GITLAB_API_TOKEN=$(docker exec -t vault vault kv get -format=json secret/gitlab | jq -r ".data.data.token")
|
||||||
|
|
||||||
|
CUR_DATETIME=$(/usr/bin/date +'%d.%m.%Y_%H:%M:%S')
|
||||||
|
|
||||||
|
while read LINE; do
|
||||||
|
GITLAB_PROJECT_ID=$(echo $LINE | cut -d ";" -f1)
|
||||||
|
# echo "$GITLAB_PROJECT_ID"
|
||||||
|
TOKEN_VARIABLE_NAME=$(echo $LINE | cut -d ";" -f2)
|
||||||
|
# echo "$TOKEN_VARIABLE_NAME"
|
||||||
|
VAULT_POLICY_NAME=$(echo $LINE | cut -d ";" -f3)
|
||||||
|
# echo "$VAULT_POLICY_NAME"
|
||||||
|
VAULT_TOKEN_TTL=$(echo $LINE | cut -d ";" -f4)
|
||||||
|
# echo "$VAULT_TOKEN_TTL"
|
||||||
|
GITLAB_PROJECT_URL="${GITLAB_API_URL}/projects/${GITLAB_PROJECT_ID}/variables"
|
||||||
|
# echo "$GITLAB_PROJECT_URL"
|
||||||
|
|
||||||
|
# Получаем существующий токен из гитлаба
|
||||||
|
# echo "curl -s --request GET --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" "${GITLAB_PROJECT_URL}/${TOKEN_VARIABLE_NAME}" | jq -r .value"
|
||||||
|
CURRENT_TOKEN=$(curl -s --request GET --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" "${GITLAB_PROJECT_URL}/${TOKEN_VARIABLE_NAME}" | jq -r .value )
|
||||||
|
# echo "$CURRENT_TOKEN"
|
||||||
|
|
||||||
|
TOKEN_DATA=$(docker exec -t vault vault token lookup ${CURRENT_TOKEN})
|
||||||
|
#echo "$TOKEN_DATA"
|
||||||
|
if [[ -n $(echo "$TOKEN_DATA" | grep "Error looking up token") ]]; then
|
||||||
|
# генерим токен для требуемой политики.
|
||||||
|
TOKEN=$(docker exec -t vault vault token create -policy=${VAULT_POLICY_NAME} -ttl=${VAULT_TOKEN_TTL}h -explicit-max-ttl=${VAULT_TOKEN_TTL}h -format=json | jq -r ".auth.client_token")
|
||||||
|
|
||||||
|
# обновляем переменную в проекте в гитлаб
|
||||||
|
RESULT=$(curl -s --request PUT --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" "${GITLAB_PROJECT_URL}/${TOKEN_VARIABLE_NAME}" --form "value=${TOKEN}")
|
||||||
|
# Если переменной нет, то она будет создана
|
||||||
|
if (echo ${RESULT} | grep -i "variable not found"); then
|
||||||
|
RESULT=$(curl -s --request POST --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" "${GITLAB_PROJECT_URL}" --form "key=${TOKEN_VARIABLE_NAME}" --form "value=${TOKEN}")
|
||||||
|
|
||||||
|
fi
|
||||||
|
# Меняем токен на * в выводе (для маскировки)
|
||||||
|
RESULT=$(echo "$RESULT" | sed -e 's/value\":\"[a-zA-Z0-9.]*\"/\"value\":\"******\"/g')
|
||||||
|
echo "$CUR_DATETIME: Token for \"$GITLAB_PROJECT_URL $TOKEN_VARIABLE_NAME\" was recreated"
|
||||||
|
echo "$CUR_DATETIME: Gitlab return a result: $RESULT"
|
||||||
|
else
|
||||||
|
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]+")
|
||||||
|
echo "$CUR_DATETIME: Token for \"$GITLAB_PROJECT_URL $TOKEN_VARIABLE_NAME\" just alive with TOKEN_TTL: $TOKEN_TTL"
|
||||||
|
fi
|
||||||
|
done < $TOKENS_LIST
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/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
|
Loading…
Reference in New Issue