vault: run oidc config with sh

This commit is contained in:
Brad Stein 2026-01-14 02:28:38 -03:00
parent 55234f8536
commit c3541b72c3
2 changed files with 34 additions and 41 deletions

View File

@ -24,7 +24,7 @@ spec:
image: hashicorp/vault:1.17.6 image: hashicorp/vault:1.17.6
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
command: command:
- bash - sh
- /scripts/vault_oidc_configure.sh - /scripts/vault_oidc_configure.sh
env: env:
- name: VAULT_ADDR - name: VAULT_ADDR

View File

@ -1,20 +1,20 @@
#!/usr/bin/env bash #!/usr/bin/env sh
set -euo pipefail set -eu
log() { echo "[vault-oidc] $*"; } log() { echo "[vault-oidc] $*"; }
status_json="$(vault status -format=json || true)" status_json="$(vault status -format=json || true)"
if [[ -z "${status_json}" ]]; then if [ -z "${status_json}" ]; then
log "vault status failed; check VAULT_ADDR and VAULT_TOKEN" log "vault status failed; check VAULT_ADDR and VAULT_TOKEN"
exit 1 exit 1
fi fi
if ! grep -q '"initialized":true' <<<"${status_json}"; then if ! printf '%s' "${status_json}" | grep -q '"initialized":[[:space:]]*true'; then
log "vault not initialized; skipping" log "vault not initialized; skipping"
exit 0 exit 0
fi fi
if grep -q '"sealed":true' <<<"${status_json}"; then if printf '%s' "${status_json}" | grep -q '"sealed":[[:space:]]*true'; then
log "vault sealed; skipping" log "vault sealed; skipping"
exit 0 exit 0
fi fi
@ -53,59 +53,52 @@ vault write auth/oidc/config \
vault auth tune -listing-visibility=unauth oidc >/dev/null vault auth tune -listing-visibility=unauth oidc >/dev/null
build_bound_claims() { build_bound_claims() {
local claim="$1" claim="$1"
local groups="$2" groups="$2"
local json
local first=1
json="{\"${claim}\":[" json="{\"${claim}\":["
IFS=',' read -r -a group_items <<<"${groups}" first=1
for item in "${group_items[@]}"; do old_ifs=$IFS
item="${item#"${item%%[![:space:]]*}"}" IFS=,
item="${item%"${item##*[![:space:]]}"}" for item in $groups; do
if [[ -z "${item}" ]]; then item="$(printf '%s' "$item" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
if [ -z "${item}" ]; then
continue continue
fi fi
if [[ ${first} -eq 0 ]]; then if [ "${first}" -eq 0 ]; then
json+="," json="${json},"
fi fi
json+="\"${item}\"" json="${json}\"${item}\""
first=0 first=0
done done
json+="]}" IFS=$old_ifs
json="${json}]}"
printf '%s' "${json}" printf '%s' "${json}"
} }
configure_role() { configure_role() {
local role_name="$1" role_name="$1"
local role_groups="$2" role_groups="$2"
local role_policies="$3" role_policies="$3"
if [[ -z "${role_name}" || -z "${role_groups}" || -z "${role_policies}" ]]; then if [ -z "${role_name}" ] || [ -z "${role_groups}" ] || [ -z "${role_policies}" ]; then
log "skipping role ${role_name} (missing groups or policies)" log "skipping role ${role_name} (missing groups or policies)"
return return
fi fi
local claims
claims="$(build_bound_claims "${groups_claim}" "${role_groups}")" claims="$(build_bound_claims "${groups_claim}" "${role_groups}")"
local role_args=( role_args="user_claim=${user_claim} oidc_scopes=${scopes} token_policies=${role_policies} bound_audiences=${bound_audiences} bound_claims=${claims} bound_claims_type=${bound_claims_type}"
"user_claim=${user_claim}" if [ -n "${groups_claim}" ]; then
"oidc_scopes=${scopes}" role_args="${role_args} groups_claim=${groups_claim}"
"token_policies=${role_policies}"
"bound_audiences=${bound_audiences}"
"bound_claims=${claims}"
"bound_claims_type=${bound_claims_type}"
)
if [[ -n "${groups_claim}" ]]; then
role_args+=("groups_claim=${groups_claim}")
fi fi
IFS=',' read -r -a redirect_items <<<"${redirect_uris}" old_ifs=$IFS
for uri in "${redirect_items[@]}"; do IFS=,
trimmed="${uri#"${uri%%[![:space:]]*}"}" for uri in $redirect_uris; do
trimmed="${trimmed%"${trimmed##*[![:space:]]}"}" trimmed="$(printf '%s' "$uri" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
if [[ -n "${trimmed}" ]]; then if [ -n "${trimmed}" ]; then
role_args+=("allowed_redirect_uris=${trimmed}") role_args="${role_args} allowed_redirect_uris=${trimmed}"
fi fi
done done
IFS=$old_ifs
log "configuring oidc role ${role_name}" log "configuring oidc role ${role_name}"
vault write "auth/oidc/role/${role_name}" "${role_args[@]}" vault write "auth/oidc/role/${role_name}" ${role_args}
} }
configure_role "admin" "${admin_group}" "${admin_policies}" configure_role "admin" "${admin_group}" "${admin_policies}"