Sdílet prostřednictvím


Zabezpečení služby Azure Pipelines

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

Pipelines nabízejí silné možnosti pro spouštění skriptů a nasazování kódu do produkčních prostředí, ale je důležité vyvážit tuto moc se zabezpečením. Nikdy nechcete, aby se kanál stal konduitem škodlivého kódu. Vyvážení zabezpečení s flexibilitou a výkonem potřebnými vývojovými týmy je nezbytné.

Tento článek obsahuje přehled nezbytných konfigurací souvisejících se zabezpečením, které chrání vaše kanály před hrozbami a ohroženími zabezpečení.

Požadavky

Kategorie Požadavky
Azure DevOps - Implementujte doporučení v tématu Zabezpečení Azure DevOps.
– Základní znalost YAML a Azure Pipelines. Další informace naleznete v tématu Vytvoření prvního potrubí.
Oprávnění - Aby bylo možné upravit oprávnění kanálů, je nutné být členem skupiny Správci projektu.
- Chcete-li upravit oprávnění organizace: Musíte být členem skupiny Správci kolekce projektů.

Omezení přístupu k připojení k projektu, úložišti a službám

Pokud chcete zvýšit zabezpečení, zvažte oddělení projektů, použití zásad větví a přidání dalších bezpečnostních opatření pro forky. Minimalizujte rozsah připojení služeb a používejte nejbezpečnější metody ověřování.

  • Samostatné projekty: Spravujte jednotlivé produkty a týmy v samostatných projektech. To brání potrubím z jednoho produktu neúmyslně přistupovat k otevřeným prostředkům z jiného produktu, což omezuje boční expozici.
  • Použijte identity na úrovni projektu: Použijte identitu sestavení založenou na projektu pro kanály místo identity na úrovni kolekce. Identity na úrovni projektu můžou přistupovat pouze k prostředkům v rámci jejich přidruženého projektu, což minimalizuje riziko neoprávněného přístupu ze strany aktérů se zlými úmysly. Další informace najdete v identitách sestavení s vymezeným oborem a rozsahu autorizace úloh.
  • Použijte zásady větve: K zajištění bezpečných změn kódu a kanálu použijte oprávnění a zásady větví. Kromě toho zvažte přidání oprávnění kanálu a kontrol do úložišť.
  • Přidejte další zabezpečení forků: Když pracujete s veřejnými úložišti z GitHubu, pečlivě zvažte svůj přístup k vytváření forků. Forky pocházející mimo vaši organizaci představují konkrétní rizika.
    • Nezadávejte tajné kódy pro vytváření forků: Ve výchozím nastavení jsou kanály nakonfigurované pro vytváření forků, ale tajné kódy a chráněné prostředky nejsou automaticky vystaveny úlohám v těchto kanálech. Je nezbytné nezakazovat tuto ochranu, aby se zachovalo zabezpečení.
    • Zvažte ruční aktivaci sestavení forku: Vypněte automatické sestavení forku a použijte komentáře k žádostem o přijetí změn k ručnímu sestavení těchto příspěvků. Toto nastavení vám dává příležitost zkontrolovat kód před aktivací sestavení. Další informace najdete v tématu Vypnout automatická sestavení větví.
    • Nezadávejte tajemství pro sestavení forku: Ve výchozím nastavení nejsou tajemství přidružená k vašemu pipeline dostupná pro ověřování pull requestů forků. Nepovolujte možnost Zpřístupnit tajné kódy pro sestavení forků. Pokyny k vyhledání a ověření tohoto nastavení najdete v tématu Příspěvky z forků.
    • Zvažte ruční aktivaci sestavení forku: Vypněte automatické sestavení forku a použijte komentáře k žádostem o přijetí změn k ručnímu sestavení těchto příspěvků. Toto nastavení vám dává příležitost zkontrolovat kód před aktivací sestavení. Pokyny, jak to udělat, najdete v části Vypnutí automatického sestavování forků.
    • Používejte agenty hostované Microsoftem pro sestavení forku: Vyhněte se spouštění sestavení z forků na agentech v místním prostředí. To by mohlo externím organizacím umožnit spouštění externího kódu na počítačích v podnikové síti. Kdykoli je to možné, použijte agenty hostované Microsoftem.
    • Použijte aplikaci Azure Pipelines GitHub pro omezení rozsahu tokenu: Když vytvoříte pull request z fork na GitHubu, Azure Pipelines zajistí, že pipelines nemůže změnit žádný obsah úložiště GitHub. Toto omezení platí jenom v případě, že k integraci s GitHubem používáte aplikaci Azure Pipelines GitHub.

Zabezpečení připojení služeb

  • Minimalizujte rozsah připojení služeb: Připojení služeb by měla mít přístup pouze k potřebným prostředkům. Při vytváření nového připojení služby Azure Resource Manager vždy zvolte konkrétní skupinu prostředků. Ujistěte se, že skupina prostředků obsahuje pouze potřebné virtuální počítače nebo prostředky potřebné pro sestavení. Pokyny k nastavení připojení služeb najdete v tématu Použití připojení služby Azure Resource Manager.
  • K ověřování použijte federaci identit úloh: Kdykoli je to možné, použijte federaci identit úloh místo instančního objektu pro připojení ke službě Azure. Federace identit úloh využívá Open ID Connect (OIDC), což je standardní technologie, která usnadňuje ověřování mezi Azure a Azure DevOps bez nutnosti spoléhat se na tajné kódy. Pokyny k tomuto postupu najdete v tématu Vytvoření připojení služby s federací identit úloh (automaticky).
  • Minimalizovat přístup k aplikacím GitHubu: Když nakonfigurujete aplikaci GitHub na Azure DevOps, udělte přístup jenom k úložištím, která chcete sestavit pomocí kanálů.
  • Omezit připojení služby na konkrétní větve: Pomocí kontroly řízení větví omezte, které větve můžou používat vaše připojení ke službě. Kontrola větve zajišťuje, že připojení služeb běží jenom na autorizovaných větvích a všechny propojené prostředky pipeline jsou sestavené z povolených větví.

Použití kanálů YAML místo klasických kanálů

Pokud chcete přidat zabezpečení a snížit riziko náhodných chybných konfigurací, použijte kanály YAML místo klasických kanálů. Toto opatření brání obavám o zabezpečení, které vznikají při sdílení stejných prostředků v YAML a klasických kanálech, jako jsou služební připojení. Pokud vaše organizace používá klasické kanály, migrujte kanály do YAML.

  • YAML nabízí výhody infrastruktury jako kódu: Zachází s kanály YAML stejně jako s jakýmkoli jiným kódem, protože kroky a závislosti jsou definovány v kódu. Existuje také jasný přehled o konfiguracích kanálu a snížení rizika náhodných chybných konfigurací.
  • Kanály YAML je možné kombinovat s vylepšenými bezpečnostními opatřeními: Prostřednictvím kontrol kódu a žádostí o přijetí změn můžete pomocí zásad větví nastavit proces kontroly žádostí o přijetí změn, aby se zabránilo chybnému sloučení.
  • Správa přístupu k prostředkům: Vlastníci prostředků řídí, jestli má kanál YAML přístup ke konkrétním prostředkům. Tato funkce zabezpečení zabraňuje útokům, jako je krádež jiného úložiště. Pomocí schválení a kontrol můžete poskytnout řízení přístupu pro každé spuštění kanálu.
    • Kontrola chráněné větve: Pokud máte procesy ruční kontroly kódu pro konkrétní větve, můžete tuto ochranu rozšířit na kanály. Kontrola chráněné větve prostředku brání automatickému spuštění kanálů na neautorizovaných větvích.
    • Ruční kontrola schválení: Použijte ruční kontrolu schválení k zablokování žádostí o potrubí v používání chráněného prostředku, dokud nebudou ručně schváleny konkrétními uživateli nebo skupinami.
    • Kontrola pracovní doby: Pomocí této kontroly se ujistěte, že nasazení v rámci potrubí se spouští ve specifikovaném časovém okně dne.
  • Zakázat vytváření klasických pipeline: Nezávisle zakažte vytváření klasických kanálů buildu a klasických předávacích kanálů. Pokud jsou oba zakázané, není možné vytvořit žádný klasický kanál buildu, kanál klasické verze, skupiny úloh nebo skupiny nasazení prostřednictvím uživatelského rozhraní nebo rozhraní REST API. Další informace najdete v tématu Zakázání vytváření klasických kanálů.

Zabezpečení agentů

Pokud chcete zabezpečit kontejnery, označte svazky jako jen pro čtení, nastavte limity prostředků, používejte důvěryhodné obrazy, skenujte zranitelnosti a vynucujte zásady zabezpečení.

  • Používejte Microsoftem hostované agenty místo samostatně hostovaných: Agenti hostovaní Microsoftem nabízejí izolaci a čistý virtuální počítač pro každé spuštění pásma. Místo agentů v místním prostředí používejte agenty hostované Microsoftem. Další informace najdete v tématu Agenti hostovaní Microsoftem.
  • Samostatné agenty pro každý projekt: Chcete-li zmírnit laterální pohyb a zabránit křížové kontaminaci mezi projekty, udržujte samostatné fondy agentů, z nichž každý je vyhrazený pro konkrétní projekt.
  • Ke spouštění agentů používejte účty s nízkými oprávněními: Pokud chcete zvýšit zabezpečení systému, použijte pro spouštění agentů v místním prostředí nejnižší privilegovaný účet. Zvažte například použití účtu počítače nebo identity spravované služby. Nespouštějte agenta pod identitou s přímým přístupem k prostředkům Azure DevOps.
  • Izolujte produkční artefakty a citlivé fondy agentů: Pro prevenci bezpečnostních problémů používejte různé fondy agentů.
    • Pro produkční artefakty použijte samostatný fond agentů: Izolujte produkční artefakty pomocí jedinečného fondu agentů, což brání náhodnému nasazení z neprodukčních větví.
    • Segmentace citlivých fondů: Vytvořte samostatné fondy pro citlivé a nesmyslné úlohy. Povolte přihlašovací údaje pouze v definicích sestavení přidružených k příslušnému fondu.
  • Nakonfigurujte omezující brány firewall pro agenty v místním prostředí: Nastavte brány firewall tak, aby byly co nejvíce omezující, a zároveň povolte agentům fungování a vyvažte zabezpečení s použitelností.
  • Pravidelně aktualizujte fondy agentů v místním prostředí: Udržujte agenty v místním prostředí aktuální s pravidelnými aktualizacemi, abyste zajistili, že ohrožený kód není spuštěný, což snižuje riziko zneužití.

Bezpečné použití proměnných a parametrů

Bezpečné používání proměnných a parametrů v potrubích pomocí osvědčených postupů pro nastavení tajemství. Mezi osvědčené postupy patří omezení použití tajemství, použití proměnných času ve frontě a povolení ověření argumentů úloh skriptu pro ochranu procesu před hrozbami a zranitelnostmi.

  • Omezit přístup k tajným kódům: Odeberte z kanálů všechny tajné kódy nebo klíče. Přechod na metody ověřování bez tajných kódů, jako je federace identit úloh nebo nastavení tajných kódů v uživatelském rozhraní, skupina proměnných nebo skupina proměnných ze služby Azure Key Vault.
  • Povolit ověření parametru prostředí: Pokud je povolené nastavení Povolit ověření parametrů úloh prostředí , přidá se kontrola znaků, jako jsou středníky, uvozovky a závorky. Zapněte Povolit ověřování parametrů argumentů úkolů v shellu na úrovni organizace nebo projektu v sekci Nastavení>Pipelines>Nastavení.
  • Omezte proměnné, které je možné nastavit v době fronty: Zabraňte uživatelům v definování nových proměnných v době fronty povolením nastavení omezit proměnné, které lze nastavit v době fronty v Nastavení organizace>Pipelines>Settings.
  • Místo proměnných použijte parametry: Na rozdíl od proměnných nemůže spuštěný kanál upravovat parametry kanálu. Parametry mají datové typy, například number a stringa mohou být omezeny na konkrétní podmnožinu hodnot. Toto omezení je užitečné, když by uživatel konfigurovatelný aspekt kanálu měl přijímat pouze hodnoty z předdefinovaného seznamu a zajistit, aby kanál nepřijme libovolná data.
  • Referenční tajné kódy ze šablon: Místo zahrnutí vložených skriptů s tajnými parametry přímo v kanálu YAML použijte šablony k abstrakci citlivých informací mimo hlavní kanál. Pokud chcete tento přístup implementovat, vytvořte pro svůj skript samostatný soubor YAML a uložte ho do samostatného zabezpečeného úložiště. Pak můžete na šablonu odkazovat a předat proměnnou tajného kódu v YAML jako parametr. Zabezpečená proměnná by měla pocházet ze služby Azure Key Vault, skupiny proměnných nebo uživatelského rozhraní kanálu. Další informace najdete v tématu Použití šablon.
  • Omezte tajemství pomocí zásady větve a oprávnění skupiny proměnných: Můžete použít kombinaci oprávnění skupiny proměnných, podmíněného vkládání úloh a zásady větve, abyste měli jistotu main, že jsou tajemství svázána s větví. Další informace najdete v tématu Ochrana tajných kódů.
  • Pomocí setvariable omezte nastavení proměnných: Pomocí atributu settableVariables můžete nakonfigurovat, které proměnné mohou autoři kanálu nastavit v kanálu. Bez tohoto nastavení můžou autoři kanálu deklarovat neomezené nové proměnné pomocí setvariable příkazu protokolování. Když zadáte prázdný seznam with settableVariables, nastavení všech proměnných se nepovolí. Další informace najdete settableVariables v atributu ve schématu YAML.

Nejlepší metodou, jak chránit tajemství, je žádné tajemství vůbec nemít. Nepoužívejte tajné kódy, pokud je to možné, nikdy je neukládejte do souborů YAML a ujistěte se, že nejsou protokolované nebo vytištěné, aby se zachovalo zabezpečení.

  • Pokud je to možné, vyhněte se používání tajemství: Zkontrolujte, zda váš pipeline může použít jinou metodu než použití tajemství k provedení úkolu, například připojení ke službě pomocí federace identit zátěže nebo spravované identity. Spravované identity umožňují vašim aplikacím a službám ověřovat se v Azure bez nutnosti explicitních přihlašovacích údajů. Další informace najdete v tématu Použití principálů služeb a spravovaných identit. Neukládejte tajné kódy do YAML: Nikdy neukládejte citlivé hodnoty jako prostý text do souboru .yml Azure Pipelines.
  • Nezapisujte ani netiskejte tajné kódy: Vyhněte se opakování tajných kódů v konzole, použijte je v parametrech příkazového řádku nebo je protokolujte do souborů. Azure Pipelines se pokouší vyčisťovat tajné kódy z protokolů všude, kde je to možné, ale nemůže zachytit všechny způsoby úniku tajných kódů.
  • Nepoužívejte strukturovaná data, jako je JSON, jako tajné kódy: Vytvořte pro každou citlivou hodnotu jednotlivé tajné kódy. Tento přístup zajišťuje lepší přesnost redakce a minimalizuje riziko neúmyslného zveřejnění citlivých dat.

Auditování a obměna tajných kódů

Pokud chcete zabezpečit kanály, pravidelně auditujte zpracování tajných kódů v úlohách a protokolech, kontrolujte a odebírajte nepotřebné tajné kódy a obměňujte tajné kódy, abyste minimalizovali rizika zabezpečení.

  • Auditovat zpracování tajných kódů v úlohách a protokolech: Kontroluje úlohy, aby se zajistilo, že se tajné kódy neodesílají hostitelům nebo tisknou do protokolů. Ověřte, že v žádných souborech protokolu nejsou žádné tajné kódy, včetně protokolů chyb.
  • Kontrola registrovaných tajemství: Ověřte, zda jsou tajemství ve vašem kanálu stále nezbytná, a odstraňte všechna, která již nejsou potřebná, aby se snížil nepořádek a potenciální bezpečnostní rizika.
  • Obměňujte tajné kódy: Pravidelně obměňujte tajné kódy, abyste minimalizovali časové období, během kterého by mohlo dojít k zneužití ohroženého tajného kódu.

Zabránění spuštění škodlivého kódu

Aby bylo zajištěno, že ve vašem pipeline běží pouze testovaný a očištěný kód, pravidelně kontrolujte vaše pipeline na běžné problémy.

  • Skenování kódu: Escapovat speciální znaky v argumentech, aby se zabránilo injektáži shellových příkazů. K automatizaci skenování kódu můžete použít GitHub Advanced Security pro Azure DevOps .
  • Ověřte vstupy a použijte parametry: Ověřte vstupní parametry a argumenty, abyste zabránili nezamýšleným chováním. Pomocí parametrizovaných dotazů ve skriptech zabráníte injektáži SQL. Parametry modulu runtime pomáhají vyhnout se problémům se zabezpečením souvisejícím s proměnnými, jako je například injektáž argumentů.
  • Nepoužívejte cestu PATH ve skriptech: Spoléhání na nastavení agenta PATH je nebezpečné, protože ho může změnit předchozí skript nebo nástroj. Vždy používejte plně kvalifikovanou cestu.
  • Řízení dostupných úloh: Zakažte možnost instalovat a spouštět úlohy z Marketplace, což vám dává větší kontrolu nad kódem, který běží v procesu.

Zabezpečené kontejnery

Zjistěte, jak zabezpečit kontejnery prostřednictvím změn konfigurace, skenování a zásad.

  • Označit svazky jako pouze pro čtení: Kontejnery zahrnují připojení svazků zajištěné systémem pro úlohy, nástroje a externí komponenty potřebné k práci s hostitelským agentem. Nastavte externals, tasks a tools na hodnotu pouze pro čtení kvůli zvýšení zabezpečení.
  • Nastavte limity prostředků specifické pro kontejnery: Nastavte omezení procesoru a paměti, abyste zabránili kontejnerům v využívání nadměrných prostředků, což může vést k ohrožení zabezpečení nebo odepření služby.
  • Použití důvěryhodných imagí: Používejte oficiální a ověřené image z důvěryhodných zdrojů, jako je Azure Container Registry nebo Docker Hub. Vždy zadejte konkrétní verzi nebo značku, která má zachovat konzistenci a spolehlivost, a nespoléhat se na značku latest. Pravidelně aktualizujte základní image tak, aby zahrnovaly nejnovější opravy zabezpečení a opravy chyb.
  • Prohledejte kontejnery na zranitelnosti a vynucujte ochranu před hrozbami za běhu: Pomocí nástrojů, jako je Microsoft Defender for Cloud, můžete monitorovat a zjišťovat rizika zabezpečení. Kromě toho azure Container Registry nabízí integrovanou kontrolu ohrožení zabezpečení , která pomáhá zajistit zabezpečení imagí kontejnerů před nasazením. Můžete také integrovat nástroje pro kontrolu třetích stran prostřednictvím rozšíření Azure DevOps pro přidání kontrol zabezpečení.
  • Implementujte zásady zabezpečení, abyste zabránili eskalaci oprávnění a zajistili, že kontejnery běží s co nejmenším počtem potřebných oprávnění: Například Azure Kubernetes Service (AKS), řízení přístupu založené na rolích a Zabezpečení přístupu k podům umožňují vynucovat zásady, které omezují oprávnění kontejneru, zajišťují zpracování bez oprávnění root a omezují přístup k důležitým prostředkům.
  • Použití zásad sítě: Zásady sítě se dají použít k omezení komunikace mezi kontejnery a zajišťují, aby k citlivým prostředkům ve vaší síti měly přístup jenom autorizované kontejnery. Kromě toho je možné azure Policy pro AKS použít k vynucení osvědčených postupů zabezpečení kontejneru, jako je například zajištění nasazení jenom důvěryhodných imagí kontejnerů.

Použití šablon k vynucení osvědčených postupů

Začněte minimální šablonou a postupně vynucujte rozšíření. Tento přístup zajišťuje, že při implementaci postupů zabezpečení máte centralizovaný výchozí bod, který pokrývá všechny kanály.

  • Použijte rozšířené šablony: Rozšířené šablony definují vnější strukturu a nabízejí specifické body pro cílené přizpůsobení. Použití rozšiřujících šablon může zabránit škodlivému kódu v infiltrování kanálu.
  • Omezit přístup pomocí kroků: Omezte přístup k síti tak, že kroky, jako je stahování balíčků, budou provedeny v kontejneru, nikoli na hostiteli. Když jsou kroky spuštěny v kontejneru, zabráníte škodlivému činiteli v úpravě konfigurace agenta nebo umístění škodlivého kódu pro pozdější spuštění.