vault-init.sh 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #!/bin/sh
  2. test $VAULT_HOST || VAULT_HOST=localhost
  3. test $VAULT_PORT || VAULT_PORT=8200
  4. VAULT_ADDRESS="http://$VAULT_HOST:$VAULT_PORT"
  5. test $TARGET_DIR || TARGET_DIR=/scripts
  6. test $VAULT_KEYS_FILE || VAULT_KEYS_FILE=$TARGET_DIR/private_keys
  7. TOKENS_LIST_FILE=$TARGET_DIR/token.list
  8. test -d $TARGET_DIR || mkdir -p $TARGET_DIR
  9. function show_usage() {
  10. echo "Usage: ${0##*/} --(init|unseal|authorise|create-policies|create-tokens|create-secrets)"
  11. echo -e "\t Example: ${0##*/} --init"
  12. echo -e "\t Example: ${0##*/} --unseal"
  13. echo -e "\t Example: ${0##*/} --authorise"
  14. echo -e "\t Example: ${0##*/} --create-policies"
  15. echo -e "\t Example: ${0##*/} --create-tokens"
  16. echo -e "\t Example: ${0##*/} --create-secrets"
  17. }
  18. function show_error() {
  19. local message="$1"; local funcname="$2"; local log_date=`date '+%Y/%m/%d:%H:%M:%S %Z'`
  20. echo -e "[ERROR.$funcname $log_date] $message" >&2
  21. err=1
  22. }
  23. function show_notice() {
  24. local message="$1"; local funcname="$2"; local log_date=`date '+%Y/%m/%d:%H:%M:%S %Z'`
  25. echo -e "\n[NOTICE.$funcname $log_date] $message"
  26. }
  27. function vault_init() {
  28. local err=0;
  29. show_notice "Vault init and save keys to file $VAULT_KEYS_FILE started."
  30. vault operator init --address=$VAULT_ADDRESS | grep -E 'Initial Root Token:|Unseal Key .:' > $VAULT_KEYS_FILE
  31. return $err;
  32. }
  33. function vault_unseal() {
  34. local err=0;
  35. test -f $VAULT_KEYS_FILE || { show_error "Vault keys file: $VAULT_KEYS_FILE doesn't exist!" "$FUNCNAME"; return 1; }
  36. show_notice "Vault unseal started."
  37. list='1 2 3'
  38. for number in $list; do
  39. vault_unseal_key=`grep "Unseal Key $number" $VAULT_KEYS_FILE | awk -F':' '{print $2}' | tr '\n' ' ' | sed "s/ //g"`
  40. vault operator unseal -address=$VAULT_ADDRESS $vault_unseal_key
  41. echo
  42. done
  43. return $err;
  44. }
  45. function vault_authorise() {
  46. local err=0;
  47. test -f $VAULT_KEYS_FILE || { show_error "Vault keys file: $VAULT_KEYS_FILE doesn't exist!" "$FUNCNAME"; return 1; }
  48. show_notice "Vault authorise with root token started."
  49. vault_root_token=`grep 'Root Token' $VAULT_KEYS_FILE | awk -F':' '{print $2}' | tr '\n' ' ' | sed "s/ //g"`
  50. vault login --address=$VAULT_ADDRESS $vault_root_token
  51. }
  52. function vault_create_policies() {
  53. local err=0;
  54. test -d $TARGET_DIR/policies || { show_error "Dir: $TARGET_DIR/policies doesn't exist!" "$FUNCNAME"; return 1; }
  55. show_notice "Create Vault policies started."
  56. for policy in `ls -1 $TARGET_DIR/policies/ | grep '.hcl' | sed "s/\.hcl//g"`; do
  57. vault policy write --address=$VAULT_ADDRESS $policy $TARGET_DIR/policies/${policy}.hcl
  58. done
  59. return $err;
  60. }
  61. function vault_create_tokens() {
  62. local err=0;
  63. test -f $token_list || { show_error "Tokens file: $token_list doesn't exist!" "$FUNCNAME"; return 1; }
  64. show_notice "Create Vault tokens started."
  65. for token in `cat $TOKENS_LIST_FILE | awk '{print $1}'`; do
  66. show_notice "Create token: $token"
  67. token_policy=`grep $token $TOKENS_LIST_FILE | awk '{print $2}' | sed "s/\,/ -policy=/g"`
  68. vault token create -id=$token -policy=$token_policy --address=$VAULT_ADDRESS
  69. echo
  70. done
  71. return $err;
  72. }
  73. function vault_create_secrets() {
  74. local err=0;
  75. test -d $TARGET_DIR/secrets || { show_error "Dir: $TARGET_DIR/secrets doesn't exist!" "$FUNCNAME"; return 1; }
  76. show_notice "Create Vault secrets started."
  77. for secret in `find $TARGET_DIR/secrets/ -iname '*.json' -type f ! -size 0 -print | sed "s!$TARGET_DIR/secrets/!!g" | sed "s/\.json//g"`; do
  78. vault write --address=$VAULT_ADDRESS secret/$secret @$TARGET_DIR/secrets/${secret}.json
  79. done
  80. return $err;
  81. }
  82. function vault_check() {
  83. local err=0; local check=0;
  84. one_try_timeout=1
  85. seconds_timeout=60
  86. seconds=`date +%s`
  87. endTime=$(( $(date +%s) + $seconds_timeout ))
  88. while [ $seconds -lt $endTime ]; do
  89. sleep $one_try_timeout
  90. seconds=`date +%s`
  91. show_notice "Seconds until timeout: $(( $(date +%s) - $endTime ))"
  92. nc -vz $VAULT_HOST $VAULT_PORT >/dev/null && \
  93. { seconds=$(($endTime+1)); show_notice "Vault is available."; check=1; }
  94. done
  95. test $seconds -gt $endTime -a $check -ne 1 && \
  96. { show_error "Something go wrong, during $seconds_timeout seconds vault doesn't available on $VAULT_ADDRESS" "$FUNCNAME"; return 1; }
  97. return $err;
  98. }
  99. function vault_check_init() {
  100. local err=0;
  101. show_notice "Starting check that Vault is initialised."
  102. vault operator init --address=$VAULT_ADDRESS -status
  103. result=$?
  104. if [ "${result}" -eq "2" ] ; then
  105. show_notice "Vault doesn't initialised, executing init."
  106. vault_init
  107. else
  108. show_notice "All OK Vault aleready initialised."
  109. fi
  110. return $err;
  111. }
  112. function vault_check_unseal() {
  113. local err=0;
  114. show_notice "Starting check that Vault is unsealed."
  115. vault status --address=$VAULT_ADDRESS
  116. result=$?
  117. if [ "${result}" -eq "2" ] ; then
  118. show_notice "Vault sealed, executing unseal."
  119. vault_unseal
  120. else
  121. show_notice "All OK Vault aleready unsealed."
  122. fi
  123. return $err;
  124. }
  125. #Check script usage
  126. test $# -eq 1 || { show_error "Wrong script usage!" ""; show_usage; exit 1; }
  127. test x"$1" == x"" && show_usage
  128. test x"$1" = x"--init" && {
  129. show_notice "Vault init started."
  130. vault_check && \
  131. vault_check_init && \
  132. vault_check_unseal && \
  133. sleep 5 && vault_authorise && \
  134. vault_create_policies && \
  135. vault_create_tokens && \
  136. vault_create_secrets
  137. echo "Script ended with value: $?"
  138. }
  139. test x"$1" = x"--unseal" && {
  140. vault_unseal
  141. }
  142. test x"$1" = x"--authorise" && {
  143. vault_authorise
  144. }
  145. test x"$1" = x"--create-policies" && {
  146. vault_create_policies
  147. }
  148. test x"$1" = x"--create-tokens" && {
  149. vault_create_tokens
  150. }
  151. test x"$1" = x"--create-secrets" && {
  152. vault_create_secrets
  153. }