Skip to content

Tötänleýin önümçilik kesilmegi, syzdyrylan API açarlary ýa-da pozulan bulut infrastrukturasy

Her bir programma üpjünçiligi inereneri, ulgam dolandyryjysy we tehniki uzakdaky işçi ahyrsoňy buýruk göz öňünde tutulanda aşgazany taşlaýan pursat bilen ýüzbe-ýüz bolýar localhost ýa-da staging garşy ýerine ýetirýär production: açylmadyk DELETE a WHERE madda, a DROP TABLE ýa-da terraform destroy, a git push --force esasy şahany ýa-da janly AWS ýa-da Stripe gizlin açarlaryny öz içine alýan köpçülikleýin borçnama. Karýerany gutarýan maglumatlar betbagtçylygyndan 15 minutlyk kiçijik baglanyşygy aýyrýan zat, derrew eliňizi duruzmak, ammar bloklary ýazylmazdan ozal ýazuw traffigini doňdurmak we dogry dikeldiş protokolyny ýerine ýetirmek.

Indi et

  1. ** Elleriňizi doňduryň we howlukmaç "düzeltmek" buýruklaryny işletmäň, maglumat bazasynyň serwerini täzeden açyň ýa-da terminal penjiräňizi ýapyň. .git/logs reflogda takyk amal möhletleri, SHA hasşleri we zyýany yzyna gaýtarmak üçin zerur çeşme ID-leri bar. Terminal aýlawyňyzy ilki bilen ygtybarly tekst faýlyna göçüriň.
  2. ** Toparyňyzdaky wakada “Slack / Teams” kanalynda 2 minutyň içinde “Severity-1” (SEV-1) wakasyny yglan ediň. Çagyryş maglumatlar bazasynyň dolandyryjysy (DBA) ýa-da Saýt ygtybarlylygy inereneri (SRE) derrew sahypa goýuň.
  3. ** API açaryny syzdyran bolsaňyz, .env köpçülige açyk GitHub reposyna faýl ýa-da bulut syry, üpjün edijiniň dolandyryş panelindäki açary FIRST (Git taryhyny täzeden ýazmazdan ozal) açyň. git push. Faýly ikinji gezek pozmak ýa-da güýç bilen basmak, açary klonlaşdyran hüjümçini * saklamaz.
  4. ** Eger tötänleýin ylgasaňyz DELETE, UPDATE, ýa-da DROP Önümçilik maglumatlar bazasynda programmany derrew ýazyň. ** Web programmasyny Bejeriş tertibine salyň ýa-da programma ulanyjysynyň ýazuw rugsatlaryny ýatyryň, şonuň üçin täze gelýän geleşikler boşadylmadyk öli toplary ýazmaz ýa-da Wagtlaýyn dikeldişi (PITR) kynlaşdyrar.
  5. ** Hiç haçan işleme VACUUM, OPTIMIZE TABLE, ýa-da git gc --prune=now tötänleýin öçürilenden soň. ** Iki baglanyşyk bazasy (PostgreSQL MVCC, MySQL InnoDB) we Git öçürilen hatarlary we ýetimler zibil ýygnamak / wakuum geçýän sahypalary fiziki taýdan yzyna alýança diskde saklanýar.
  6. ** Eger a terraform destroy ýa-da terminalyňyzda buludy öçürmek skripti işleýär, basyň Ctrl + C BIR (iki gezek däl) ýa-da IAM sessiýa nyşanyny öldüriň. ** Basyş Ctrl + C bir gezek ajaýyp ýagdaý ýüze çykýar, şonuň üçin Terraform bölekleýin tygşytlaýar .tfstate bar bolan zatlardan; basmak Ctrl + C ýerli döwlet faýlyňyzy zaýalap ýa-da ýitirip biljek masgaraçylykly aborty iki gezek mejbur edýär.

Danger

** Gitde bir syr açandan soň # 1 ölümli ýalňyşlyk: ** Ylgaýandygyňyz üçin hiç wagt özüňizi howpsuz hasaplamaň git rm .env && git commit -m "remove secret" && git push. Gitdäki her bir taryhy borçnama, grafikada hemişelik okalýar, hatda şahany täzeden ýazsaňyzam git push --force, ýetimler SHA-ny GitHub API we köpçülikleýin arhiw gözlegçileri arkaly elýeterli edýär (GHArchive). ** Uzakdaky ammara hatda 1 sekunt hem degýän islendik syr, emitent prowaýderinde derrew 100 göterim ylalaşylan we ýatyrylan / aýlanan ýaly kabul edilmelidir. **

Gyssagly triage iş tertibi: maglumat bazasynyň gaçmagy, git güýç bilen basmak ýa-da gizlin syzmak

Ilkinji 5 minutlyk tehniki gaplamany ugrukdyrmak üçin bu karar agajyna eýeriň.

flowchart TD
    A["Production Engineering Emergency"] --> B{"Haýsy şowsuzlyk ýüze çykdy?"}
    B -->|"Önümde tötänleýin SQL DROP / DELETE / UPDATE"| C["Programma ýazgylaryny / hyzmat ediş tertibini duruzyň; WAKUUM işletmäň"]
    B -->|"Leaked API Key / .env / Private Key in Git"| D["Bulut dolandyryş panelinde syry ýatyryň we 60 sekundyň içinde aýlaň"]
    B -->|"Tötänleýin git iteklemek - güýç / Öçürilen şahamça"| E["Run git reflog Locally; Copy Last Good Commit SHA"]
    B -->|"Accidental terraform destroy / Deleted S3 or VM"| F["Kill IAM Session or Press Ctrl+C Once; Preserve .tfstate"]
    C --> G["Record Exact UTC Timestamp; Trigger Cloud PITR Clone or Binlog Flashback"]
    D --> H["Audit CloudTrail / Access Logs for Unauthorized Spin-Ups; Scrub Repo with git-filter-repo"]
    E --> I["Query GitHub Events / Reflog & Restore Branch with git push --force-with-lease"]
    F --> J["Check S3 Versioning Delete Markers, EBS Snapshots, or Cloud Recycle Bin"]

Part 1: Accidental production database DROP, TRUNCATE, ýa-da DELETE without WHERE

When a destructive SQL query hits a live production database, the exact recovery mechanism depends on your database engine (PostgreSQL, MySQL/MariaDB, SQL Server, MongoDB, or DynamoDB) and whether the statement was a DML (DELETE / UPDATE) or DDL (DROP TABLE / TRUNCATE) operation.

Step 1: Record the exact UTC timestamp down to the second

Before touching any backup console, write down the exact current UTC time (date -u in Linux/macOS terminal, or SELECT NOW(); inside the SQL prompt) and estimate the exact second just before your destructive query started executing. Point-In-Time Recovery (PITR) works by replaying the database's Write-Ahead Log (WAL in PostgreSQL) or Binary Log (binlog in MySQL) up to T_minus_1_second right before your bad query arrived.

Step 2: Stop background jobs and application writes (Protect MVCC tuples)

In PostgreSQL, executing DELETE FROM users; ýa-da UPDATE orders SET status = 'cancelled'; does not actually erase a single byte of data from the table file on disk right away. Because PostgreSQL uses Multi-Version Concurrency Control (MVCC), a DELETE ýönekeý düzýär xmax Her hatardaky geleşik ID sözbaşy, geljekki soraglara görünmeýän ýaly bellemek üçin, hatar doly maglumatlary içerde saklamaz base/ Gaýtadan ulanylýan ýeri bellemek üçin ** awtowakuum ** gelýänçä üýşmek faýly.

  • If you are on self-hosted or VM PostgreSQL and have no recent backup: Immediately connect as superuser we şol tablisadaky awtowakuumy öçüriň (ALTER TABLE table_name SET (autovacuum_enabled = false);), or stop the PostgreSQL service and take a raw block-level filesystem snapshot (LVM / EBS snapshot) of the /var/lib/postgresql/data directory. Specialized PostgreSQL forensic extensions (pg_dirtyread) can read and recover 100 percent of deleted or pre-update rows directly out of the unvacuumed heap table in minutes.

Database recovery matrix by engine and cloud platform

Database Platform Fastest Recovery Method for Accidental DROP / DELETE Step-by-Step Technical Execution
AWS RDS / Aurora (PostgreSQL / MySQL) Automated Point-In-Time Recovery (PITR) to a New Instance (Restores to any second within the 1-to-35-day retention window) 1. Open AWS RDS Console -> Automated backups -> Select your Prod DB -> Restore to point in time.
2. Choose Custom date and time and enter the exact UTC timestamp 10 to 30 seconds BEFORE your bad query ran.
3. RDS spins up a parallel clone (prod-db-recovery) in 10 to 25 minutes. Dump the intact table (pg_dump -t my_table ýa-da mysqldump) from the recovery clone and import it back into the live Prod DB (or swap the DNS CNAME/endpoint to the recovered clone).
Google Cloud SQL / Azure Database Point-In-Time Clone In GCP Console -> Select Cloud SQL instance -> Clone -> Select Clone from earlier point in time (UTC) -> Extract missing rows from the clone via pg_dump / mysqldump or Foreign Data Wrapper (postgres_fdw).
Supabase / Neon / PlanetScale Instant Branch / Time-Travel Restore Neon: Create an instant copy-on-write Branch from a historical timestamp (Timestamp ýa-da LSN 1 minute ago) in 2 seconds and copy the table back.
** Maglumat bazasy: ** Dolandyryş paneli -> Maglumatlar bazasy -> uptiýaçlyk nusgalar -> ** Wagt dikeldiş nokady .
PlanetScale: ** Ulanyş haýyşy UI-de shemany yzyna öwürmek / yzyna gaýtarmak düwmesini ulanyň.
** Özbaşdak ýerleşdirilen MySQL / MariaDB ** (bilen binlog_format = ROW) ** Binlog öwrülişigi (binlog2sql / mysqlbinlog --flashback) ** MySQL işledilende binlog_format = ROW (MySQL 5.7.7-den bäri asyl), hersi DELETE ýa-da UPDATE her bir täsir eden hataryň ** doly we öň suratyny ikilik gündeligine ýazýar (mysql-bin.0000XX). Ylga binlog2sql --flashback (ýa-da MariaDB mysqlbinlog --flashback) takyk tersini awtomatiki usulda döretmek üçin şol gündeligiň ýagdaýynda INSERT ýa-da UPDATE SQL skriptini we doly ätiýaçlyk nusgasyny dikeltmän 60 sekuntda gaýtalaň.
** Gar ýagyşy / BigQuery ** (Bulut maglumatlary ammarlary) ** Içindäki SQL Wagt syýahaty (AT / BEFORE) ** Nol ätiýaçlyk dikeltmek zerur. Tablisa 5 minut ozal bolşy ýaly soraň:
** Gar ýagyşy: ** CREATE OR REPLACE TABLE my_table AS SELECT * FROM my_table AT(OFFSET => -60*5); (ýa-da UNDROP TABLE my_table;).
** BigQuery: ** SELECT * FROM dataset.my_table FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 MINUTE);
** MongoDB atlasy / Replika toplumy ** ** Oplog PITR ikinji agzany dikeltmek ýa-da gijikdirmek ** MongoDB atlasynda: ** uptiýaçlyk -> Dikelt -> Wagt nokady ** (gaýtalaýar local.oplog.rs düşmeginden takyk sekuntda ýygnamak).

2-nji bölüm: Syzdyrylan API düwmeleri, .env Git-e bagyşlanan syrlar ýa-da şahsy açarlar

Eger tötänleýin eden bolsaňyz .env faýl, an id_rsa SSH açary, Firebase / GCP hyzmat hasaby JSON faýly, Zolak gizlin açary (sk_live_...) ýa-da AWS AKIA... Git-e giriş açary, takyk iki fazaly yzygiderliligi ýerine ýetiriň: ** A faza (buludyň açaryny öldüriň) ** ilki, ** B faza (Git ammaryny süpüriň) ** sekunt.

Tapgyr A: Derrew 60 sekuntlyk bulut şahsyýetnamasy (Bu BIRINJI ediň)

1. AWS (AKIA... Giriş açary ID + gizlin giriş açary)

Botlar GitHub-dan AWS açaryny ogurlanda, awtomatiki skript 10 sekuntyň içinde iň uly GPU EC2 mysallaryny aýlamak üçin hasabyňyza girýär (p4d.24xlarge / g5.48xlarge) 30+ global AWS sebitlerinde (Jakarta, Osaka we Eastakyn Gündogar ýaly optiki sebitleri goşmak bilen) cryptocurrency gazmak üçin ýa-da açyk IAM ulanyjysyny döredýär; AdministratorAccess asyl açary pozmazdan ozal.

  1. ** Syzdyrylan giriş açaryny derrew öçüriň we pozuň: **
    • ** AWS konsolyny açyň -> IAM -> Ulanyjylar -> [Ylalaşylan ulanyjy] -> Howpsuzlyk şahsyýetnamalary -> Giriş düwmeleri ** -> ** basyň ** Öçüriň **, soňra ** Öçüriň ** (ýa-da CLI arkaly: aws iam update-access-key --access-key-id AKIAIOSFODNN7EXAMPLE --status Inactive --user-name MyUser).
  2. ** Açyk dakyň DenyAll wagtlaýyn zyýansyzlandyrmak syýasaty aws sts sessiýa belgileri: **
    • ** Kritiki duzak: ** Öçüreniňizden soňam AKIA... Eger hüjümçi eýýäm jaň eden bolsa, IAM giriş açary sts:GetSessionToken ýa-da sts:AssumeRole ilkinji 30 sekuntda, wagtlaýyn ASIA... Sessiýa nyşany, aç-açan çyzgy ** inkär ** syýasatyny goşmasaňyz, 1-den 12 sagada çenli dowam edýär AWSCompromisedKeyQuarantineV2 ýa-da ulanyja ýa-da rola häzirki bellikden öň berlen bellikler üçin inkär etmek syýasaty.
  3. ** AWS CloudTrail-iň açyk howada dowam etmegi üçin audit: **
    • ** AWS CloudTrail -> Wakanyň taryhy ** açyň we soňky 2 sagadyň dowamynda ylalaşylan ** Access Key ID ** ýa-da ** Ulanyjy ady ** bilen süzüň.
    • Bu 5 tutanýerli jaň üçin ýörite barlaň: CreateUser, CreateAccessKey, AttachUserPolicy, AssumeRole, we RunInstances. Islendik gödek hadysany ýatyrmak üçin ** AWS Cost Explorer ** we ** EC2 Global View ** barlaň we derrew ** AWS goldaw kazyýetini açyň (Hasap we hasaplaşyk -> ylalaşyk hasaby) **. AWS açar syzdyrylandygyny habar bereniňizde we ýagdaýlary haýal etmän ýatyranyňyzda galp hasaplama hasaplaryndan yzygiderli ýüz öwürýär.

2. Zolak (sk_live_...), OpenAI (sk-...), SendGrid, Twilio we Slack Tokens

  • ** Zolak: ** ** Döredijiler -> API düwmeleri -> Adaty düwmeler / Çäklendirilen düwmeler -> Üç nokada basyň (...) -> Aýlaw düwmesi **. ** "Häzir möhleti gutar" ** saýlaň (ýa-da täze açary häzirki wagtda önümçilik gurşawynyň üýtgeýjilerine işjeň ulanýan bolsaňyz, 1 sagatlyk ýeňillik penjiresini düzüň).
  • ** OpenAI / Antropik: ** API açarlary dolandyryş paneline giriň we derrew ** Revoke / Delete ** düwmesine basyň, şonuň üçin awtomatlaşdyrylan proksi gyryjylary birnäçe minutda müňlerçe dollarlyk LLM token kreditini çykaryp bilmez.
  • ** GitHub şahsy giriş bellikleri (PAT), inçe däneli tokenler we açarlary ýerleşdirmek: ** ** GitHub sazlamalary -> Öndüriji sazlamalary -> Şahsy giriş bellikleri ** we syzdyrylan tokeniň üstünde ** Delete / Revoke ** basyň, soňra guramanyňyzyň ** Audit Log **-i barlaň (Settings -> Audit log) üçin repo.clone, repo.accessýa-da ekspozisiýa penjiresinde birugsat webhook döretmek.
  • ** Maglumatlar bazasynyň baglanyşyk setirleri (DATABASE_URL / postgres:// / mongodb+srv://) we Redis URL-leri: ** Maglumat bazasynyň motorynyň içinde maglumat bazasynyň ulanyjysynyň parolyny üýtgediň (ALTER USER app_user WITH PASSWORD 'new_random_secret';), soňra bolsa köne şahsyýetnamalara degişli häzirki açyk TCP birikmeleriniň hemmesini ** ýapyň (SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename = 'app_user' AND pid <> pg_backend_pid(); PostgreSQL-da), sebäbi PostgreSQL ýa-da MySQL-da maglumat bazasynyň parolyny üýtgetmek diňe * täze * girişleri bloklaýar we hüjümçiniň eýýäm açyk baglanyşygyny kowulýança göni goýýar.

B faza: Git taryhynyň syryny süpürmek (git filter-repo & GitHub keş keşini çykarmak)

Syzdyrylan açar ölenden we önümçilikde aýlanandan soň, howpsuzlyk skanerleri duýduryş bermezligi üçin Git-iň gizlin taryhyny arassalaň:

  1. ** Ammar taryhyny ulanyp täzeden ýazyň git filter-repo (ýa-da BFG repo-arassalaýjy): **
    • Ammaryňyzyň täze ýalaňaç aýna klonyny alyň we syzdyrylan faýly aýyryň (mysal üçin, .env) ähli şahalar we bellikler boýunça her bir taryhy borçnamadan:
      # 1. Remove a specific file (.env) from all commits in history:
      git filter-repo --invert-paths --path .env
      
      # OR 2. Replace a specific secret string with ***REMOVED*** everywhere:
      echo "sk_live_YOUR_SECRET_STRING==>***REMOVED***" > replacements.txt
      git filter-repo --replace-text replacements.txt
      
  2. ** Arassalanan taryhy güýçlendiriň we keşli GitHub Pull haýyşy / tabşyryş görnüşleri: **
    • Arassalanan taryhy täzeden gözläň (git push origin --force --all we git push origin --force --tags).
    • ** Möhüm GitHub keş-ýerine ýetiriş ädimi: ** Arassalanan taryhy zor bilen basanyňyzdan soňam, köne 40 simwoly bilýän her bir adam SHA URL-ni edýär (github.com/org/repo/commit/abc1234...) GitHub web UI-de köne haram edilen işi, GitHub serwer tarapyndaky zibil ýygnaýança görüp biler. ** GitHub goldawy ** bilen habarlaşyň (ýa-da ammaryň Howpsuzlyk Geňeşi / Goldaw portalyny ulanyň) takyk köne SHA bilen habarlaşyň we web keş-den çykarylan / göçürilen amallary ** çykarmagyny haýyş ediň. git gc uzakdaky ammarda **.

3-nji bölüm: Tötänleýin yzyna gaýtarmak git push --force, git reset --hardýa-da öçürilen şahasy

Eger tötänleýin ylgasaň git push --force we ýoldaşlaryňyzyň eden borçlaryny ýok etdi mainýa-da ylgady git reset --hard HEAD-5 we ýerli işiň bir gününi ýitirdi, ** howsala düşmäň, sebäbi Git hiç haçan edilen zatlary derrew pozmaýar. **

Näme üçin "ýitiren" işleriňiz içerde howpsuz oturýar? .git/logs (Reflog)

Haçan-da bir wada döredeniňizde, şahalary çalşyň, gaýtadan işlediň ýa-da täzeden düzüň, Git öňki ýazgyny ýazýar HEAD we şahanyň ujy SHA-1 / SHA-256 görkezijiler, ** salgylanma gündeligi (git reflog) **, we hakyky ýetimleri zibil ýygnamakdan ozal iň azyndan 14-den 90 güne çenli diskde saklaýar.

Stepdim-ädim Git gyssagly dikeldiş reseptleri

Ssenariýa 1: Sen ylgadyň git push --force we gaýtadan ýazmak origin/main

  1. ** SHA-nyň takyk tabşyrygyny tapyň origin/main güýç-kuwwatyňyzdan öň sag tarap görkezdi: **
    • ** A usuly (remoteerli uzakdan yzarlaýyş reflogyňyzy barlaň): ** Bu buýrugy iten terminalyňyzda işlediň:
      git reflog show origin/main
      
      Çykyşlary görersiňiz:
      a1b2c3d (HEAD -> main, origin/main) refs/remotes/origin/main@{0}: update by push
      9f8e7d6 refs/remotes/origin/main@{1}: fetch: fast-forward
      
      Ine, 9f8e7d6 (origin/main@{1}) takyk borçnamadyr origin/main güýç-kuwwatyňyz ony ýazmazdan ozal dogrydy.
    • ** B usuly (Işlemedik islendik topardan soraň git pull henizem): ** getiren işdeşiňiz main Öňem şu günki güne çenli ýerli ýerlerde oturylyşyksyz taryhy bar origin/main şahasy.
    • ** C usuly (GitHub REST API Wakalar gündeligini soraň): ** localerli refloguňyzda uzak ýagdaý ýok ​​bolsa, GitHub-yň iteklemek wakalary API-den soraň "before" Güýçli itergi hadysasynyň SHA hash:
      gh api /repos/OWNER/REPO/events --jq '.[] | select(.type=="PushEvent") | {actor: .actor.login, before: .payload.before, head: .payload.head, time: .created_at}'
      
  2. ** Dikelt origin/main öňki SHA-ny ygtybarly ýerine ýetirmek: **
    • Wadanyň dogry görünýändigini barlaň (git log -n 5 9f8e7d6), soňra takyk SHA-ny pult bilen itekläň main şahasy ulanylýar --force-with-lease:
      git push --force-with-lease origin 9f8e7d6:refs/heads/main
      

2-nji ssenariýa: Sen ylgadyň git reset --hard ýa-da itmezden ozal ýerli şahany pozdy

  1. ** Ylga git reflog ýerli ammarynda: **
    git reflog --date=iso
    
  2. ** SHA-ny ýerine ýetiriň reset: giriş ** (meselem, HEAD@{2}: commit: feat: add payment webhook) we göni SHA-ny görkezýän täze halas ediş bölümini dörediň:
    git switch -c rescue-branch HEAD@{2}
    
  3. ** Özüňiziň * işlenmedik * faýlyňyzy ýitiren bolsaňyz näme? git addredaktirlendi (sahnalaşdyryldy) we soňra süpürildi git reset --hard? **
    • Ylgaýan pursat git add myfile.ts, Git şol faýlyň doly mazmunyny gysýar we ýazýar .git/objects/ hiç haçan ylgamasaňyzam, ** çalaja blob ** hökmünde git commit. Üýtgetme wagty boýunça tertiplenen ähli çalaja bölekleri sanap, ony dikeldiň:
      git fsck --lost-found
      # Inspect the recovered blobs written into .git/lost-found/other/
      

4-nji bölüm: tötänleýin terraform destroy or deleted cloud storage (S3, EBS, VMs)

Infrastruktura-kod (IaC) turbageçirijisi ýa-da el bilen CLI buýrugy önümçilik bulut çeşmelerini ýok edip başlasa:

  1. ** Jezalandyrmagy ygtybarly bes ediň: **
    • Terminalyňyzda ýerli işleýän bolsaňyz, ** basyňCtrl + C ONCE ** şonuň üçin Terraform häzirki API jaňyny tamamlaýar we täzelenenini ýazýar .tfstate arassa faýl beriň. “GitHub Actions”, “GitLab CI” ýa-da “Terraform Cloud” -yň içinde işleýän bolsaňyz, “Run Cancel **” -e basyň we bulut konsolynda CI ylgawçysynyň AWS / GCP IAM roluny derrew öçüriň, uçuşdaky API pozulmalary şowsuz bolar AccessDenied.
  2. ** Toky ätiýaçlaň .tfstate derrew faýl beriň: **
    • Uzakdaky döwlet faýlyňyzyň ýerli göçürmesini göçürip alyň (terraform state pull > emergency-backup.tfstate) we 10 minut mundan ozal öňki döwlet wersiýasyny almak üçin Terraform döwlet çelekiňizdäki S3 çelek wersiýasyny barlaň.
  3. ** Bulut üpjün edijisini "Softumşak öçürmek" we Bin howpsuzlyk torlaryny gaýtadan işlemek: **
    • ** Amazon S3 (Çelek wersiýasy açyk): ** S3 çelekdäki faýllary pozmak (aws s3 rm --recursive) ýekeje obýekti ** pozmaýar; diňe bir obýektiň üstünde nol baýt ** Markeri pozuň ** goýýar. Markerleri pozuň (S3 Batch Operations ýa-da 5 setirli Python arkaly) boto3 skript) faýllaryňyzyň 100 göterimini derrew dikeltmek üçin.
    • ** AWS EBS göwrümleri we RDS Snapshots (Gaýtadan işleýän gap): ** Eger sazlanan bolsa konsolda ** AWS gaýtadan işlemek binasyny barlaň we ** AWS ätiýaçlyk ** gümmezlerini barlaň.
    • ** Google Bulut Platformasy (GCP) we Microsoft Azure: ** Öçürilen GCP Taslamalary we Azure Resurs Toparlary / Açyk Kärhanalar / ** Soft Delete ** açyk ammar hasaplary, konsolda bir gezek dikeltmek arkaly ** 7-30 gün ** dikeldilip bilner.

Döwülen Terraformany nädip dikeltmeli .tfstate döwlet faýly ýa-da ýetim infrastrukturany täzeden import etmek

Haçan a terraform apply ýa-da tötänleýin terraform destroy orta uçuş kesilýär ýa-da kimdir biri S3 / GCS-de uzakdaky döwlet faýlyny tötänleýin pozsa, bulut infrastrukturanyňyz howply bölünen beýni ýagdaýyna girýär, käbir çeşmeler henizem AWS / GCP-de bar, beýlekileri bolsa ýok .tfstate:

  1. ** overazylan ýa-da öçürilen pulty dikeltmek .tfstate S3 / GCS wersiýasyndan faýl: **
    • Hiç haçan JSON-ny el bilen redaktirlemäň .tfstate Başga bir opsiýa başa barmasa, tekst redaktorynda el bilen faýl beriň, sebäbi ýekeje gabat gelmedi "serial" ýa-da "lineage" UUID seti Terraform-yň gaýtadan ulanylmagynyň öňüni alar.
    • Uzak arka tarapyň ýaşaýan ýerinde S3 çelekiňizi (ýa-da Google Cloud Storage çelegi / Terraform Cloud Workspace ** States ** goýmasyny) açyň, S3 konsolynyň ýokarsyndaky ** Görkeziş wersiýalaryna basyň, tapyň terraform.tfstate wersiýa erbet işlemezden ozal bellendi, göçürip alyň we täze häzirki ýagdaý ýaly howpsuz yzyna itekläň:
      # Push a recovered historical state file back to the remote backend safely
      terraform state push recovered-pre-incident.tfstate
      
  2. ** Baglanan döwlet gulpuny döwmek (Error acquiring the state lock): **
    • Erbet abort edeniňizde terraform destroy bilen Ctrl + C ýa-da asylan CI ylgaýjysyny öldürmek, uzakdaky DynamoDB tablisasy ýa-da GCS gulp faýly ölen proses ID-si bilen gulplanýar.
    • Ilki bilen CI dolandyryş paneliňizde we ýoldaşlaryňyz bilen beýleki Terraform amallarynyň henizem şol iş meýdanyna garşy işleýändigini barlaň, soňra säwlik habarynda çap edilen Lock ID UUID ulanyp ýetim gulpy boşadyň:
      terraform force-unlock <LOCK_ID_UUID>
      
  3. ** Diri galan maglumat bazalaryny döretmezden bölekleýin weýran edilen gurşawy täzeden gurmak (terraform import): **
    • Eger a terraform destroy raýatlygy bolmadyk Programma ýük balanslaryny ýok etdi (aws_lb) we ECS / EKS işçi düwünleri, ony saklamazdan ozal, ** düzeltmek aňsat **: işlediň terraform apply we Terraform, diri galan RDS maglumat bazasyna el degirmän 5 minutda ähli raýatlygy bolmadyk ulgamlary döreder we gatlaklary noldan hasaplar.
    • Döwlet faýlyňyz diri galan döwlet maglumatlar bazasynyň ýa-da S3 çeleginiň yzyny ýitiren bolsa, ** ulanyňimport {} konfigurasiýa bloky ** (Terraform 1.5+) ýa-da terraform import aws_db_instance.prod_db my-rds-instance-id bar bolan bulut çeşmesini ýok etmän döwlet faýlyňyza baglamak we işletmek terraform plan tassyklamak üçin "0 to destroy" ýüz tutmazdan ozal.

5-nji bölüm: Näsazlygy nädip dolandyryjyňyza habar bermeli we birkemsiz ölümden soň alyp barmaly

Uzakdan işleýän wagtyňyz önümçilik hadysasyna sebäp bolanyňyzda, professional abraýyňyz ** ýalňyşlygyň özi däl-de, aç-açanlygyňyz, asuda aragatnaşyk we yzygiderli düzedişiňiz bilen kesgitlenýär.

Waka aragatnaşygynyň 3 altyn düzgüni

  1. ** Döwlet faktlary, täsiri we ETA gizlenmezden, gijikdirmezden we günäkärlemezden: ** erroralňyşlygy açylandan 2 minut soň habar beriň.
  2. ** "Kök-sebäbini düzetmek" -den aýratyn "Mitigasiýa" (gan akmagy duruzmak): ** Gyssagly ýagdaýda siziň ýeke-täk maksadyňyz hyzmaty dikeltmek (erbet ýerleşdirmäni yzyna gaýtarmak, PITR maglumat bazasynyň klonyna geçmezlik ýa-da aýratynlyk baýdagyny aýyrmak). Ertir üçin çuňňur kod refaktoryny ýazdyryň.
  3. Post regular 15-minute heartbeat updates in the incident channel so executives and customer support know someone is in control.

Ackuwaş / toparlaryň hadysalary deklarasiýa skriptini göçüriň

[SEV-1 INCIDENT] Production [Service / Database Name] Impact - What happened: At [HH:MM UTC], while executing [brief technical action, e.g., a data migration script], an unintended [DELETE / config change / force-push] was applied to production [database / service]. - Current Customer Impact: [e.g., Checkout API is returning 500 errors / User profile updates are paused]. - Immediate Mitigation in Progress: 1. Write traffic to [table/service] has been paused to preserve data integrity. 2. Point-In-Time Recovery (PITR) clone to [HH:MM:SS UTC] (Wakadan 10 sekunt öň) häzirki wagtda aýlanýar [AWS RDS / GCP]. - ** Waka serkerdesi: ** @[Your Name] (kömek edýär) @[DBA/On-Call SRE]). - ** Indiki täzelenme: ** 15 minutda ([HH:MM UTC]) ýa-da dikeldiş klony internete giren badyna.

Wakadan soňky in engineeringenerçilik gorag sanawy (Aýypsyz ölümden soň)

Önümçilikdäki her bir adam ýalňyşlygy aslynda ** ulgam dizaýn boşlugy ** (ýekeje göçürme terminaly buýrugy garawulsyz önümçiligi taşlap bilýän bolsa, ulgam şowsuzlyga garaşýardy). Ertesi gün öleniňizden soňky resminamada bu anyk tehniki garawullary teklip ediň we durmuşa geçiriň:

  • ** Reňk kody we prefiks önümçilik teklipleri (kube-ps1, psql .psqlrc): ** Gabyňyzy we SQL müşderiňizi islendik baglanyşyk üçin sazlaň PRODUCTION açyk gyzyl görkezýär [PROD-DB] gyssagly we her interaktiw PostgreSQL sessiýasyny a BEGIN; geleşik bloky (ýa-da toplum) SET default_transaction_read_only = on;).
  • ** Işlet safe-updates (--i-am-a-dummy) MySQL / MariaDB müşderilerinde: ** Goş safe-updates to [mysql] içinde -/.my.cnf so MySQL outright refuses to execute any UPDATE ýa-da DELETE ýetmezçiligi WHERE esasy madda ýa-da a LIMIT.
  • ** Işlediň DeletionProtection = true ähli önümçilik RDS maglumat bazalarynda, S3 çeleklerde we Terraform döwlet çeşmelerinde ** (lifecycle { prevent_destroy = true }).
  • Enforce Git Branch Protection Rules on main / production: Disable Allow force pushes we Allow deletions GitHub / GitLab-da goralýan şahalarda, hatda ammar dolandyryjylary hem edip bilmeýärler git push --force to main.
  • ** Gizlin skaner çeňňeklerini guruň (gitleaks ýa-da trufflehog) we GitHub Push Protection: ** Içindäki bloklary ýerine ýetiriň AKIA, sk_live_, ýa-da .env öň ýerli nagyşlar git commit hatda üstünlik gazanýar.

Freygy-ýygydan berilýän soraglar

Önümçilik maglumatlar bazasynyň tablisasyny tötänleýin taşlandygy ýa-da sahypanyň kesilmegine sebäp bolanym üçin işden kowarynmy?

Birkemsiz howpsuzlyk medeniýeti bilen işleýän sagdyn in engineeringenerçilik guramalarynda (häzirki zaman tehnologiýalary, DevOps we SRE toparlary boýunça standart) inersenerler, hadysany derrew habar berseler we hyzmaty dikeltmäge kömek etseler, önümçilikdäki dogruçyl ýalňyşlyklary sebäpli işden kowulmaýar. In Engineeringenerçilik ýolbaşçylary, kiçi ýa-da uly işläp düzüjiniň ýeke-täk gözden geçirilmedik buýruk bilen önümçilik stoluny taşlamagy üçin çig rugsady we garawullary ýok bolsa, munuň düýp sebäbi erbetlik däl-de, giriş gözegçiligi we ýaýbaňlandyryş gurallaryndaky kemçilikdir. Iş ýüzünde, ýaňy-ýakynda ilkinji gezek kesilenini başdan geçiren inerener, häzirki wagtda bu ulgam bilen baglanyşykly toparda iň ygtybarly adam. Yzygiderli ýatyrylmagyna alyp barýan ýeke-täk hereket, maglumat ýitirmek hadysasyny ýapmaga synanyşmak, audit ýazgylaryny pozmak ýa-da waka derňewi wagtynda ýalan sözlemekdir.

Näme üçin derrew janly önümçilik traffigimi täze dikeldilen Point-In-Time Recovery (PITR) maglumat bazasyna geçirmeli däl?

Diňe bir tablisadan hatarlary tötänleýin pozan bolsaňyz (mysal üçin `user_preferences` tablisa) sagat 14: 00-da we 13:59:50 UTC-a dikeldilen PITR klonyny aýlamak üçin 20 minut gerek, göni önümçilik maglumat bazasy müňlerçe kanuny täze müşderi sargytlaryny we töleglerini gaýtadan işlemegi dowam etdirip biler. `orders` 14:00 bilen 14:20 UTC aralygyndaky tablisa. Productionhli önümçiligiň DNS ahyrky nokadyny 13:59:50 PITR klonyna gözi bilen süýşürseňiz, täze 20 minutlyk müşderi sargytlaryny ýok edersiňiz. Munuň ýerine esasy maglumatlar binýadyny onlaýn ýagdaýda saklaň (ýazgylar diňe bozulan aýratynlyklar bilen saklanýar) we 13:59:50 PITR klonyndan ýiten hatarlary göni önüm tablisasyna eksport ediň.

GitHub ammaryny aç-açan açanymdan iki minut soň .env faýl, ähli API düwmelerini aýlamalymy?

Hawa, şol açarlaryň 100 göterimi henizem ýatyrylmaly we derrew aýlanmaly. Jemgyýetçilik GitHub ammaryna itergi berlen her bir borç, hakyky GitHub Wakalar API ("Firehose") arkaly hakyky wagtda ýaýlyma berilýär we kanuny howpsuzlyk arhiw hyzmatlary (GHArchive ýaly) we bulut torlarynda 24/7 işleýän zyýanly awtomatlaşdyrylan maglumat ýygnaýjy botlar tarapyndan indekslenýär. Iki minutdan soň ammaryň görünişini “Public” -dan “Private” -a öwürmek, awtomatiki göçürijileriň eýýäm göçürilen nusgasyny pozmaýar.

Nädip git push --force-with-lease bilen deňeşdirilende kesilmeginiň öňüni alyň git push --force?

Standart işledeniňizde `git push --force`, Git uzakdaky şahany ýerli şahamçanyňyz bilen şertsiz ýazýar, şol bir wagtyň özünde ýoldaş ýoldaşyň şol şaha tarap iteklän zatlaryny ýuwaşlyk bilen ýok edýär. Ulanylanda `git push --force-with-lease` (we has gowusy, `--force-if-includes`), Git ilki uzakdaky serweri barlaýar, uzakdaky şahanyň ujy henizem ýerli enjamyňyzyň SHA-nyň takyk ýerine ýetiren işine laýyk gelýär. Eger işdeşiňiz ýa-da CI turbageçirijisi soňky geleniňizden bäri uzakdaky şahada täze bir wada beren bolsa, `--force-with-lease` işlerini ýok etmegiň ýerine "köne maglumat" duýduryşy bilen arkaýyn ýatyrýar.


Çeşmeler barlandy

  • Milli standartlar we tehnologiýa instituty (NIST, Amerikanyň Birleşen Ştatlary): * NIST SP 800-61 Ylham 2 / Ylham 3 Kompýuter howpsuzlygy hadysalaryny dolandyrmak boýunça gollanma we Ygtyýarly ylalaşyk mazmuny *.
  • Amazon web hyzmatlary (AWS), Google bulut platformasy (GCP) we Microsoft Azure resminamalary (ABŞ): * RDS awtomatlaşdyrylan nokady dikeltmek (PITR) arhitekturasy, AWS IAM ylalaşylan esasy karantin syýasatlary (AWSCompromisedKeyQuarantineV2), we S3 wersiýasy Delete-Marker Dikeldiş *.
  • PostgreSQL Global Ösüş Topary we MySQL / Oracle Resminamalary (Halkara): * PostgreSQL Writeazuw-Öňe Giriş (WAL), MVCC Tuple Görünişligi we MySQL Row-esasly Ikili Log Flashback Dikeldiş *.
  • Git SCM resmi resminamalar we GitHub howpsuzlyk laboratoriýasy (Halkara): * Git Reflog (git-reflog), Dangling obýekti dikeltmek (git-fsck), Taryhy täzeden ýazmak (git-filter-repo) we gizlin skanerden itmek goragy *.
  • USENIX Assosiasiýasy / SREcon we Google Saýtyň Ygtybarly In Engineeringenerligi (SRE) Kitaplary (Halkara): * Wakalary dolandyrmak, Gaýragoýulmasyz dolanyşyk we Aýypsyz Postmortem Medeniýeti *.

Degişli gollanmalar