Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
För att skydda koden som kör deras åtgärder måste organisationer noggrant kontrollera åtkomsten till sina källkodslagringsplatser. Den här artikeln beskriver hur Azure Pipelines skapar och släpper pipelines på ett säkert sätt kan komma åt lagringsplatser för att minimera risken för obehörig åtkomst.
Den här artikeln är en del av en serie som hjälper dig att implementera säkerhetsåtgärder för Azure Pipelines. Mer information finns i Skydda Azure Pipelines.
Förutsättningar
| Kategori | Krav |
|---|---|
| Azure DevOps | – Implementera rekommendationerna i Gör dina Azure DevOps säkra och Gör dina Azure Pipelines säkra. – Grundläggande kunskaper om YAML och Azure Pipelines. Mer information finns i Skapa din första pipeline. |
| behörigheter | – Ändra pipelinebehörigheter: Medlem i gruppen Projektadministratörer. – Ändra organisationsbehörigheter: Medlem i gruppen Projektsamlingsadministratörer. |
Projektbaserade identiteter för pipelines
En pipeline använder en identitet för att komma åt resurser som lagringsplatser, tjänstanslutningar och variabelgrupper under körningen. Pipelines kan använda två typer av identiteter: samlingsnivå eller projektnivå.
Identitet på samlingsnivå är lätt att konfigurera och använda, men identiteter på projektnivå prioriterar säkerhet. För att förbättra säkerheten, använd identiteter på projektnivå när du kör pipelines. En identitet på projektnivå kan endast komma åt resurser i projektet, vilket minimerar effekten av obehörig åtkomst från skadliga aktörer. Mer information finns i Omfångsbegränsade byggidentiteter och Jobbauktoriseringsomfång.
Om du vill konfigurera en pipeline för att använda en identitet på projektnivå aktiverar du Begränsa jobbauktoriseringsomfånget till aktuellt projekt för pipelines som inte är släppt eller Begränsa jobbauktoriseringsomfånget till det aktuella projektet för versionspipelines i pipelineprojektets projektinställningar under Pipelines-inställningar>.
Steg för att förbättra lagringsplatsens åtkomstsäkerhet
En projektadministratör eller projektsamlingsadministratör kan vidta följande steg för att förbättra säkerheten för åtkomst till Git-lagringsplatser från pipelines.
Granska pipelines för att identifiera alla nödvändiga lagringsplatser som finns i andra projekt. Om du aktiverar Begränsa jobbauktoriseringsomfånget till aktuellt projekt för pipelines som inte släpps kan pipelines endast checka ut kod från det aktuella projektets lagringsplatser.
Bevilja pipelineprojekt åtkomst till andra projekt som de behöver. Mer information finns i Konfigurera behörigheter för ett projekt för åtkomst till ett annat projekt i samma projektsamling.
Bevilja pipeline build-identiteter Läs åtkomst till varje lagringsplats som de checkar ut. Bevilja även pipelineidentiteter Läsåtkomst till alla lagringsplatser som används som undermoduler av nödvändiga lagringsplatser. Mer information finns i Konfigurera behörigheter för åtkomst till en annan lagringsplats i samma projektsamling.
Aktivera följande organisations- eller projektinställningar för pipelineprojektet:
- Begränsa omfånget för jobbauktorisering till aktuellt projekt för pipelines som inte släpps.
- Begränsa omfånget för jobbauktorisering till aktuellt projekt för versionspipelines om projektet har versionspipelines.
- Skydda åtkomsten till lagringsplatser i YAML-pipelines om ditt projekt har YAML-pipelines för Azure Repos.
Aktivera de här inställningarna genom att ställa in deras växlingsknappar till På i Organisationsinställningar eller Projektinställningar>Allmänna>>.
Om inställningarna är aktiverade i Organisationsinställningar kan de inte åsidosättas i Projektinställningar. Om inställningarna inte är aktiverade i Organisationsinställningar kan de aktiveras på projektnivå.
Använda en lagringsplats som en undermodul
Om en lagringsplats använder en annan lagringsplats i projektet som en undermodul kan utcheckningen misslyckas när du checkar ut undermodulen även om du ger pipelinen läsåtkomst till båda lagringsplatserna. Lös problemet genom att uttryckligen checka ut undermodullagringsplatser innan du checkar ut de lagringsplatser som använder dem. Mer information finns i Checka ut undermoduler.
GitHub-lagringsplatser
Följande säkerhetsöverväganden gäller för pipelineåtkomst till GitHub-lagringsplatser. Mer information finns i Åtkomst till GitHub-lagringsplatser.
GitHub-tjänstanslutningar
För att kunna använda GitHub-lagringsplatser kräver Azure Pipelines en GitHub-tjänstanslutning. Så här stärker du säkerheten för tjänstanslutning:
- Tillåt endast åtkomst till kodlager som pipelines kräver för att köras.
- Välj inte Bevilja åtkomstbehörighet till alla pipelines för tjänstanslutningen. Auktorisera uttryckligen tjänstanslutningen för varje pipeline som använder den.
Autentisering till GitHub-lagringsplatser
För att utlösa byggen och hämta kod under byggen måste Azure Pipelines beviljas åtkomst till GitHub-lagringsplatser. Den här åtkomsten kan använda Personlig åtkomsttoken för GitHub (PAT), OAuth eller GitHub Azure Pipelines-appautentisering. Mer information finns i Åtkomst till GitHub-lagringsplatser.
GitHub Azure Pipelines-appen är den rekommenderade autentiseringstypen för CI-pipelines (continuous integration). Versions- och GitHub-statusuppdateringar använder sedan Azure Pipelines-identiteten i stället för att använda din personliga GitHub-identitet. När du installerar appen kan du begränsa vilka lagringsplatser som appen kan komma åt för ökad säkerhet.
OAuth- och PAT-autentisering använder din personliga GitHub-identitet och måste vara auktoriserad för pipelineåtkomst. Att använda en PAT rekommenderas inte på grund av säkerhetsproblem. Om du måste använda PAT-autentisering väljer du en detaljerad PAT och begränsar omfånget till vissa användare, lagringsplatser och behörigheter. Mer information finns i Hantera dina personliga åtkomsttoken.
Anmärkning
Om du installerar GitHub-appen för alla lagringsplatser i en GitHub-organisation kan den token som appen använder komma åt alla privata och offentliga lagringsplatser i organisationen. För bättre säkerhet kan du antingen separera privata lagringsplatser i en separat organisation eller uttryckligen välja vilka lagringsplatser som appen kan komma åt.
Förgrenade GitHub-lagringsplatser
Avknoppade lagringsplatser ökar risken för körning av skadlig kod eller utlämning av känslig information i pipelines. Förgreningar som kommer från utanför organisationen utgör särskilda risker.
För att minimera riskerna från förgrenade källkodsförråd är "Begränsa byggen av pull-begäranden från förgrenade GitHub-förråd" och "Inaktivera byggen av pull-begäranden från förgrenade förråd" aktiverade som standard i Projektinställningar eller Organisationsinställningar, Pipelines, Inställningar och Utlösare.
Om du vill tillåta att du skapar från förgrenade GitHub-lagringsplatser men minskar riskerna väljer du Skapa pull-begäranden på ett säkert sätt från förgrenade lagringsplatser. Den här inställningen tillåter inte att hemligheter blir tillgängliga eller använder samma behörigheter som vanliga versioner, och kräver en PR-kommentar från en teammedlem för att utlösa pipelinen.
Du kan också välja Anpassa regler för att skapa pull-begäranden från förgrenade lagringsplatser för att ytterligare anpassa de här inställningarna.
Andra sätt att öka förgreningssäkerheten är:
Om du använder validering av pull-begäranden för att utlösa byggen avmarkerar du Bygg pull-begäranden från gafflar av det här förrådet i avsnittet Utlösare i pipelinedefinitionen eller säkerställer att Gör hemligheter tillgängliga för byggen av gafflar och Förgreningsbyggen har samma behörigheter som vanliga byggen avmarkeras. Du kan också välja Kräv en gruppmedlems kommentar innan du skapar en pull-begäran.
Använd Microsoft-värdbaserade agenter för att bygga från förgreningar. Resurser tas sedan omedelbart bort från agenterna efter byggen. Om du använder lokalt installerade agenter rensar och uppdaterar du agenterna regelbundet eller använder separata agenter för olika förgreningar eller grenar.
Azure Repos-förråd
Skydda åtkomsten till lagringsplatser i YAML-pipelines
Inställningen Skydda åtkomst till lagringsplatser i YAML-pipelines-projekt eller organisationsinställning ger detaljerade behörigheter för YAML-pipelines. Den här inställningen gör att en YAML-pipeline uttryckligen begär behörighet att komma åt valfri lagringsplats, oavsett projekt. Mer information finns i Skydda åtkomst till lagringsplatser i YAML-pipelines.
Anmärkning
Inställningen Skydda åtkomst till lagringsplatser i YAML-pipelines gäller inte för GitHub-lagringsplatser.
När den här inställningen är aktiverad begär Azure Repos YAML-pipelines alltid behörighet att komma åt lagringsplatser första gången de körs. Du ser en behörighetsbegäran som följande skärmbild:
Välj Tillåt för att bevilja behörighet till dina pipelinelagringsplatser eller resurser. Nu lyckas pipelinen.
Använda en git-kommandorad för att checka ut andra lagringsplatser
Ett kommandoradsskript som git clone https://github/fabrikam-tailspin/FabrikamFiber/_git/OtherRepo/ kan misslyckas när Skydda åtkomst till lagringsplatser i YAML-pipelines är aktiverat. Lös problemet genom att uttryckligen checka ut lagringsplatsen OtherRepo med kommandot checkout , till exempel checkout: git://FabrikamFiber/OtherRepo.
Exempel på Azure Repos
I följande exempel visas processen för att förbättra säkerheten för Azure Repos-åtkomst i en pipeline.
Organisationen https://dev.azure.com/fabrikam-tailspin innehåller projekten SpaceGameWeb och FabrikamFiber .
SpaceGameWeb-projektet innehåller lagringsplatserna SpaceGameWeb och SpaceGameWebReact.
FabrikamFiber-projektet innehåller lagringsplatserna FabrikamFiber, FabrikamChat och FabrikamFiberLib. FabrikamFiber-lagringsplatsen använder FabrikamFiberLib-lagringsplatsen som en undermodul.
SpaceGameWeb-pipelinen i SpaceGameWeb-projektet checkar ut lagringsplatsen SpaceGameWebReact i SpaceGameWeb-projektet och FabrikamFiber- och FabrikamChat-lagringsplatserna i FabrikamFiber-projektet.
Om projektet inte har konfigurerats för att använda en projektbaserad byggidentitet eller för att skydda åtkomsten till lagringsplatser i YAML-pipelines kan SpaceGameWeb-pipelinen komma åt alla lagringsplatser i alla projekt i organisationen och köras korrekt.
Använda identitet på projektnivå
För att förbättra säkerheten använder du en identitet på projektnivå för att köra pipelinen. Aktivera växeln Begränsa omfånget av jobbauktorisering till aktuellt projekt för icke-release-pipelines i Projektinställningar eller Organisationsinställningar.
Om den här inställningen är aktiverad kan pipelinen bara komma åt resurser i SpaceGameWeb-projektet , som endast innehåller lagringsplatserna SpaceGameWeb och SpaceGameWebReact . Pipelinen misslyckas eftersom den inte kan checka ut lagringsplatserna i FabrikamFiber-projektet .
Du ser felen 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 och 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.
Åtgärda problemen genom att ge pipelineprojektet åtkomst till FabrikamFiber-projektet och ge pipelineidentiteten läsbehörighet till lagringsplatserna FabrikamFiber, FabrikamChat och FabrikamFiberLib .
Kolla uttryckligen ut undermodulen
FabrikamFiber-lagringsplatsen använder FabrikamFiberLib-lagringsplatsen som en undermodul. Även om du ger pipelineåtkomst till båda lagringsplatserna misslyckas fortfarande utcheckningen av FabrikamFiber-lagringsplatsen när du checkar ut undermodulen FabrikamFiberLib .
Åtgärda problemet genom att uttryckligen checka ut FabrikamFiberLib-lagringsplatsen innan du checkar ut FabrikamFiber-lagringsplatsen . Lägg till ett checkout: git://FabrikamFiber/FabrikamFiberLib steg före checkout: FabrikamFiber steget. Exempelpipelinen lyckas nu.
Skydda åtkomsten till YAML-pipelinen
Om exemplet SpaceGameWeb-pipeline är en YAML-pipeline och Skydda åtkomsten till lagringsplatser i YAML-pipelines är aktiverad, kräver pipelinen behörighet att komma åt Lagringsplatserna SpaceGameWebReact, FabrikamFiber och FabrikamChat första gången den körs.
Följande kod visar den fullständiga YAML-pipelinen.
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
Fler säkerhetsåtgärder för lagringsplatser
Om du vill minska säkerhetsriskerna från YAML- och klassiska pipelines som delar resurser inaktiverar du skapandet av klassiska pipelines genom att aktivera Inaktivera skapande av klassiska byggpipelines och Inaktivera växlingsknappar för klassiska versionspipelines i Projektinställningar eller Organisationsinställningar. Skapande av klassisk bygg- och versionspipeline inaktiveras som standard för nya organisationer.
Använd pipelinemallar för att definiera pipelinestrukturen och förhindra skadlig kodinfiltrering. Mallar kan också automatiskt utföra uppgifter, till exempel genomsökning av autentiseringsuppgifter eller framtvinga kontroller av skyddade resurser.
Kräv manuellt godkännande varje gång en pipeline begär lagringsplatsen. Mer information finns i Godkännanden och kontroller.
Använd en skyddad grenkontroll för att förhindra att pipelines körs automatiskt på obehöriga grenar.
Ange att en lagringsplats endast ska användas i angivna YAML-pipelines. Mer information finns i Lägga till pipelinebehörigheter till en lagringsplatsresurs.
Begränsa omfånget för Åtkomsttoken för Azure Pipelines genom att endast ange token för lagringsplatser som anges i pipelinens
resourcesavsnitt. Mer information finns i Skydd av lagringsplatser.