Zabezpečený přístup k Azure Repos z kanálů
Vaše úložiště jsou důležitým prostředkem pro úspěch vaší firmy, protože obsahují kód, který řídí vaši firmu. Přístup k úložištím by neměl být udělen snadno.
V tomto článku se dozvíte, jak zlepšit zabezpečení kanálů přistupujících k Azure Repos, abyste omezili riziko, že se zdrojový kód dostane do nesprávných rukou.
V nastavení zabezpečeného přístupu kanálů k úložištím Azure jsou zapnuté přepínače Omezit obor autorizace úloh na aktuální projekt pro jiné kanály než kanály verze, Omezit obor autorizace úloh na aktuální projekt pro kanály verze a Chránit přístup k úložištím v kanálech YAML.
Probereme kanály buildu i kanály klasické verze:
Proces Basic (základní)
Postup je podobný pro všechny kanály:
Určete seznam úložišť Azure Repos, ke kterým váš kanál potřebuje přístup, který je součástí stejné organizace, ale nachází se v různých projektech.
Seznam úložišť můžete zkompilovat kontrolou kanálu. Nebo můžete zapnout přepínač Omezit rozsah autorizace úlohy na aktuální projekt pro kanály verze (bez verze) a poznamenat, 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í.
Pro každý projekt Azure DevOps, který obsahuje úložiště, ke kterému váš kanál potřebuje přístup, postupujte podle kroků a udělte identitě sestavení kanálu přístup k danému projektu.
Pro každé úložiště Azure Repos, které váš kanál rezervuje, udělte identitě sestavení kanálu přístup ke čtení z tohoto úložiště podle pokynů.
Pro každé úložiště, které se používá jako dílčí modul úložištěm, které váš kanál rezervuje a je ve stejném projektu, pomocí kroků udělte identitě sestavení kanálu přístup ke čtení tohoto úložiště.
Zapněte 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 zapněte přepínač Chránit přístup k úložištím v kanálech YAML.
Kanály buildu
Abychom si ukázali, jak zlepšit zabezpečení vašich kanálů při přístupu k Azure Repos, použijeme spuštěný příklad.
Předpokládejme, že pracujete na SpaceGameWeb
kanálu hostovaného v fabrikam-tailspin/SpaceGameWeb
projektu v SpaceGameWeb
úložišti Azure Repos. Řekněme také, že váš SpaceGameWeb
kanál zkontroluje SpaceGameWebReact
úložiště ve stejném projektu a FabrikamChat
FabrikamFiber
úložiště v fabrikam-tailspin/FabrikamFiber
projektu.
Nakonec předpokládejme, že FabrikamFiber
úložiště používá FabrikamFiberLib
úložiště jako dílčí modul hostovaný ve stejném projektu. Přečtěte si další informace o tom, jak si prohlédnout dílčí režimy.
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 jste kanál úspěšně spustili.
Použití identity sestavení založeného na projektu pro kanály sestavení
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í z nich poskytuje lepší zabezpečení, druhé 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 kanál používal identitu na úrovni projektu, zapněte obor omezení autorizace úloh 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.
sdělí 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 základním procesu.
Kromě toho je potřeba před jejich použitím explicitně rezervovat úložiště dílčího modulu. V našem příkladu FabrikamFiberLib
to znamená úložiště.
Pokud teď 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 zapnutí ochrany přístupu k úložištím v nastavení kanálů 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ří. Přečtěte si další informace o tomto nastavení. Toto nastavení nemá vliv na rezervaci jiných typů úložišť, například úložišť hostovaných na GitHubu.
Když je tento přepínač zapnutý, SpaceGameWeb
kanál v našem příkladu 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, zobrazí se build podobný následujícímu snímku obrazovky.
Zobrazí se výzva k udělení oprávnění k rezervování kanálu nebo jeho definování jako prostředky.
Jakmile to uděláte, kanál se spustí, ale selže, protože nebude moct rezervovat FabrikamFiberLib
úložiště jako dílčí modul .FabrikamFiber
Pokud chcete tento problém vyřešit, explicitně si prohlédněte FabrikamFiberLib
- checkout: git://FabrikamFiber/FabrikamFiberLib
například krok před -checkout: FabrikamFiber
tímto krokem.
Pokud teď spustíte ukázkový kanál, bude ú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
Tady je několik problematických situací a jejich zpracování.
Ú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ý přepínač 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, - checkout: git://FabrikamFiber/OtherRepo
například .
Ú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 ho prohlédněte FabrikamFiberLib
, například přidejte - checkout: git://FabrikamFiber/FabrikamFiberLib
krok před tím -checkout: FabrikamFiber
.
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í z nich poskytuje lepší zabezpečení, druhé 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 základním procesu.
Pokud teď spustíte náš ukázkový kanál, bude úspěšný.