Sdílet prostřednictvím


Zabezpečený přístup k úložištím z kanálů

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

Aby organizace chránily kód, který spouští své operace, musí pečlivě řídit přístup k úložištím zdrojového kódu. Tento článek popisuje, jak mohou build a release kanály Azure Pipelines bezpečně přistupovat k úložištím a minimalizovalo se tak riziko neoprávněného přístupu.

Tento článek je součástí série, která vám pomůže implementovat bezpečnostní opatření pro Azure Pipelines. Další informace najdete v tématu Zabezpečení služby Azure Pipelines.

Požadavky

Kategorie Požadavky
Azure DevOps – Implementujte doporučení v Make your Azure DevOps secure a Secure Azure Pipelines.
– Základní znalost YAML a Azure Pipelines. Další informace naleznete v tématu Vytvoření prvního potrubí.
Oprávnění - Pro úpravu oprávnění potrubí: Člen skupiny Správci projektu.
- Chcete-li upravit oprávnění organizace, musíte být členem skupiny Správci kolekce projektů.

Identita založená na projektu pro potrubí

Pipeline používá identitu pro přístup k prostředkům, jako jsou úložiště, připojení služeb a skupiny proměnných během spuštění. Kanalizační systémy můžou využívat dva typy identit: identitu na úrovni kolekce nebo na úrovni projektu.

Identita na úrovni kolekce se snadno nastavuje a používá, ale identity na úrovni projektu upřednostňují zabezpečení. Pro zvýšení zabezpečení používejte identity na úrovni projektu ke spouštění kanálů. Identita na úrovni projektu má přístup k prostředkům pouze v rámci svého projektu, což minimalizuje dopad jakéhokoli neoprávněného přístupu škodlivých herců. Další informace najdete v tématu Vymezené identity sestavení a rozsah autorizace úlohy.

Chcete-li nakonfigurovat potrubí tak, aby používalo identitu na úrovni projektu, povolte Omezit rozsah autorizace úlohy na aktuální projekt pro potrubí bez verze nebo Omezit rozsah autorizace úlohy na aktuální projekt pro potrubí verze v Nastavení projektu pod Potrubí>Nastavení.

Postup zlepšení zabezpečení přístupu k úložišti

Správce projektu nebo správce kolekce projektů může pomocí následujících kroků zlepšit zabezpečení přístupu k úložištím Git z kanálů.

  1. Prozkoumejte kanály a identifikujte všechna požadovaná úložiště, která jsou v jiných projektech. Pokud povolíte omezení rozsahu povolení úlohy na aktuální projekt pro ne-release pipeline, pipeline může vyhodnotit kód pouze z úložišť aktuálního projektu.

  2. Udělte projektům kanálu přístup k jiným projektům, které vyžadují. Další informace najdete v tématu Konfigurace oprávnění pro projekt pro přístup k jinému projektu ve stejné kolekci projektů.

  3. Udělte identitám sestavení kanálu přístup ke čtení pro každé úložiště, které si projdou. Identitám kanálu také udělte přístup pro čtení ke všem úložištím používaným jako dílčímoduly požadovanými úložišti. Další informace najdete v tématu Konfigurace oprávnění pro přístup k jinému úložišti ve stejné kolekci projektů.

  4. Povolte následující nastavení organizace nebo projektu pro projekt pipeline:

    • Omezte rozsah autorizace úlohy na aktuální projekt pro nepouštěné potrubí.
    • Pokud má váš projekt kanály verze, omezte rozsah autorizace úloh na aktuální projekt.
    • Chraňte přístup k úložištím v kanálech YAML , pokud váš projekt obsahuje kanály YAML Azure Repos.

    Povolte tato nastavení přepnutím jejich přepínačů na Zapnuto v Nastavení organizace nebo Nastavení projektuKanályObecné.

    Pokud jsou tato nastavení povolená v nastavení organizace, není možné je přepsat v nastavení projektu. Pokud nastavení není v nastavení organizace povolené, můžete je povolit na úrovni projektu.

Použití úložiště jako dílčího modulu

Pokud úložiště používá jiné úložiště ve svém projektu jako submodul, výběr může selhat při výběru submodulu, i když kanálu udělíte přístup ke čtení obou úložišť. Pokud chcete tento problém vyřešit, před rezervováním úložišť, která je používají, explicitně si prohlédněte úložiště dílčího modulu. Další informace naleznete v tématu Zkontrolujte dílčí moduly.

Úložiště GitHub

Pro přístup ke kanálům k úložištím GitHub platí následující aspekty zabezpečení. Další informace najdete v tématu Přístup k úložištím GitHub.

Připojení ke službě GitHub

Pokud chcete používat úložiště GitHub, azure Pipelines vyžaduje připojení ke službě GitHub. Posílení zabezpečení připojení služeb:

  • Povolit přístup pouze k úložištím, která kanály vyžadují ke spuštění.
  • Nevybírejte možnost Udělit oprávnění pro přístup všem kanálům pro připojení služby. Explicitně autorizujte připojení služby pro každé potrubí, které ho používá.

Ověřování v úložištích GitHubu

Pokud chcete aktivovat sestavení a načíst kód během sestavení, musí být službě Azure Pipelines udělen přístup k úložištím GitHub. Tento přístup může používat osobní přístupový token GitHubu (PAT), OAuth nebo ověřování aplikace Azure Pipelines GitHubu. Další informace najdete v tématu Přístup k úložištím GitHub.

Aplikace Azure Pipelines GitHubu je doporučeným typem ověřování pro kanály kontinuální integrace (CI). Buildy a aktualizace stavu GitHubu pak místo použití osobní identity GitHubu používají identitu Azure Pipelines. Když aplikaci nainstalujete, můžete omezit, ke kterým úložištím má aplikace přístup kvůli zvýšenému zabezpečení.

Ověřování OAuth a PAT používá vaši osobní GitHub identitu a musí být schváleny pro přístup k pipeline. Používání osobních přístupových tokenů se nedoporučuje kvůli obavám o zabezpečení. Pokud musíte použít ověřování PAT, zvolte detailně odstupňovaný PAT a omezte jeho použití pro určité uživatele, repozitáře a oprávnění. Další informace najdete v tématu Správa osobních přístupových tokenů.

Poznámka:

Pokud nainstalujete aplikaci GitHub pro všechna úložiště v organizaci GitHubu, bude mít token, který aplikace používá, přístup ke všem soukromým a veřejným úložištím v organizaci. Pro lepší zabezpečení buď oddělte privátní úložiště do samostatné organizace, nebo explicitně vyberte úložiště, ke kterým má aplikace přístup.

Odvozené GitHub repozitáře

Rozvětvovaná úložiště zvyšují riziko spuštění škodlivého kódu nebo uvolnění citlivých informací v kanálech. Forky pocházející mimo vaši organizaci představují konkrétní rizika.

Pokud chcete minimalizovat rizika z forkovaných úložišť, omezte vytváření žádostí o přijetí změn z forkovaných úložišť GitHubu a ve výchozím nastavení v nastaveních projektu nebov triggerechnastavení>kanálů>organizace> jsou povolená možnost Zakázat vytváření žádostí o přijetí změn z forkovaných úložišť.

Pokud chcete povolit vytváření z forkovaných úložišť GitHubu, ale snížit rizika, vyberte Možnost Bezpečné sestavení žádostí o přijetí změn z forkovaných úložišť. Toto nastavení brání zpřístupnění citlivých informací nebo použití stejných oprávnění jako běžné sestavení, a vyžaduje komentář k pull requestu od člena týmu pro spuštění pipeline.

Můžete také vybrat Přizpůsobení pravidel pro vytváření žádostí o přijetí změn z forkovaných úložišť a tato nastavení dále upravit.

Snímek obrazovky s nastavením projektu pro omezení sestavení forku úložiště

Mezi další způsoby zvýšení zabezpečení forku patří:

  • Pokud k aktivaci sestavení použijete ověření pomocí žádostí o přijetí změn, zrušte výběr Sestavit žádosti o přijetí změn z forků tohoto úložiště v sekci Spouštěč definice kanálu, nebo se ujistěte, že Jsou tajemství dostupná pro sestavení forků a Sestavení forků mají stejná oprávnění jako běžná sestavení nejsou vybrána. Před vytvořením žádosti o přijetí změn můžete také vybrat možnost Vyžadovat komentář člena týmu.

  • K sestavení z forků použijte agenty hostované Microsoftem. Prostředky jsou ihned po dokončení sestavení odstraněny z agentů. Pokud používáte vlastní self-hostované agenty, pravidelně je čistěte a aktualizujte, nebo používejte samostatné agenty pro různé forky nebo větve.

Úložiště Azure Repos

Ochrana přístupu k úložištím v kanálech YAML

Nastavení Ochrany přístupu k úložištím v projektu nebo nastavení organizace kanálů YAML poskytuje jemně odstupňovaná oprávnění pro kanály YAML. Toto nastavení explicitně požádá kanál YAML o oprávnění pro přístup k libovolnému úložišti bez ohledu na projekt. Další informace najdete v tématu Ochrana přístupu k úložištím v kanálech YAML.

Poznámka:

Nastavení Chránit přístup k úložištím v kanálech YAML se nevztahuje na úložiště GitHub.

Když je toto nastavení povolené, kanály YAML Azure Repos vždy požadují oprávnění pro přístup k úložištím při prvním spuštění. Zobrazí se žádost o oprávnění, jako je následující snímek obrazovky:

Snímek obrazovky s prvním spuštěním kanálu SpaceGameWeb po zapnutí přepínače Chránit přístup k úložištím v kanálech YAML

Vyberte Povolit a udělte oprávnění k úložištím nebo prostředkům kanálu. Pipelina je teď úspěšná.

Snímek obrazovky s povolením přístupu k úložištím v kanálu YAML

Použijte příkazový řádek Git k vyžádání dalších úložišť.

Skript příkazového řádku jako git clone https://github/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/ může selhat, když je Chránit přístup k úložištím v YAML kanálech povoleno. Pokud chcete tento problém vyřešit, explicitně zkontrolujte OtherRepo úložiště pomocí checkout příkazu, například checkout: git://FabrikamFiber/OtherRepo.

Příklad Azure Repos

Následující příklad ukazuje proces zlepšení zabezpečení přístupu do Azure Repos v rámci potrubí.

Organizace https://dev.azure.com/fabrikam-tailspin obsahuje projekty SpaceGameWeb a FabrikamFiber .

  • Projekt SpaceGameWeb obsahuje úložiště SpaceGameWeb a SpaceGameWebReact .

    Snímek obrazovky se strukturou úložiště SpaceGameWeb

  • Projekt FabrikamFiber obsahuje úložiště FabrikamFiber, FabrikamChat a FabrikamFiberLib . Úložiště FabrikamFiber používá úložiště FabrikamFiberLib jako dílčí modul.

    Snímek obrazovky struktury úložiště FabrikamFiber

Pipeline SpaceGameWeb v projektu SpaceGameWeb kontroluje úložiště SpaceGameWebReact v projektu SpaceGameWeb a úložiště FabrikamFiber a FabrikamChat v projektu FabrikamFiber.

Pokud projekt není nastavený tak, aby používal identitu sestavení založenou na projektu nebo aby chránil přístup k úložištím v YAML pipelinech, může pipeline SpaceGameWeb přistupovat ke všem úložištím ve všech projektech v organizaci a je úspěšně spuštěná.

Použití identity na úrovni projektu

Ke zlepšení zabezpečení použijte identitu na úrovni projektu ke spuštění pipeliny. V Nastavení projektu nebo Nastavení organizace povolte možnost Omezit rozsah autorizace úloh na aktuální projekt pro kanály, které nejsou určeny k vydání.

Pokud je toto nastavení povolené, kanál má přístup pouze k prostředkům v projektu SpaceGameWeb , který obsahuje pouze úložiště SpaceGameWeb a SpaceGameWebReact . Potrubí selže, protože nemůže zkontrolovat úložiště v projektu FabrikamFiber.

Zobrazí se chyby remote: TF401019: The Git repository with name or identifier FabrikamChat does not exist or you do not have permissions for the operation you are attempting a remote: TF401019: The Git repository with name or identifier FabrikamFiber does not exist or you do not have permissions for the operation you are attempting.

Pokud chcete tyto problémy vyřešit, udělte projektu pipeline přístup k projektu FabrikamFiber a udělte identitě pipeline přístup ke čtení pro úložiště FabrikamFiber, FabrikamChat a FabrikamFiberLib.

Explicitně zkontrolujte submodul

Úložiště FabrikamFiber používá úložiště FabrikamFiberLib jako dílčí modul. I když kanálu udělíte přístup k oběma úložištím, rezervace úložiště FabrikamFiber stále selže při rezervaci dílčího modulu FabrikamFiberLib .

Pokud chcete tento problém vyřešit, před rezervací úložiště FabrikamFiber výslovně zkontrolujte úložiště FabrikamFiberLib. Přidejte checkout: git://FabrikamFiber/FabrikamFiberLib krok před checkout: FabrikamFiber krok. Ukázkový kanál je teď úspěšný.

Ochrana přístupu ke kanálu YAML

Pokud je ukázkový kanál SpaceGameWeb kanálEM YAML a je povolený přístup k úložištím v kanálech YAML , kanál vyžaduje oprávnění pro přístup k úložišti SpaceGameWebReact, FabrikamFiber a FabrikamChat při prvním spuštění.

Následující kód ukazuje úplný kanál YAML.

trigger:
- main

pool:
  vmImage: ubuntu-latest

resources:
  repositories:
    - repository: SpaceGameWebReact
      name: SpaceGameWeb/SpaceGameWebReact
      type: git
    - repository: FabrikamFiber
      name: FabrikamFiber/FabrikamFiber
      type: git
    - repository: FabrikamChat
      name: FabrikamFiber/FabrikamChat
      type: git

steps:
  - script: echo "Building SpaceGameWeb"
  - checkout: SpaceGameWebReact
  - checkout: FabrikamChat
    condition: always()  
  - checkout: git://FabrikamFiber/FabrikamFiberLib
  - checkout: FabrikamFiber
    submodules: true
    condition: always()
  - script: |
      cd FabrikamFiber
      git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" submodule update --recursive --remote
  - script: cat $(Build.Repository.LocalPath)/FabrikamFiber/FabrikamFiberLib/README.md

Další bezpečnostní opatření úložiště

  • Pokud chcete snížit rizika zabezpečení z kanálů YAML a klasických kanálů sdílení prostředků, zakažte vytváření klasických kanálů zapnutím přepínačů Zakázat vytváření klasických kanálů buildu a Zakázat vytváření klasických kanálů vydání v nastavení projektu nebo nastavení organizace. Ve výchozím nastavení je pro nové organizace zakázáno vytváření klasického kanálu pro build a release.

  • Pomocí šablon kanálů můžete definovat strukturu kanálu a zabránit infiltraci škodlivého kódu. Šablony můžou také automaticky provádět úlohy, jako je kontrola přihlašovacích údajů nebo vynucení kontrol chráněných prostředků.

  • Vyžadovat ruční schválení pokaždé, když datový tok požádá o úložiště. Další informace naleznete v tématu Schválení a kontroly.

  • Pomocí kontroly chráněné větve můžete zabránit automatickému spouštění kanálů na neautorizovaných větvích.

  • Nastavte úložiště tak, aby se používalo pouze v zadaných kanálech YAML. Další informace najdete v tématu Přidání oprávnění pipeline k zdroji úložiště.

  • Omezte rozsah přístupového tokenu Azure Pipelines tím, že token poskytnete pouze pro úložiště uvedená v části kanálu resources . Další informace najdete v tématu Ochrana úložiště.