- ホーム
- クライアントサイド防御
- Demo
- フェーズ 4 — ティアダウン
フェーズ 4 — ティアダウン
フェーズ 4 では、演習中に作成されたすべてのオブジェクトを依存関係の逆順で削除します。このフェーズでは、破壊的な操作を行う前に人間による明示的な確認が必要です。
ティアダウン順序
Section titled “ティアダウン順序”オブジェクトを作成の逆順で削除します — 他のオブジェクトに依存するオブジェクトを先に削除します:
- 緩和済みドメイン — フェーズ 3 で作成したすべての CSD 緩和済みドメインを削除する
- HTTPS ロードバランサー (
${F5XC_LB_NAME}-https) — スケルトン状態に縮小する(Let’s Encrypt 証明書を保持)。NAMESPACE_CREATED=trueの場合または明示的なリクエストがある場合は完全 DELETE - HTTP ロードバランサー (
${F5XC_LB_NAME}-http) — オリジンプールに依存 - オリジンプール — ヘルスチェックに依存(作成された場合)
- DNS ゾーンのクリーンアップ — HTTPS LB スケルトンはその管理対象 A レコードと ACME レコードを保持します(これは意図された動作であり、証明書の有効性を維持します)。HTTP LB の管理対象レコードは削除時に自動クリーンアップされます。
default_rr_set_group内の手動レコードはPUTによる手動クリーンアップが必要です - ヘルスチェック — フェーズ 1 ステップ 1 で作成された場合のみ
- 保護済みドメイン — CSD 保護済みドメイン登録を削除する
- ネームスペース — フェーズ 1 ステップ 0 で作成された場合のみ (
NAMESPACE_CREATED=true)
緩和済みドメインの削除
Section titled “緩和済みドメインの削除”フェーズ 3 が実行された場合は、インフラストラクチャオブジェクトを削除する前にすべての緩和済みドメインを削除します。標準シミュレーションでは 6 つの緩和済みドメインが作成されます:
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"done確認: 緩和済みドメインを一覧表示して、件数が 0(または 1 — 以下の注記を参照)であることを確認します:
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'HTTPS ロードバランサー
Section titled “HTTPS ロードバランサー”HTTPS LB のティアダウン動作は、このデモセッション中にネームスペースが作成されたかどうか(フェーズ 1 ステップ 0 の NAMESPACE_CREATED 変数)によって異なります:
NAMESPACE_CREATED=false(既存のネームスペース)— スケルトン状態に縮小し、Let’s Encrypt 証明書を再利用のために保持するNAMESPACE_CREATED=true(デモ中に作成されたネームスペース)— 完全 DELETE。ネームスペース自体が削除されるため、証明書を保持できないため
パス A: スケルトンへの縮小(既存のネームスペース)
Section titled “パス A: スケルトンへの縮小(既存のネームスペース)”ネームスペースが既存の場合、HTTPS LB をスケルトン状態に縮小します — ドメインバインディング、https_auto_cert 設定、および Let’s Encrypt 証明書を保持しながら、オリジンプールの参照と CSD 設定を削除します。これにより、次回のデモ実行時に新しい証明書リクエストのトリガーを回避できます(Let’s Encrypt は 7 日間あたり同一識別子セットにつき 5 つの重複証明書という制限を設けています)。
ステップ 1 — 現在の HTTPS LB 設定を GET する:
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")ステップ 2 — jq でスケルトンに縮小して 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 .jq フィルターは spec 全体(ドメイン、https_auto_cert、advertise_on_public_default_vip、およびすべての無効化された機能フラグ)を保持しながら、client_side_defense を削除(disable_client_side_defense: {} に置き換え)し、default_route_pools を空の配列にクリアします。証明書と DNS バインディングはそのまま維持されます。
確認 — HTTPS LB がスケルトン状態であることを確認します:
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 }'期待される結果: has_origin_pools: false、has_csd: false、domains は引き続き設定済み、cert_state は変更なし(例: CertificateValid)。
パス B: 完全削除(デモ中に作成されたネームスペース)
Section titled “パス B: 完全削除(デモ中に作成されたネームスペース)”このデモセッション中にネームスペースが作成された場合、HTTPS LB は完全に削除する必要があります — ティアダウンの最後にネームスペース自体が削除されるため、スケルトンの保持は不要です。
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https"確認: GET /api/config/namespaces/\{namespace\}/http_loadbalancers に ${F5XC_LB_NAME}-https が含まれていないことを確認します。
HTTP ロードバランサーの削除
Section titled “HTTP ロードバランサーの削除”プライマリ HTTP LB を削除します:
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http"確認: GET /api/config/namespaces/\{namespace\}/http_loadbalancers に ${F5XC_LB_NAME}-http が含まれていないことを確認します。DELETE が 200 を返した後もオブジェクトがリストに表示される場合は、30 秒待ってから再確認してください。2 回目の確認後も表示される場合は、オペレーターに報告してください — 続行しないでください。
オリジンプールの削除
Section titled “オリジンプールの削除”curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx"確認: GET /api/config/namespaces/\{namespace\}/origin_pools にプール名が含まれていないことを確認します。DELETE が 200 を返した後もオブジェクトがリストに表示される場合は、30 秒待ってから再確認してください。2 回目の確認後も表示される場合は、オペレーターに報告してください。
ヘルスチェックの削除
Section titled “ヘルスチェックの削除”curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks/xF5XC_HC_NAMEx"確認: GET /api/config/namespaces/\{namespace\}/healthchecks にヘルスチェック名が含まれていないことを確認します。DELETE が 200 を返した後もオブジェクトがリストに表示される場合は、30 秒待ってから再確認してください。2 回目の確認後も表示される場合は、オペレーターに報告してください。
保護済みドメインの削除
Section titled “保護済みドメインの削除”CSD 保護済みドメイン登録を削除します。保護済みドメインはテナントスコープ(ネームスペーススコープではない)ですが、このデプロイに紐づく CSD 設定オブジェクトであり、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"確認: 保護済みドメインを一覧表示して、ドメインが登録されていないことを確認します:
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)'ネームスペースの削除(条件付き)
Section titled “ネームスペースの削除(条件付き)”このステップは、フェーズ 1 ステップ 0 でネームスペースが作成された場合(NAMESPACE_CREATED=true)にのみ実行されます。ネームスペースが既存のものである場合(NAMESPACE_CREATED=false)、このステップを完全にスキップしてください — ネームスペースは共有インフラストラクチャであり、削除してはなりません。
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 .fi確認: ネームスペースが存在しないことを確認します:
curl -s -o /dev/null -w '%\{http_code\}' \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx"期待される結果: NAMESPACE_CREATED=true の場合は 404、NAMESPACE_CREATED=false の場合は 200。
フェーズ 4 エビデンスサマリー
Section titled “フェーズ 4 エビデンスサマリー”| オブジェクト | 削除ステータス | 確認ステータス |
|---|---|---|
| 緩和済みドメイン (6) | すべて 200(空の \{\})、またはフェーズ 3 が実行されていない場合はスキップ | 件数 0(または 1 のファントム)— PASS |
HTTPS ロードバランサー (-https) | 200(スケルトン PUT)、または 200(NAMESPACE_CREATED=true の場合は完全 DELETE) | スケルトン確認済み、またはリストに存在しない — PASS |
HTTP ロードバランサー (-http) | 200(空の \{\}) | リストに存在しない — PASS |
| オリジンプール | 200(空の \{\}) | リストに存在しない — PASS |
| ヘルスチェック | 200(空の \{\})、またはスキップ | リストに存在しない — PASS |
| 保護済みドメイン | 200(空の \{\}) | リストに存在しない — PASS |
| DNS ゾーン | 削除しない(共有インフラ) | ゾーンが引き続き存在する — PASS |
| ネームスペース | NAMESPACE_CREATED=true の場合は 200(カスケード削除)、それ以外はスキップ | 削除済みの場合は 404、保持の場合は 200 — PASS |
ティアダウン完了。 ネームスペースが既存のものであった場合(NAMESPACE_CREATED=false)、次回のデモ実行に向けて Let’s Encrypt 証明書とドメインバインディングを保持する HTTPS LB スケルトンを除き、すべてのデプロイオブジェクトが削除されています。デモ中にネームスペースが作成された場合(NAMESPACE_CREATED=true)、HTTPS LB とネームスペースを含むすべてのオブジェクトが完全に削除されています。いずれの場合も、DNS ゾーンとその非管理対象レコードはそのまま維持されます。