feat(spire): add insecure_bootstrap and automatic join token generation for zero-friction agent enrollment
This commit is contained in:
parent
f967ba3480
commit
d1f728f834
@ -1,5 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Mitigation for Risk 2: Stale UNIX Socket on Unclean Shutdown
|
# Mitigation for Risk 2: Stale UNIX Socket on Unclean Shutdown
|
||||||
@ -8,10 +7,32 @@ rm -f /var/run/spire/agent.sock
|
|||||||
mkdir -p /opt/spire/data/agent
|
mkdir -p /opt/spire/data/agent
|
||||||
mkdir -p /var/run/spire
|
mkdir -p /var/run/spire
|
||||||
|
|
||||||
if [ ! -f /opt/spire/agent.conf ]; then
|
CONF_FILE="/opt/spire/agent.conf"
|
||||||
|
|
||||||
|
if [ ! -f "$CONF_FILE" ]; then
|
||||||
echo "Writing default SPIRE agent.conf..."
|
echo "Writing default SPIRE agent.conf..."
|
||||||
cp /etc/spire/templates/agent.conf /opt/spire/agent.conf
|
cp /etc/spire/templates/agent.conf "$CONF_FILE"
|
||||||
chmod 644 /opt/spire/agent.conf
|
chmod 644 "$CONF_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if this agent is enrolling for the first time
|
||||||
|
if [ ! -f /opt/spire/data/agent/svid.key ] && [ ! -f /opt/spire/data/agent/agent_svids.json ]; then
|
||||||
|
echo "[SPIRE Agent] Initial enrollment detected. Waiting for bootstrap join token..."
|
||||||
|
for i in $(seq 1 30); do
|
||||||
|
if [ -f /opt/spire/data/bootstrap_token ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -f /opt/spire/data/bootstrap_token ]; then
|
||||||
|
JOIN_TOKEN=$(cat /opt/spire/data/bootstrap_token | tr -d ' \r\n')
|
||||||
|
echo "[SPIRE Agent] Joining SPIRE cluster with token..."
|
||||||
|
rm -f /opt/spire/data/bootstrap_token
|
||||||
|
exec /usr/local/bin/spire-agent "$@" -join_token "$JOIN_TOKEN"
|
||||||
|
else
|
||||||
|
echo "[SPIRE Agent] Warning: No bootstrap_token found after 30s. Attempting standard startup..."
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec /usr/local/bin/spire-agent "$@"
|
exec /usr/local/bin/spire-agent "$@"
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
mkdir -p /opt/spire/data/server
|
mkdir -p /opt/spire/data/server
|
||||||
@ -10,4 +9,30 @@ if [ ! -f /opt/spire/server.conf ]; then
|
|||||||
chmod 644 /opt/spire/server.conf
|
chmod 644 /opt/spire/server.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec /usr/local/bin/spire-server "$@"
|
# Launch SPIRE Server in background to allow auto-bootstrap token generation
|
||||||
|
/usr/local/bin/spire-server "$@" &
|
||||||
|
SERVER_PID=$!
|
||||||
|
|
||||||
|
# Helper: Auto-generate bootstrap join token for local agent on initial enrollment
|
||||||
|
(
|
||||||
|
SOCKET="/opt/spire/data/server/api.sock"
|
||||||
|
for i in $(seq 1 30); do
|
||||||
|
if [ -S "$SOCKET" ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -S "$SOCKET" ] && [ ! -f /opt/spire/data/agent/svid.key ]; then
|
||||||
|
echo "[SPIRE Server] Generating auto-bootstrap join token for local agent..."
|
||||||
|
TOKEN_OUTPUT=$(/usr/local/bin/spire-server token generate -spiffeID spiffe://system.local/agent -socketPath "$SOCKET" 2>/dev/null || true)
|
||||||
|
TOKEN=$(echo "$TOKEN_OUTPUT" | grep -i "token:" | awk '{print $2}')
|
||||||
|
if [ -n "$TOKEN" ]; then
|
||||||
|
echo "$TOKEN" > /opt/spire/data/bootstrap_token
|
||||||
|
chmod 600 /opt/spire/data/bootstrap_token
|
||||||
|
echo "[SPIRE Server] Auto-bootstrap token ready."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
) &
|
||||||
|
|
||||||
|
wait "$SERVER_PID"
|
||||||
|
|||||||
@ -22,6 +22,9 @@ agent {
|
|||||||
|
|
||||||
# Must match the SPIRE Server's trust_domain.
|
# Must match the SPIRE Server's trust_domain.
|
||||||
trust_domain = "system.local"
|
trust_domain = "system.local"
|
||||||
|
|
||||||
|
# Automatically fetch trust bundle from server on first bootstrap
|
||||||
|
insecure_bootstrap = true
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
|
|||||||
@ -18,6 +18,9 @@ server {
|
|||||||
# Directory where SPIRE server persists runtime data, datastore, and keys.
|
# Directory where SPIRE server persists runtime data, datastore, and keys.
|
||||||
data_dir = "/opt/spire/data/server"
|
data_dir = "/opt/spire/data/server"
|
||||||
|
|
||||||
|
# Path to bind the SPIRE Server API admin socket
|
||||||
|
socket_path = "/opt/spire/data/server/api.sock"
|
||||||
|
|
||||||
# Logging verbosity: DEBUG, INFO, WARN, ERROR
|
# Logging verbosity: DEBUG, INFO, WARN, ERROR
|
||||||
log_level = "INFO"
|
log_level = "INFO"
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user