mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-10-04 19:32:12 +00:00
fix: paginate batch-get-secret-value in fetch-config (secrets dropped past page 1) (#24)
fetch-config materialized only the FIRST page of Secrets Manager results: the AWS CLI does NOT auto-paginate batch-get-secret-value (the script's comment claiming it does was wrong; --no-cli-pager only disables the output pager, not API pagination). With 28 secret shells under open-swe-<env>/ the first page returned ~10 items, stranding the rest on later pages. Required secrets that landed past page 1 (DASHBOARD_JWT_SECRET, TOKEN_ENCRYPTION_KEY, LANGSMITH_API_KEY_PROD) were silently dropped, tripping the FAIL-FAST 'missing required var' guard and crash-looping open-swe.service. Follow NextToken across pages (new batch_get_secrets_tsv helper). Verified against the live open-swe-dev secrets: now loads all 5 populated secrets (was 2). Same per-record base64 / exact-prefix / accept_var / emit_var hardening — only the page loop is new.
This commit is contained in:
parent
cdcb6625b9
commit
a2877d46ff
1 changed files with 26 additions and 9 deletions
|
|
@ -149,7 +149,31 @@ done < <(jq -r '.Parameters[] | (.Name|@base64) + "\t" + (.Value|@base64)' <<<"$
|
||||||
log "loaded ${ssm_count} config param(s) from SSM"
|
log "loaded ${ssm_count} config param(s) from SSM"
|
||||||
|
|
||||||
# 2) Secrets Manager (sensitive values). batch-get-secret-value filters by name
|
# 2) Secrets Manager (sensitive values). batch-get-secret-value filters by name
|
||||||
# prefix and auto-paginates; one secret per env var, SecretString = the value.
|
# prefix; one secret per env var, SecretString = the value. The AWS CLI does NOT
|
||||||
|
# auto-paginate this operation (unlike list/get-parameters-by-path), and a single
|
||||||
|
# response caps well under the full set (~10 items/page) — so we MUST follow
|
||||||
|
# NextToken ourselves or secrets on later pages are silently dropped (they then
|
||||||
|
# surface as FAIL-FAST "missing required var"). `--no-cli-pager` only disables the
|
||||||
|
# OUTPUT pager, not API pagination. Each page's records are base64(name<TAB>value).
|
||||||
|
batch_get_secrets_tsv() {
|
||||||
|
local token="" page
|
||||||
|
while :; do
|
||||||
|
if [ -n "$token" ]; then
|
||||||
|
page="$(aws secretsmanager batch-get-secret-value \
|
||||||
|
--filters "Key=name,Values=${SECRET_PREFIX}" \
|
||||||
|
--region "$REGION" --no-cli-pager --output json --next-token "$token")"
|
||||||
|
else
|
||||||
|
page="$(aws secretsmanager batch-get-secret-value \
|
||||||
|
--filters "Key=name,Values=${SECRET_PREFIX}" \
|
||||||
|
--region "$REGION" --no-cli-pager --output json)"
|
||||||
|
fi
|
||||||
|
printf '%s' "$page" \
|
||||||
|
| jq -r '.SecretValues[] | select(.SecretString != null) | (.Name|@base64) + "\t" + (.SecretString|@base64)'
|
||||||
|
token="$(printf '%s' "$page" | jq -r '.NextToken // empty')"
|
||||||
|
[ -n "$token" ] || break
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
log "reading secrets under ${SECRET_PREFIX} ..."
|
log "reading secrets under ${SECRET_PREFIX} ..."
|
||||||
secret_count=0
|
secret_count=0
|
||||||
while IFS=$'\t' read -r nb vb; do
|
while IFS=$'\t' read -r nb vb; do
|
||||||
|
|
@ -164,14 +188,7 @@ while IFS=$'\t' read -r nb vb; do
|
||||||
[ -n "$key" ] || continue
|
[ -n "$key" ] || continue
|
||||||
accept_var "$key" "$value" "Secrets"
|
accept_var "$key" "$value" "Secrets"
|
||||||
secret_count=$((secret_count + 1))
|
secret_count=$((secret_count + 1))
|
||||||
done < <(
|
done < <(batch_get_secrets_tsv)
|
||||||
aws secretsmanager batch-get-secret-value \
|
|
||||||
--filters "Key=name,Values=${SECRET_PREFIX}" \
|
|
||||||
--region "$REGION" \
|
|
||||||
--no-cli-pager \
|
|
||||||
--output json \
|
|
||||||
| jq -r '.SecretValues[] | select(.SecretString != null) | (.Name|@base64) + "\t" + (.SecretString|@base64)'
|
|
||||||
)
|
|
||||||
log "loaded ${secret_count} secret(s) from Secrets Manager"
|
log "loaded ${secret_count} secret(s) from Secrets Manager"
|
||||||
|
|
||||||
# --- Sea Haven DEFAULT_REPO_OWNER hard pin -----------------------------------
|
# --- Sea Haven DEFAULT_REPO_OWNER hard pin -----------------------------------
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue