Zabezpečený přístup k Azure Repos z kanálů
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Vaše úložiště jsou důležitá pro váš obchodní úspěch, protože tvoří kód, který vaše operace nutí. Přístup k úložištím by měl být pečlivě kontrolovaný. Tento článek vás provede vylepšením zabezpečení kanálu buildu a kanálu verze Classic při přístupu k Azure Repos, abyste snížili riziko neoprávněného přístupu.
Pokud chcete zajistit zabezpečený přístup k úložištím Azure, povolte následující přepínače:
- Omezení rozsahu autorizace úloh na aktuální projekt pro kanály bez verze
- Omezení rozsahu autorizace úloh na aktuální projekt pro kanály verze
- Ochrana přístupu k úložištím v kanálech YAML
Proces Basic (základní)
Následující kroky pro zabezpečení kanálů jsou podobné napříč všemi kanály:
- Identifikujte úložiště Azure Repos, ke kterým váš kanál vyžaduje přístup v rámci stejné organizace, ale napříč různými projekty.
Proveďte to tak, že zkontrolujete kanál nebo povolíte obor autorizace úlohy limitu na aktuální projekt pro kanály verze (ne) a všimněte si, která úložiště se kanál nedaří rezervovat. Úložiště dílčího modulu se nemusí zobrazit v prvním neúspěšném spuštění. - Udělte identitě sestavení kanálu přístup k danému projektu pro každý projekt, který obsahuje úložiště, ke kterému má váš kanál přístup.
- Udělte identitě sestavení kanálu přístup ke čtení tohoto úložiště pro každé úložiště , které váš kanál rezervuje.
- Udělte identitě sestavení kanálu přístup ke čtení tohoto úložiště pro každé úložiště , které se používá jako dílčí modul úložiště, které váš kanál rezervuje a nachází se ve stejném projektu.
- Povolte obor omezení autorizace úlohy na aktuální projekt pro kanály bez verze, omezte rozsah autorizace úloh na aktuální projekt pro kanály verze a chraňte přístup k úložištím v kanálech YAML.
Kanály buildu
Abychom si ukázali postup, jak zlepšit zabezpečení vašich kanálů při přístupu ke službě Azure Repos, použijeme následující příklad.
- Předpokládejme, že pracujete na
SpaceGameWeb
kanálu hostovaného vfabrikam-tailspin/SpaceGameWeb
projektu vSpaceGameWeb
úložišti Azure Repos. - Kanál
SpaceGameWeb
zkontrolujeSpaceGameWebReact
úložiště ve stejném projektu aFabrikamFiber
FabrikamChat
úložiště vfabrikam-tailspin/FabrikamFiber
projektu. - Úložiště
FabrikamFiber
používáFabrikamFiberLib
úložiště jako dílčí modul hostovaný ve stejném projektu. SpaceGameWeb
Struktury úložiště projektu vypadají jako na následujícím snímku obrazovky.FabrikamFiber
Struktury úložiště projektu vypadají jako na následujícím snímku obrazovky.- Představte si, že váš projekt není nastavený tak, aby používal identitu sestavení založenou na projektu nebo chránil přístup k úložištím v kanálech YAML. Předpokládejme také, že už jste kanál úspěšně spustili.
Použití identity sestavení založené na projektu pro kanály buildu
Během provádění kanálu se identita používá pro přístup k prostředkům, jako jsou úložiště, připojení služeb a skupiny proměnných. Kanály můžou využívat dva typy identit: úroveň projektu a úroveň kolekce. První priorita určuje zabezpečení, zatímco druhý zvýrazňuje snadné použití. Další informace najdete v tématu s vymezeným oborem identit sestavení a oboru autorizace úloh.
Pokud chcete zvýšit zabezpečení, při spouštění kanálů používejte identity na úrovni projektu. Tyto identity mají přístup pouze k prostředkům v rámci přidruženého projektu a minimalizují riziko neoprávněného přístupu škodlivých subjektů.
Pokud chcete nakonfigurovat kanál tak, aby používal identitu na úrovni projektu, povolte obor omezení autorizace úlohy na aktuální projekt pro nastavení kanálů bez verze.
Když je tento přepínač vypnutý, může kanál v našem příkladu SpaceGameWeb
přistupovat ke všem úložištím ve všech projektech. Když je přepínač zapnutý, SpaceGameWeb
může přistupovat pouze k prostředkům fabrikam-tailspin/SpaceGameWeb
v projektu, takže pouze úložiště SpaceGameWeb
a SpaceGameWebReact
úložiště.
Pokud spustíte náš ukázkový kanál, když zapnete přepínač, kanál selže a protokoly chyb vám 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.
řeknou 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 vyřešit problémy s rezervacemi, postupujte podle kroků popsaných v části Základní proces tohoto článku.
Kromě toho explicitně zkontrolujte úložiště dílčího modulu před úložišti, která je používají. V našem příkladu FabrikamFiberLib
to znamená úložiště.
Pokud spustíte náš ukázkový kanál, bude úspěšný.
Další konfigurace
Pokud chcete zvýšit zabezpečení při přístupu k Azure Repos, zvažte povolení ochrany přístupu k úložištím v kanálech YAML.
Předpokládejme, že SpaceGameWeb
kanál je kanál YAML a jeho zdrojový kód YAML vypadá podobně jako následující kód.
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: 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
- ...
Ochrana přístupu k úložištím v kanálech YAML
Azure DevOps poskytuje mechanismus jemně odstupňovaných oprávnění pro úložiště Azure Repos ve formě ochrany přístupu k úložištím v nastavení kanálů YAML. Toto nastavení explicitně požádá kanál YAML o oprávnění pro přístup ke všem úložištím Azure Repos bez ohledu na to, ke kterému projektu patří. Další informace najdete v tématu Přístup k úložišťm. Toto nastavení nemá vliv na rezervaci jiných typů úložišť, jako jsou například úložiště hostovaná na GitHubu.
Když je v našem příkladu spuštěno toto nastavení zapnuté, SpaceGameWeb
kanál požádá o oprávnění pro přístup SpaceGameWebReact
k úložišti v fabrikam-tailspin/SpaceGameWeb
projektu a úložiště FabrikamFiber
v FabrikamChat
fabrikam-tailspin/FabrikamFiber
projektu.
Když spustíte ukázkový kanál, sestaví se podobně jako v následujícím příkladu.
Udělte oprávnění k úložištím nebo prostředkům kanálu.
Kanál se spustí, ale selže, protože nemůže rezervovat FabrikamFiberLib
úložiště jako dílčí modul modulu FabrikamFiber
. Pokud chcete tento problém vyřešit, explicitně si tento problém projděte FabrikamFiberLib
přidáním - checkout: git://FabrikamFiber/FabrikamFiberLib
kroku před -checkout: FabrikamFiber
krokem.
Ukázkový kanál je úspěšný.
Konečný zdrojový kód kanálu YAML vypadá jako následující fragment kódu.
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
Řešení problému
Při jakýchkoli problémech, ke kterým dojde, využijte následující řešení.
Úložiště ve stejné organizaci můžete rezervovat pomocí Gitu na příkazovém řádku.
Například používáte - script: git clone https://$(System.AccessToken)@dev.azure.com/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/
. Příkaz selže, když je zapnuté nastavení Chránit přístup k úložištím v kanálech YAML.
Pokud chcete tento problém vyřešit, podívejte se na OtherRepo
úložiště pomocí checkout
příkazu, například - checkout: git://FabrikamFiber/OtherRepo
.
Úložiště jako dílčí modul používá jiné úložiště.
Řekněme, že jedno z úložišť, která váš kanál rezervuje, používá jiné úložiště (ve stejném projektu) jako dílčí modul, jak je tomu v našem příkladu FabrikamFiber
pro úložiště a FabrikamFiberLib
úložiště. Přečtěte si další informace o tom, jak si prohlédnout dílčí režimy.
Předpokládejme také, že jste k tomuto úložišti udělili SpaceGame
přístup pro čtení identity sestavení, ale při rezervaci dílčího FabrikamFiberLib
modulu se rezervace FabrikamFiber
úložiště stále nezdaří.
Pokud chcete tento problém vyřešit, explicitně si tento problém projděte FabrikamFiberLib
přidáním - checkout: git://FabrikamFiber/FabrikamFiberLib
kroku před tímto -checkout: FabrikamFiber
krokem.
Klasické kanály verze
Proces zabezpečení přístupu k úložištím pro kanály verze je podobný procesu pro kanály buildu.
K ilustraci kroků, které potřebujete provést, použijeme spuštěný příklad. V našem příkladu fabrikam-tailspin/FabrikamFiberDocRelease
je v projektu kanál verze s názvemFabrikamFiberDocRelease
. Předpokládejme, že kanál zkontroluje FabrikamFiber
úložiště v fabrikam-tailspin/FabrikamFiber
projektu, spustí příkaz pro vygenerování veřejné dokumentace a pak ho publikuje na web. Představte si také, že FabrikamFiber
úložiště používá FabrikamFiberLib
úložiště (ve stejném projektu) jako dílčí modul.
Použití identity sestavení založené na projektu pro klasické kanály verze
Když se kanál spustí, používá identitu pro přístup k různým prostředkům, jako jsou úložiště, připojení služeb, skupiny proměnných. Kanál může používat dva typy identit: jeden na úrovni projektu a jeden na úrovni kolekce. První poskytuje lepší zabezpečení. Druhá možnost poskytuje snadné použití. Přečtěte si další informace o vymezených identitách sestavení a oboru autorizace úloh.
Ke spouštění kanálů doporučujeme používat identity na úrovni projektu. Ve výchozím nastavení mají identity na úrovni projektu přístup pouze k prostředkům v projektu, jehož jsou členy. Použití této identity zlepšuje zabezpečení, protože snižuje přístup získaný škodlivou osobou při napadení kanálu.
Pokud chcete, aby váš kanál používal identitu na úrovni projektu, zapněte obor omezení autorizace úlohy na aktuální projekt pro nastavení kanálů verze.
Když je tento přepínač vypnutý, FabrikamFiberDocRelease
v našem příkladu může kanál verze přistupovat ke všem úložištím ve všech projektech, včetně FabrikamFiber
úložiště. Když je přepínač zapnutý, FabrikamFiberDocRelease
může přistupovat pouze k prostředkům fabrikam-tailspin/FabrikamFiberDocRelease
v projektu, takže FabrikamFiber
úložiště bude nedostupné.
Pokud spustíte náš ukázkový kanál, když zapnete přepínač, kanál selže a protokoly vám řeknou 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, postupujte podle kroků v části Základní proces tohoto článku.
Náš ukázkový kanál je úspěšný.