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