- Home
- Difesa lato client
- Demo
- Fase 4 — Smantellamento
Fase 4 — Smantellamento
La Fase 4 rimuove tutti gli oggetti creati durante l’esercizio in ordine inverso rispetto alle dipendenze. Questa fase richiede una conferma esplicita da parte dell’operatore umano prima di qualsiasi operazione distruttiva.
Ordine di Smantellamento
Sezione intitolata “Ordine di Smantellamento”Rimuovere gli oggetti in ordine inverso rispetto alla creazione — eliminare prima gli oggetti che dipendono da altri oggetti:
- Domini mitigati — eliminare tutti i domini mitigati CSD creati nella Fase 3
- HTTPS Load Balancer (
${F5XC_LB_NAME}-https) — ridurre allo scheletro (preservare il certificato Let’s Encrypt); DELETE completo seNAMESPACE_CREATED=trueo su richiesta esplicita - HTTP Load Balancer (
${F5XC_LB_NAME}-http) — dipende dall’Origin Pool - Origin Pool — dipende dall’Healthcheck (se creato)
- Pulizia della zona DNS — lo scheletro dell’HTTPS LB mantiene i propri record A gestiti e i record ACME (comportamento desiderato — mantiene valido il certificato). I record gestiti dell’HTTP LB vengono eliminati automaticamente alla cancellazione. I record manuali in
default_rr_set_grouprichiedono una pulizia manuale tramitePUT - Healthcheck — solo se creato nella Fase 1 Passo 1
- Dominio protetto — eliminare la registrazione del dominio protetto CSD
- Namespace — solo se creato durante la Fase 1 Passo 0 (
NAMESPACE_CREATED=true)
Eliminare i Domini Mitigati
Sezione intitolata “Eliminare i Domini Mitigati”Se la Fase 3 è stata eseguita, eliminare tutti i domini mitigati prima di rimuovere gli oggetti di infrastruttura. La simulazione standard crea 6 domini mitigati:
for domain in cdn.jsdelivr.net esm.sh unpkg.com ga.jspm.io httpbin.org jsonplaceholder.typicode.com; do curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/$domain"doneVerificare: Elencare i domini mitigati per confermare che il conteggio sia 0 (o 1 — vedere la nota di seguito):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'HTTPS Load Balancer
Sezione intitolata “HTTPS Load Balancer”Il comportamento dello smantellamento dell’HTTPS LB dipende dall’eventuale creazione del namespace durante questa sessione demo (variabile NAMESPACE_CREATED dalla Fase 1 Passo 0):
NAMESPACE_CREATED=false(namespace preesistente) — ridurre allo stato di scheletro, preservando il certificato Let’s Encrypt per il riutilizzoNAMESPACE_CREATED=true(namespace creato durante la demo) — DELETE completo, poiché il namespace stesso verrà eliminato e il certificato non potrà essere preservato
Percorso A: Riduzione allo Scheletro (Namespace Preesistente)
Sezione intitolata “Percorso A: Riduzione allo Scheletro (Namespace Preesistente)”Quando il namespace è preesistente, ridurre l’HTTPS LB allo stato di scheletro — rimuovere il riferimento all’origin pool e la configurazione CSD preservando il binding del dominio, le impostazioni https_auto_cert e il certificato Let’s Encrypt. Ciò evita di avviare una nuova richiesta di certificato alla successiva esecuzione della demo (Let’s Encrypt impone un limite di 5 certificati duplicati per set di identificatori esatto ogni 7 giorni).
Passo 1 — GET della configurazione corrente dell’HTTPS LB:
HTTPS_LB_JSON=$(curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https")Passo 2 — Riduzione allo scheletro tramite jq e PUT:
echo "$HTTPS_LB_JSON" | jq '{ metadata: .metadata, spec: (.spec | del(.client_side_defense) | .disable_client_side_defense = {} | .default_route_pools = [])}' | curl -s -X PUT \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d @- \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq .Il filtro jq preserva l’intera spec (domini, https_auto_cert, advertise_on_public_default_vip e tutti i flag di funzionalità disabilitati) rimuovendo client_side_defense (sostituito con disable_client_side_defense: {}) e svuotando default_route_pools in un array vuoto. Il certificato e i binding DNS rimangono intatti.
Verificare che l’HTTPS LB sia ora uno scheletro:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \ | jq '{ name: .metadata.name, domains: .spec.domains, has_origin_pools: ((.spec.default_route_pools // []) | length > 0), has_csd: (.spec.client_side_defense != null), cert_state: .spec.cert_state }'Risultato atteso: has_origin_pools: false, has_csd: false, domains ancora popolato, cert_state invariato (es. CertificateValid).
Percorso B: DELETE Completo (Namespace Creato Durante la Demo)
Sezione intitolata “Percorso B: DELETE Completo (Namespace Creato Durante la Demo)”Quando il namespace è stato creato durante questa sessione demo, l’HTTPS LB deve essere eliminato completamente — la preservazione dello scheletro non è necessaria poiché il namespace stesso verrà rimosso alla fine dello smantellamento.
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https"Verificare: GET /api/config/namespaces/\{namespace\}/http_loadbalancers non deve contenere ${F5XC_LB_NAME}-https.
Eliminare l’HTTP Load Balancer
Sezione intitolata “Eliminare l’HTTP Load Balancer”Eliminare l’HTTP LB primario:
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http"Verificare: GET /api/config/namespaces/\{namespace\}/http_loadbalancers non deve contenere ${F5XC_LB_NAME}-http. Se l’oggetto compare ancora nell’elenco dopo che DELETE ha restituito 200, attendere 30 secondi e ricontrollare una volta. Se ancora presente dopo il secondo controllo, segnalare all’operatore — non procedere.
Eliminare l’Origin Pool
Sezione intitolata “Eliminare l’Origin Pool”curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx"Verificare: GET /api/config/namespaces/\{namespace\}/origin_pools non deve contenere il nome del pool. Se l’oggetto compare ancora nell’elenco dopo che DELETE ha restituito 200, attendere 30 secondi e ricontrollare una volta. Se ancora presente dopo il secondo controllo, segnalare all’operatore.
Eliminare l’Healthcheck
Sezione intitolata “Eliminare l’Healthcheck”curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks/xF5XC_HC_NAMEx"Verificare: GET /api/config/namespaces/\{namespace\}/healthchecks non deve contenere il nome dell’healthcheck. Se l’oggetto compare ancora nell’elenco dopo che DELETE ha restituito 200, attendere 30 secondi e ricontrollare una volta. Se ancora presente dopo il secondo controllo, segnalare all’operatore.
Eliminare il Dominio Protetto
Sezione intitolata “Eliminare il Dominio Protetto”Eliminare la registrazione del dominio protetto CSD. Il dominio protetto è con scope di tenant (non di namespace), ma è un oggetto di configurazione CSD legato a questo deployment — non un’infrastruttura condivisa come la zona DNS.
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/xF5XC_ROOT_DOMAINx"Verificare: Elencare i domini protetti per confermare che il dominio non sia più registrato:
curl -s -X GET \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \ | jq '.items // [] | map(.metadata.name)'Eliminare il Namespace (Condizionale)
Sezione intitolata “Eliminare il Namespace (Condizionale)”Questo passo viene eseguito solo se il namespace è stato creato durante la Fase 1 Passo 0 (NAMESPACE_CREATED=true). Se il namespace era preesistente (NAMESPACE_CREATED=false), saltare completamente questo passo — il namespace è un’infrastruttura condivisa che non deve essere eliminata.
if [ "$NAMESPACE_CREATED" = "true" ]; then curl -s -X POST \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ -H "Content-Type: application/json" \ -d '{"name": "xF5XC_NAMESPACEx"}' \ "xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx/cascade_delete" | jq .fiVerificare: Confermare che il namespace non esista più:
curl -s -o /dev/null -w '%\{http_code\}' \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx"Risultato atteso: 404 se NAMESPACE_CREATED=true, 200 se NAMESPACE_CREATED=false.
Riepilogo delle Evidenze della Fase 4
Sezione intitolata “Riepilogo delle Evidenze della Fase 4”| Oggetto | Stato Eliminazione | Stato Verifica |
|---|---|---|
| Domini Mitigati (6) | Tutti 200 (vuoto \{\}) o saltati se la Fase 3 non è stata eseguita | Conteggio 0 (o 1 fantasma) — PASS |
HTTPS Load Balancer (-https) | 200 (PUT scheletro) o 200 (DELETE completo se NAMESPACE_CREATED=true) | Scheletro verificato o non nell’elenco — PASS |
HTTP Load Balancer (-http) | 200 (vuoto \{\}) | Non nell’elenco — PASS |
| Origin Pool | 200 (vuoto \{\}) | Non nell’elenco — PASS |
| Healthcheck | 200 (vuoto \{\}) o saltato | Non nell’elenco — PASS |
| Dominio Protetto | 200 (vuoto \{\}) | Non nell’elenco — PASS |
| Zona DNS | NON eliminata (infrastruttura condivisa) | Zona ancora esistente — PASS |
| Namespace | 200 (eliminazione a cascata) se NAMESPACE_CREATED=true, altrimenti saltato | 404 se eliminato, 200 se preservato — PASS |
Smantellamento completato. Quando il namespace era preesistente (NAMESPACE_CREATED=false), tutti gli oggetti di deployment sono stati rimossi ad eccezione dello scheletro dell’HTTPS LB, che preserva il certificato Let’s Encrypt e il binding del dominio per la successiva esecuzione della demo. Quando il namespace è stato creato durante la demo (NAMESPACE_CREATED=true), tutti gli oggetti inclusi l’HTTPS LB e il namespace sono stati eliminati completamente. La zona DNS e i suoi record non gestiti rimangono intatti in entrambi i casi.