Files
ai-tax-agent/scripts/setup-vault.sh
harkon fdba81809f
Some checks failed
CI/CD Pipeline / Generate SBOM (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
CI/CD Pipeline / Policy Validation (push) Has been cancelled
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-firm-connectors) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-forms) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-hmrc) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ingestion) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-normalize-map) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ocr) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-indexer) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-reason) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rpa) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (ui-review) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (ui-review) (push) Has been cancelled
CI/CD Pipeline / Notifications (push) Has been cancelled
completed local setup with compose
2025-11-26 13:17:17 +00:00

107 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# Setup Vault OIDC Authentication
set -euo pipefail
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Load environment variables
if [ -f "infra/compose/.env" ]; then
source "infra/compose/.env"
fi
DOMAIN=${DOMAIN:-local.lan}
VAULT_ADDR="http://localhost:8200"
AUTHENTIK_URL="https://auth.${DOMAIN}"
echo -e "${BLUE}🔧 Setting up Vault OIDC Authentication...${NC}"
# Function to check if Vault is ready
wait_for_vault() {
echo -e "${YELLOW}⏳ Waiting for Vault to be ready...${NC}"
local max_attempts=30
local attempt=1
while [ $attempt -le $max_attempts ]; do
if docker exec -e VAULT_ADDR=http://127.0.0.1:8200 apa-vault vault status > /dev/null 2>&1; then
echo -e "${GREEN}✅ Vault is ready!${NC}"
return 0
fi
echo -n "."
sleep 2
attempt=$((attempt + 1))
done
echo -e "${RED}❌ Vault failed to start${NC}"
return 1
}
# Main setup function
setup_vault() {
# Check if we have the root token
if [ -z "${VAULT_DEV_ROOT_TOKEN_ID:-}" ]; then
echo -e "${RED}❌ VAULT_DEV_ROOT_TOKEN_ID not found in environment${NC}"
return 1
fi
# Check if we have the client secret
if [ -z "${AUTHENTIK_VAULT_CLIENT_SECRET:-}" ]; then
echo -e "${RED}❌ AUTHENTIK_VAULT_CLIENT_SECRET not found in environment${NC}"
return 1
fi
# Execute commands inside the Vault container
echo -e "${YELLOW}🔐 Configuring Vault OIDC...${NC}"
# Login
docker exec -e VAULT_ADDR=http://127.0.0.1:8200 apa-vault vault login "$VAULT_DEV_ROOT_TOKEN_ID" > /dev/null
# Enable OIDC auth method (ignore error if already enabled)
docker exec -e VAULT_ADDR=http://127.0.0.1:8200 apa-vault vault auth enable oidc 2>/dev/null || true
echo -e "${GREEN}✅ OIDC auth enabled${NC}"
# Configure OIDC
# Note: We use the internal Docker network URL for discovery if possible, or the public one if Vault can resolve it.
# Since Vault is in the backend network, it can reach 'apa-authentik-server'.
# However, the discovery URL usually needs to match what the user sees (issuer validation).
# Authentik's issuer is usually the slug URL.
# Using the public URL for discovery URL as per standard OIDC validation
# We might need to ensure Vault container can resolve auth.local.lan to the Traefik IP or Authentik IP.
# In our setup, auth.local.lan resolves to 127.0.0.1 on host. Inside container, it needs to resolve to the gateway or authentik.
# For now, let's try using the public URL. If it fails, we might need to add a host alias to the Vault container.
docker exec -e VAULT_ADDR=http://127.0.0.1:8200 apa-vault vault write auth/oidc/config \
oidc_discovery_url="$AUTHENTIK_URL/application/o/vault-oidc/" \
oidc_client_id="vault" \
oidc_client_secret="$AUTHENTIK_VAULT_CLIENT_SECRET" \
default_role="reader" \
bound_issuer="localhost" \
oidc_discovery_ca_pem=@/certs/local.crt
echo -e "${GREEN}✅ OIDC config written${NC}"
# Create reader role
docker exec -e VAULT_ADDR=http://127.0.0.1:8200 apa-vault vault write auth/oidc/role/reader \
bound_audiences="vault" \
allowed_redirect_uris="https://vault.${DOMAIN}/ui/vault/auth/oidc/oidc/callback,https://vault.${DOMAIN}/oidc/callback,http://localhost:8250/oidc/callback" \
oidc_scopes="openid,email,profile" \
user_claim="email" \
policies="default" \
ttl="1h"
echo -e "${GREEN}✅ OIDC role 'reader' created${NC}"
echo
echo -e "${GREEN}🎉 Vault OIDC setup complete!${NC}"
echo -e " Login at: ${BLUE}https://vault.${DOMAIN}/ui/vault/auth/oidc/oidc/callback${NC}"
}
# Run
wait_for_vault
setup_vault