2026 ж. 03 қаң.·7 мин

Корпоративті әзірлеме үшін DevSecOps: релиздерді баяулатпайтын CI/CD тәжірибелері

Корпоративті әзірлемеге арналған DevSecOps: CI/CD‑де тәуелділіктерді, секреттерді және құрастыруларды бақылау тәжірибелері — релиздерді тежемей осалдықтарды азайту.

Корпоративті әзірлеме үшін DevSecOps: релиздерді баяулатпайтын CI/CD тәжірибелері

CI/CD‑де әдетте қандай тәуекелдер жасырын болады

Көптеген инциденттер пайплайнда «кодты бұзу» емес, жеткізу тізбегінен басталады. Корпоративті әзірлемеде DevSecOps әдетте үш аймаққа тіреледі: тәуелділіктер, секреттер және құрастырулар. Әрқайсысы қарапайым релизті бөтен код жеткізетін арнаға айналдыра алады.

Тәуелділіктер — күтпеген жағдайлардың басты көзі: олар көп, тез өзгереді және жиі «әдет бойынша» жаңартылады. Бір осал кітапхана немесе реестрдегі алмастырылған пакет сіздің репозиторииіңіздің бір жолын да өзгертпей өнімге түсіп кетуі мүмкін. Контейнер образдарымен ұқсас жағдай: базалық образ жаңартылғанда ол CVE немесе шабуылға көмектесетін қосымша құрал әкеліп қоюы мүмкін.

Секреттер тыныш ағып кетеді. Репозиторийге қате коммиттелген токен, конфигте қалған пароль, айнымалыда сақталған кілт немесе логтағы пайдалы шығыс — және қолжетімділік сыртқа шығады. Қазір шабуылдаушы артефактілерді оқып, өзгеріс пуштап, пайплайндарды іске қосып немесе ішкі пакеттерді жүктеп, әдеттегі пайдаланушы кейпінде қала алады.

Бір бөлек категория — құрастыру агентін компрометациялау. Егер агент жұқтырылған не артық құқықтарға ие болса, ұсталса, ол жинайтын барлық затқа шабуыл жасалатын нүктеге айналады. Ең жаман жағдайда сіз тесттерден өткен, бірақ ішіне енгізілген өзгеріс бар релиз шығарасыз: құрастыру скриптіндегі қосылған қадам немесе алмастырылған бинарь.

Көбіне ақаулар бес орында жатады: CI‑токендер мен сервис аккаунттардың артық құқықтары; бақылаусыз тәуелділік нұсқалары мен базалық образдар; репозиторияда, артефактілерде немесе логтарда «шыққан» секреттер; «қандай қалай» жасалатын құрастырулар, яғни фиксацияланбаған кірістер және тексерілмеген шығу тегі; сондай-ақ артефактілерді қолжетімсіз және өзгермейтін сақтаусыз ұстау.

«Баяулатпай» бизнес үшін — қауіпсіздік әррелизді қолмен тексеруге айналмауы тиіс. Команда үшін бұл — анық ережелер, нақты қаупті ұстайтын автоматты тексерістер және болжамды процесс. Қауіпті табылғанда пайплайн нақты ереже бойынша әрі тез блоктап қоюы немесе шешім ретінде қауіпсіз айналып өту жолын беруі керек: жаңарту, патч немесе уақытша исключение мерзімімен.

Корпоративті әзірлемеде дәл не бақылау керек

Корпорацияда CI/CD қауіпсіздігі — бір сканер емес, нақты шекаралар: қандай активтер маңызды, кім жауап береді және әр релизден кейін қандай іздер қалуы тиіс. Одан айырмашылығы жоқ кезде тексерістер командалар арасында дау тудырып, релизді тежейді.

Көбіне назардан тыс қалатын активтер

Адамдар көбіне тек бастапқы кодты ойлайды, ал шын мәнінде шабуыл жеткізу тізбегіне бағытталады. Бақылау қажет ең болмағанда бес категория:

  • код репозиторийлері және олардың баптаулары (бұтақтар, құқықтар, міндетті тексерістер)
  • құрастыру артефактілері (бинарьлар, пакеттер, кітапханалар) және олардың шыққан жері
  • контейнер образдары және сіз мұрагер болатын базалық образдар
  • орта конфигурациялары (CI пайплайндар, Helm/манифест файлдар, деплой параметрлері)
  • сыртқы сервистерге қолжетімділіктер: registry, сақтау орындары, бұлттар, мониторинг жүйелері

Бұл үлкен ұйымдарда әсіресе маңызды, онда өнім бірнеше командалар мен компоненттерден тұрады. Мысалы, мемлекеттік сектор немесе қаржы ұйымдарына шешім беретін жүйе интеграторы үшін код та, образдар да, орналастыру конфигурациялары да бірдей маңызды.

Рөлдер мен жауапкершілік: кім не шешеді

Тексерістер релизбен қақтығыспауы үшін алдын ала жауап аймақтарын бөліңіз. Әзірлеу — осалдықтарды жөндеуге және код сапасына жауапты. DevOps — CI/CD баптаулары мен құрастыру инфрақұрылымына жауапты. Қауіпсіздік командасы саясаттарды анықтайды (не тыйылады, не рұқсат етіледі, исключениялар қалай ресімделеді) және аудит жүргізеді.

Корпоративті талаптардың минимумы әдетте төрт нәрсеге келеді: трассируемдік (кім және не жинады), басқарылатын қолжетімдіктер (минималды құқықтар және қысқа мерзімді токендер), аудит мүмкіндігі (логтар және өзгерістер тарихы) және анық исключение процесі (кім мақұлдайды және қанша уақытқа).

«Қатаңдық vs жылдамдық» балансы көбіне екі жерде қажет: релизді блоктайтын ережелерде және командаға тез әрі анық жауап беру механизмінде — не бұзылған және оны қалай түзету керек. Практикалық ереже: жоғары тәуекел әкелетін ғана блоктаңыз, ал қалғанын ескертуге аударып, түзету мерзімін беріңіз.

Тәуелділіктерді бақылау: SCA, SBOM және қабылдау саясаттары

Тәуелділіктер — «тыныш» тәуекелдердің басты көзі. Код тексерілген болса да, осалдық кітапхана, контейнер образы немесе ұзақ жаңартылмаған ішкі пакет арқылы келуі мүмкін. Міндет — құрастыруға не алатыныңызды көру және релизде не рұқсат етілетінін айқын ережелермен бекіту.

SCA: нені нақты тексеру керек

SCA (Software Composition Analysis) тек ашық кодқа ғана емес, ірі компанияларда ішкі пакеттерге де қолданылуы тиіс — олар жылдар бойы өмір сүріп, ескі тәуелділіктерді мұра ете алады.

Ең әуелі үш нәрсені тексеріңіз: белгілі осалдықтар (CVE), лицензиялар және нұсқалардың «жаңалығы». Пайдалы тәсіл — тәуелділіктерді типтер бойынша бекітеу: қолданба тәуелділіктері, тест тәуелділіктері және құрастыру тәуелділіктері (плагиндер, раннерлер, утилиталар). Құрастыру тәуелділіктері жиі ұмытылып кетеді, бірақ олар да жеткізу тізбегіне кіреді.

Транзитивтік тәуелділіктер арнайы мәселе. Жұмыс істейтін тәсіл: оларды да тікелей тәуелділер сияқты маңызды санаңыз және «ұмытылған» кітапханаларды жүйелі түрде алып тастаңыз. Егер тәуелділіктер пайдаланылмай, бірақ манифесттерде қалса, сіз тәуекел мен сканерлеу уақытын төлеудесіз.

SBOM: неге қажет және қалай сақтау керек

SBOM (Software Bill of Materials) «осы релиз неден тұрады?» деген сұраққа жауап береді. Ол есеп үшін емес, жаңа CVE сізге тиіп-тиспегенін жылдам анықтау және ішкі аудит немесе тапсырыс берушінің талаптары кезінде компоненттердің шыққан жерін дәлелдеу үшін қажет.

SBOM‑ды құрастыру артефактісінің қасында сақтау жақсы: әр образ немесе пакет үшін жеке SBOM нұсқасы, өзгермейтін және құрастыру нөміріне байланған болуы тиіс. Сол кезде инцидент болғанда айдың ішінде продта не тұрғанын болжауға тура келмейді.

Қабылдау саясаттары: ережелер, исключениялар және қайта қарау

Саясаттар қысқа және орындалатын болғанда жұмыс істейді. Негізгі жиын әдетте релизді критикалық CVE болса блоктауды, лицензияларды бақылауды (сонымен қатар коммерциялық ПО үшін белгілі түрлерді тыйуды), тәуелділіктің «жасы» бойынша шектеуді (егер N айдан бері жаңартылмаған болса, жоспар талап етіледі), нұсқаларды бекіту міндеттігін (салмақсыз диапазондарсыз) және рұқсат етілген көздер тізімінің бірлігі (репозиториилер мен реестрлер) қамтиды.

Исключениялар болмауы мүмкін емес. Ең бастысы — олар «мәңгі» болмауы керек. Жақсы процесс мынандай:

  • әзірлеуші себеп пен мерзімі көрсетілген исключение сұрауын жасайды
  • қауіпсіздік тәуекел мен шарттарды растайды (мысалы, өтеме шаралар)
  • өнім иесі бизнес шешім қабылдайды (шығаруға не күтуге бола ма)
  • исключение автоматты түрде мерзімі өтіп, қайта қарауды талап етеді

Қарапайым мысал: банк интеграциялық жобасының командасы транзитивтік кітапханада критикалық CVE тапты, бірақ патч аптадан кейін шығады. Паника орнына релизді 7 күндік уақытша исключениемен шығарасыз, нұсқаны бекітесіз, мониторинг қосып, кейін жаңартуды жоспарлайсыз. Апта өткенде саясат қайта қарауды еске салады — осылай тәуекел «жер астында» қалмайды.

Секреттер: сақтау, сканирлеу және ротацияны ауыртпалықсыз ұйымдастыру

Секреттер әдетте «жаман криптографиядан» емес, әдеттерден ағып кетеді. Кілт репозиторияға қате түседі, токен wiki‑де қалады, пароль код арқылы айнымалыға беріледі. Маңыздысы — осындай істерге тыйым салумен қатар адамдарға дұрыс жұмыс істеуге ыңғайлы құрал беру.

Бастапқы қарапайым ереже: секреттер кодтың сыртында өмір сүруі тиіс. «Уақытша ғой» дегенге сенбеңіз. Минимумнан алып тастаңыз: репозиториилер (коммит тарихымен және конфиг мысалдарымен), бастапқы кодтағы мәндер мен конфигурациялық файлдар, корпоративтік wiki, тикеттер мен чаттар, командалық ортақ қалталар мен «командаға арналған» жазбалар, сондай‑ақ локалдық машиналардағы бақылаусыз және мерзімсіз айнымалылар.

Содан кейін секрет менеджері қажет, «қолжетімділіктер кестесі» емес. Ол рөл бойынша кіру, аудит (кім және қашан сұрағаны) және мүмкіндігінше қысқа мерзімді кредиттелерді қолдауы керек. CI үшін бұл өте пайдалы: пайплайн қысқа мерзімге токен алып, әрекетті орындайды — содан кейін токен жарамайды. Логта немесе айнымалда ағып кетсе де, ол тұрақты қолжетімділікке айналмайды.

Секреттерді сканирлеуді бірнеше нүктеге қою керек, әйтпесе ағып кеткендерді тым кеш табасыз. Практикалық минимум: әзірлеушілерге арналған pre-commit немесе локалдық хук, MR/PR тексеруі, кесте бойынша тарихты сканирлеу және пайплайн логтары мен артефактілерді тексеру (секреттер жиі дәл сол жерде «шығады").

Ротация мен отоздау — бір рет жасалатын үлкен жоба емес, процедура болуы тиіс. Жақсы тәсіл: әр секреттің иесі, өмір сүру мерзімі және отоздау қадамы бар. Егер сканер коммитте токен тапса, команда 10 минут ішінде екі әрекет жасау керек: токенді отоздау және оны менеджер арқылы жаңасымен ауыстыру. Сосын ғана не болғанын талқылау керек.

Орталарды бөліп алыңыз: dev, test және prod үшін әртүрлі кілттер мен құқықтар болсын. Сонда тесттік секрет ағып кетсе де ол продтық мәліметтерге қолжетімділік бермейді. Типтік қателік — сол API кілтін тест пен продта бірге қолдану. Тек бір рет тесттік пайплайнда сұранысты логтау жеткілікті — продтың кілті фактілі түрде жарияланады.

Қауіпсіз құрастыру: қол қою, шығу тегі және артефактілерді сақтау

CI инфрақұрылымына қолдау
Қазақстан бойынша критикалық ИТ-инфрақұрылымға 24/7 қолдау және сервис желісін қосыңыз.
Қолдауды қосу

Қауіпсіз құрастыру — сіз дәлелдей алатын нәрсе: артефакт автоматтандырылған түрде, нақты коммиттен, бақылаулы ортада жиналған және кейін ешкім оны алмастырмаған. Корпоративті әзірлемеде бұл көбіне қосымша сканерден де маңызды: аудит пен тергеулер шығу тегіне және бүтіндікте тұрады.

Құрастыруды оқшаулау: тосынсыйларды азайту

Құрастыру болжамды болу тиіс. Егер раннерлер апталар бойы «өмір сүріп», оған қолмен кез келген нәрсе орнатуға болатын болса, бақылау жойылады: бүгін құрастыру өтті, ертең сол пайплайн басқа бинарь жинайды.

Практикалық минимум: таза раннерлер (бір рет қолданылатын немесе үнемі қайта жасалатын) және оқшауланған орта; job‑қа минималды құқықтар (құрастыру және жариялау үшін ғана); «жағдай бойынша» қолмен орнатуларға тыйым және құралдардың бекітілген нұсқалары; қажет болғанда ғана желі (интернетсіз құрастыру мүмкін болса — өшіріңіз); рөлдерді бөлу, сонда құрастыруда продқа деплой ету құқығы болмайды.

Қол қою және шығу тегі: тек формальдылықтан гөрі пайдалы

Артефактілер мен контейнер образдарын қол қою «нақты біздің бе және подмена жоқ па?» деген сұраққа тексерілетін жауап береді. Бұл аудитке көмектеседі және жеткізу тізбегінде подменадан туындайтын тәуекелді төмендетеді. Идеалда қолтаңбаны деплойдан бұрын тексеру керек: қол қойылмаған немесе басқа кілтпен қойылған артефакт өтпейді.

Шығу тегі (provenance) қол қоюды толықтырады: қай пайплайн іске қосқан, қай CI, қай репозиторий мен коммиттен, қай параметрлермен құрастырылғанын көрсетеді. Осылай инцидент кезінде қандай нұсқалар әсерленгенін тез тауып, не қайтаруға болатынын түсінесіз.

Бір басқа бақылау нүктесі — базалық образдар. latest қолдануға тыйым салыңыз және нұсқаларды (жақсырақ digest арқылы) бекітіңіз, әйтпесе екі бірдей пайплайн әртүрлі нәтижелер бере алады. Жаңартуларды кестеге сай және PR арқылы жүргізіңіз, сол кезде өзгерістер көрініп, тексеріледі.

Артефактілерді басқарылатын репозиторийде сақтаңыз: рөлдер бойынша қолжетімділік, релиздер үшін өзгермейтін тегтер және сақтау мерзімдері (retention). Финал релиздер үшін тегтер мен қолтаңбалар өзгермейтін болуы тиіс; nightly құрастырулар үшін қысқа сақтау мерзімін ұстаңыз, артық қалдық жинамау және ескі нәрсені кездейсоқ деплойламау үшін.

Егер сіз корпоративтік деректер орталығында құрастыру мен сақтау инфрақұрылымын тұрғызсаңыз, осы ережелерді саясат ретінде бекітіңіз: құрастыру соларға сай болмаса, релиз деп есептелмейді.

DevSecOps‑ты CI/CD‑ге енгізуге қадамдық жоспар

DevSecOps‑ты кіші қадамдармен енгізген жөн. Осылай тәуекелді төмендетіп, релиз процессін бұзбайсыз.

Бастапқыда не бар екенін картаға түсіріңіз. Компанияда жиі ондаған пайплайн бар: әртүрлі командалар, репозиторийлер, ортақ конфигурациялар. Қай жерде код құрастырылатынын, тәуелділіктер қайдан алатынын, кім айнымалыларды өзгерте алатынын және артефактілер қайда жарияланатынын түсіну маңызды.

Сосын бақылауды кезең-кезеңмен қосыңыз: алдымен бақылау режимінде, кейін блоктау режимінде:

  • инвентаризация: пайплайндар тізімі, негізгі репозиторийлер, контейнер реестрлері және артефактілер сақтау орындары, плюс рөлдер мен құқықтар
  • тәуелділіктер мен секреттерді алғашқы кезеңде есептер режимінде сканирлеу (құрастыруды тоқтатпай), нақты картинаны көру үшін
  • блоктау ережелері: тек критикалық осалдықтарда релизді тоқтату, қалғандары үшін түзету мерзімдері мен жауаптыларды белгілеу
  • құрастыру мен жариялауды бақылау: артефактілерді қол қою, құрастырудың шығу тегін тексеру, продтық сақтау орындарға қолмен жүктеуге тыйым
  • аудит пен метрикалар: қанша табылды, қай жерде пайда болды, түзетуге қанша уақыт кетті; отдельный қысқа және тексерілетін исключения процесі

Блоктау шегін біртіндеп енгізіңіз. Бастапқыда әдетте тек critical блокталады, қалғаны жұмыс жоспарына айналады — бұл шу мен командалардың есепсіздігіне әкелмейді.

Мысал: мемлекеттік тапсырысқа арналған серверлік образ дайындаған команда кітапханада жаңа CVE тапты. Егер сканирлеу кірістірілген болса, есепте қай нұсқада осалдық бар және қай жерде пайда болғаны көрсетіледі. Саясат бойынша релиз тек критикалық жағдайда ғана блокталады. Егер жоқ болса — жауапты мен мерзімі бар тапсырма құрылады және релиз дағдарысқа айналмайды.

Процесс тұрақтаса, бақылауды кеңейтіңіз: жекелеген жобаларға саясаттар қосып (мысалы, жоғары талаптары бар жүйелер үшін) және қаталдықты біртіндеп көтеріңіз.

Релизді тежемей қалай жұмыс істеу: сканерлеу режимдері мен оптимизация

CI және registry платформасы
Құрастырулар, образ реестрі және тәуелділіктерді сканирлеу үшін стойка мен ресурстарды таңдаймыз.
КП сұрау

DevSecOps‑пен жиі мәселе — тексерістер емес, олардың әр оқиға үшін бірдей іске қосылуы: кішкентай коммит те, релиз те. Егер тексерістерді режимдерге бөліп, кэш пен параллелизмді дұрыс орнатсаңыз, қауіпсіздік тежеушіге айналмайды.

Кезексіз сканерлеу режимдері

Жеңіл тексерістер әрқашан жүруі тиіс, ауырлары — тек маңызды сәттерде.

  • әр коммитте: өзгерген файлдарға жылдам SCA, базалық секрет іздеу, минималды саясаттар
  • main‑де: қатаңырақ ережелер мен кеңейтілген тексерістер, бірақ уақыт шектеуімен
  • релиз алдында: толық прогон (SBOM, кеңейтілген саясат, лицензия тексеруі) қатал fail-пен
  • кестеге сай (түнде немесе демалыста): терең сканерлер және жаңа CVE‑ларды қайта бағалау

Осылайша пайплайнның орташа уақыты қысқарады, бірақ ең маңызды жерлерде бақылау сақталады.

Оптимизация: кэш, дифф және параллелизм

CI/CD‑дегі ең қымбат операциялар көбіне қайталанады. Уязвимдік базаларын және скан нәтижелерін кэштеңіз, әр құрастыру үшін бәрін қайта жүктеп өңдеудің қажеті жоқ. Монорепо үшін дифф‑скан өте маңызды: бір кітапхана немесе бір сервис өзгерсе, бүкіл репозиторийді тексерудің мәні жоқ.

Параллелизм пайдалы, бірақ оны шектеу керек. Барлық сканерлерді барлық жобаларда бір уақытта іске қоссаңыз, пайплайн инфрақұрылымды «жеп» алады. Параллель тапсырмаларға лимиттер мен тексерістерге таймауттар қойыңыз, олар әзірлеуді тежемеуі тиіс.

Қатаңдық градацияларын ойлаңыз: feature‑бұтақтарда warning, main‑де критикалықтер үшін fail, релиз алдында қатал стоп‑критерийлер. Мысал: критикалық CVE релизді блоктайды, жоғарысы тапсырма мен мерзімді талап етеді, орташа деңгей бэклогқа түсіп, иесі бекітіледі.

Сценарий мысалы: табылған CVE кезінде паникасыз релиз

Үлкен банк (немесе мемлекеттік орган) ішкі сервис жаңартуын дайындап жатыр: API‑ға жеңіл өзгертулер және есеп модулі. Өзгеріс қауіпсіз көрініп, құрастыру мен тесттер жасыл. Бірақ соңғы PR‑да дамушы жаңа пакет қойып, ол транзитивтік тәуелділік арқылы критикалық CVE тартады.

Пайплайн екі режиммен жұмыс істейді. Feature/merge request тармақтарында сканер ерте сигнал береді: мәселені аңғартады, бірақ команданың жұмысын бұзбайды. Релиз контурында ережелер қатал: саясатқа тікелей қайшы келетін нәрсе шығарылмауы керек.

Бұл қалай көрінеді:

  • merge request‑та SCA транзитивтік кітапханда CVE тауып, қай тәуелділік тізбегі осалдығын әкелгені және фикс бар ма екені туралы анық есеп береді
  • MR автоматты түрде блокталмайды, бірақ релизге дейін түзету жоспарын растау міндеттеледі
  • релиз жинау кезінде саясат қатал: егер осалдық критикалық болса, релиз job тоқтатылады
  • dev құрастырулары жылдам қалады: әзірлеушілер ұзақ тексерулерге күтпей жұмысын жалғастыра береді

Командада екі жол бар: тәуелділікті жаңарту (ең жақсы нұсқа) немесе уақытша исключение рәсімдеу, егер фикс релиз доңғалағынан тыс болса. Исключение «рұқсат етіңізші» деп чатта ғана емес, қысқа жазба түрінде болады: мерзімі, қайта қарау күні, себеп, жауапты және өтеме шаралар көрсетіледі (мысалы, функционалды өшіру, қосымша тексеру, қолжетімділікті шектеу) және түзету жоспарының сілтемесі.

Исключение нақты компонент пен нұсқаға байланады, жобаның барлық бөліктеріне емес. Содан кейін релиз job тек жарамды исключение болған жағдайда ғана жалғасады. Есепте не табылғаны, кім рұқсат бергені, қанша мерзімге және не істелетіні сақталады.

Нәтижесі оңай: релиз тосынсыйсыз шығады, команда соңғы сағатта жанжалдамайды, ал қауіпсіздік пен аудит шешімдер тарихын көреді.

Енгізуде жиі кездесетін қателіктер мен тұзақтар

Артефактілерді сенімді бақылауға алу
Рөлдер бойынша қолжетімділіктер мен өзгермейтін релиздермен сақтау контурын жобалаймыз.
Жоба талқылау

Ең кең тараған мәселе — қауіпсіздікті бірден қосып, барлығын «қызылға» түсіру: кеше бәрі жүрді, бүгін барлық пайплайндар құлайды. Командалар тексерістерді айналып өтуге, қадамдарды өшіруге немесе есептерді «жасап қоюға» кіріседі, сонда осалдықтар емес, есептер түзеледі. Жұмыс істейтін жол — кезең-кезеңімен енгізу және не үшін қажет екенін түсіндіру.

1) Барлығын бірден блоктап, саботаж алу

Егер әр коммит үшін міндетті сканирлеу жасасаңыз, тез кезектер, қызыл жинақтар және реніш пайда болады. Көпшілік қателік — қызметтің сыныбына қарамай бір қатал шекті қолдану.

Пракcтикада бақылау режимінен бастаңыз: нәтижелерді жинаңыз, жалған табуларды алып тастаңыз, шектік мәндерді келісіңіз. Тек содан кейін нағыз қауіпті жағдайлар үшін блоктауды қосыңыз (мысалы, қоғамдық қолжетімді сервиске қатысты критикалық CVE).

2) Секреттерді конфигтерден ажырата алмау және «қалай болса солай» қолжеткізу беру

Токендер айнымалыларда, .env файлдарында, репозиторий конфигінде, чаттарда, тикеттерде — сонда ағады. Тағы жаман: бір «универсальды» токен барлық орталарға жарамды.

Қарапайым әрі дұрыс мақсат: секреттер конфигтен бөлек, қолжетім минималды, dev/stage/prod үшін бөлек кілттер және түсінікті ротация. Егер секрет ағып кетсе, кім өзгертетінін, қай жерде және не бұзылатынын анықтау жеңіл болуы тиіс.

3) Сканерге сеніп, базалық образдарды ұмыту

Жақсы сканер де айлық жаңартылмаған base image‑ты алмастырмайды. Сол уязвимдіктерді қайта-қайта көресіз және командалар оларды елемеуге үйренеді.

Минимум: базалық образдарды кестеге сәйкес жаңартыңыз және нұсқаларды бекітіңіз; рұқсат етілген образдар мен реестрлер жиынтығын шектеңіз; артефактілер мен образдарды шыққан жері анық болатындай сақтаңыз; контейнердегі тәуелділіктерді де тексеріңіз; критикалық табуларды түзету уақыты қанша екенін өлшеңіз.

4) Исключение процесі болмаса бақылауды жоғалту

Исключения әрқашан болады: патч жоқ осалдық, қолдаусыз кітапхана, уақытша шешім. Қате — исключенияларды чатта «қолмен» жасау. Қажет түрде мерзім, иесі, себеп және автоматты еске салғыш болу керек. Әйтпесе бір тоқсаннан кейін «уақытша» исключениялар ондағанға жетеді.

5) Құрастыру агенттеріне сенім арту, оқшаулаусыз және аудитсіз

Құрастыру агенті көбіне бастапқы кодқа, секреттерге және артефакті репозиторияларына қол жеткізеді. Егер ол жалпы және нашар бақыланса — шабуыл үшін ыңғайлы нүкте. Корпоративтік ортада, әсіресе мемлекеттік немесе қаржы тапсырыстарында, құрастыруларды қайта өндіруге болатын және агенттерге қолжетімдіктер шектелген болуы маңызды.

Қысқа чек‑тізім және келесі қадамдар

Жұмысты қысқа тексерумен аяқтау пайдалы: не қорғалған, ал қай жерлерде әлі «ауызша» ғана кеп.

Базалық CI/CD контурында әдетте бес нәрсе жеткілікті: негізгі тармақтарда және релиз алдында автоматты тәуелділіктер мен секреттерді сканирлеу; анық блоктау шектері (не құрастыруды тоқтатады және не техдолгқа түседі мерзіммен); критикалықтігіне қарай түзету мерзімдері, баршаға көрінетін түрде; орталықтандырылған секрет сақтау менеджері рөл бойынша қолжеткізу, аудит және жүйелік ротациямен; артефактілерге қол қою және оларды алмастыруға болмайтын қорғаулы сақтау.

Блоктау шегінің принципі: команда пайплайнды орташа ескертулерден үнемі «бұзып» жатса, олар тексерістерді өшіреді. Сондықтан шын мәнінде қауіпті жағдайларды ғана блоктап, қалғанын міндетті тапсырмалар мен мерзімдер арқылы жүргізген жөн.

Кейін ең маңыздысы — шашылмау. Кішкентай пилот жүргізіңіз, сонда келісімдер практикада орындалады: бір өнім және бір тип пайплайнды таңдаңыз (мысалы, ең жиі релиз болатын сервис); саясаттарды бекітіңіз (исключенияларды кім шешеді, уақытша рұқсат қалай рәсімделеді, қайда сақталады); есепті бір жерде жинаңыз, не тоқтатылғаны, не істеліп жатқаны және не мерзімі өтіп кеткені көрінсін; тест CVE немесе ағып кеткен токен бойынша қысқа «оқыту дабылын» өткізіңіз; инфрақұрылымды бекітіңіз — сенімді CI серверлері, қорғалатын артефакті сақтау және техникалық қолдау регламенті.

Егер CI/CD сізге маңызды болса, инфрақұрылымды өндірістік жүйе ретінде тұрғызыңыз. Практикада бұл көбіне бақыланатын серверлік платформаларға, ашық жеткізу тізбегіне және резервтік-қалпына келтіру қолдауына тіреледі. Мұндай жобаларда жергілікті өндіруші мен интеграторға — мысалы, GSE.kz (gse.kz) — сенуге болады: аппараттық жабдық, жүйелік интеграция және қолдау бір контурда болса, құрастыру ережелерін құру және ақаулардан тез қалпына келтіру жеңілдей түседі.

FAQ

CI/CD‑де тәуекелдердің ең үш жиі орналасатын аймағы қайсы?

Негізгі тәуекелдер әдетте үш жерде кездеседі: **тәуелділіктер**, **секреттер** және **құрастыру ортасы**. - Тәуелділіктер: осал немесе алмастырылған пакеттер, «ағымдағы» нұсқалар, қауіпсіз емес базалық образдар. - Секреттер: репозиторийде, логтарда, артефактілерде немесе бақылаусыз орталардағы токендер/кілттер. - Құрастыру: жалпыға ортақ немесе «ұзақ өмір сүретін» раннерлерге берілген артық құқықтар, нәтижесінде бөтен код артефакттың ішіне енуі мүмкін.

CI‑токендер мен сервис аккаунттардың құқықтарын қалай дұрыс шектеу керек?

Бастапқыда **минималды құқықтар** және қысқа мерзімді рұқсаттар енгізіңіз. Практика: - Құпия кілттерді бөліңіз: оқу, құрастыру, жариялау, деплой үшін бөлек токендер. - Барлығын істей алатын «универсальды» токендерді тыйыңыз. - Тек қажетті репозиторийлер мен реестрлерге және тек job мерзімі үшін рұқсат беріңіз. - CI айнымалыларын және пайплайн конфигурациясын кім өзгерте алатынын шектеу.

SCA‑да нақты не сканирлеу керек, ол жай ғана «қорапқа қою» болмауы үшін?

Бастапқыда жеткілікті: **қолданба тәуелділіктеріне SCA**, плюс бөлек тексеріс **құрастыру тәуелділіктері** (плагиндер, раннерлер, утилиталар). Есепте тексерілетіндер: - CVE мен олардың сыныбы. - Лицензиялар. - Нұсқалардың бекітілгендігі (диапазондар мен `latest` жоқ па). - Транзитивтік тәуелділіктер (оларды да тікелей сияқты қарау керек). Одан кейін блоктау ережелерін тек шын мәнінде қауіпті жағдайларға ғана қосыңыз.

SBOM не үшін қажет және оны қайда сақтау керек?

SBOM «белгілі бір релиз не нәрседен тұрады?» деген сұраққа жауап береді. Ол жаңа CVE сізге әсер еткенін тез анықтау және компоненттердің шығуын аудитте растай алу үшін қажет. Жақсы минимум: - Әр артефакт/образ үшін SBOM жасаңыз. - SBOM‑ды артефактпен **жанына**, релиздің бөлігі ретінде сақтаңыз. - SBOM‑ды **өзгермейтін** етіп және құрастыру/нұсқа санына байлаңыз.

Неліктен секреттер көбіне CI/CD арқылы ағып кетеді?

Секреттер әдетте «тыныштықпен» және оңай түрде ағып кетеді: - секрет коммитке түседі (оның ішінде тарихқа); - секрет пайплайн логтарында «жарқ» етеді; - секрет кездейсоқ артефактіге салынуы мүмкін; - бір кілт dev/test/prod барлығы үшін қолданылады. Жұмыс ережесі: **секреттер кодтың сыртында тұруы тиіс**, ал оларға рұқсат рөлдер арқылы және аудитпен берілуі керек.

Секреттерді қай жерге сканирлеу керек, оларды уақытылы табу үшін?

Нақты проблемаларды уақытында ұстап қалу үшін минимум мына жерлерде сканирлеу қажет: - локалда: pre-commit/хук (ағып кетуді ең арзан тоқтату); - MR/PR‑да: merge алдында міндетті тексеру; - кестеге сай: тарих пен ескі тармақтарды сканирлеу; - CI‑де: логтар мен артефактілерді тексеру (секреттер жиі дәл осында «шыққан» болады). Маңызды: табылғаннан кейін әрекет жоспары болсын — токенді отоздау және ауыстыру минуттармен орындалуы керек.

Командаға ауыртпалық түсірмей секреттерді қалай ротациялау және отоздау керек?

Ротацияны бір рет жасалатын жоба емес, процедура етіңіз. Практикалық стандарт: - әр секреттің **иесі**, өмір сүру мерзімі және отоздау қадамы бар; - dev/test/prod үшін бөлек секреттер; - репозиторийде табылғанда: **алдымен отоздау**, кейін менеджер арқылы ауыстыру, содан соң себебін талдау; - мерзімсіз «мәңгі» токендерді болдырмаңыз.

Компрометация тәуекелін азайту үшін құрастыру агенттерін қалай оқшаулау керек?

Құрастыруды **басқарылатын және болжамды** ету үшін: - бір рет қолданылады немесе жиі қайта жасалады раннерлерді қолданыңыз; - құрастыру агенттерінде «жағдайға байланысты» қолмен орнатуларға тыйым салыңыз; - құрастыру құралдарының нұсқаларын бекітіңіз; - желіні шектеңіз (интернет қажет болмаса өшіріңіз); - рөлдерді бөліңіз: құрастыруда продқа деплой ету құқығы болмауы тиіс. Осылайша бірдей пайплайн әр түрлі бинариктер жинай бастайтын жағдайлар азаяды.

Артефактілерге қол қою керек пе және ол не береді?

Қол қою сұранысқа жауап береді: **бұл дәл біздің артефакт және ол өзгертілмеген бе?** Практикалық қолдану: - финалдық артефактілер мен контейнер образдарын қол қойыңыз; - қол қоюды **деплой алдында** тексеріңіз (қол қойылмаған — өтпейді); - релиз тегтері мен қолтаңбаларды **өзгермейтін** етіп сақтаңыз; - provenance қосыңыз: қай пайплайн, қай коммит, кім іске қосқан, қандай параметрлер. Бұл тергеулер мен шыққан жерін растауға өте пайдалы.

DevSecOps енгізіп, пайплайндарды қалай тым баяулатпауға болады?

Тексерулерді режимдерге бөліп, тек жоғары тәуекелділерді блоктаңыз. Жұмыс схемасы: - әр коммитте: жылдам тексерулер (секреттер, базалық SCA); - main‑де: уақыт шектеулі кеңейтілген тексерулер; - релиз алдында: толық прогон және қатал стоп‑критерийлер; - кестеге сай: терең сканерлеулер және жаңадан шыққан CVE‑лерге қайта баға. Қосымша оптимизация: уязвимдік базаларын кэштеу, дифф‑скан қолдану, параллелділікті шектеу, CI инфрақұрылымды «жеп» алмау үшін.