Delen via


De pijplijn en CI/CD-werkstroom beveiligen

In dit artikel wordt beschreven hoe u uw CI/CD-pijplijnen en werkstroom beveiligt.

Met automatisering en de Agile-methodologie kunnen teams sneller leveren, maar ook complexiteit toevoegen aan beveiliging, omdat de werkstroom zich uitbreidt tot de ontwikkelaarsteams zelf.

In het volgende diagram ziet u een CI/CD-werkstroom van de basislijn. Het rode configuratiepictogram geeft beveiligingsmachtigingen aan die door de klant moeten worden geconfigureerd. Dit volgt het model voor gedeelde verantwoordelijkheid, waarbij Azure en andere leveranciers machtigingen bieden, die door de klant moeten worden geconfigureerd volgens hun governancemodel en bedrijfsvereisten.

Een typische CI/CD-werkstroom die laat zien hoe codewijzigingen in een Git-opslagplaats van invloed zijn op uw cloudresources

Laten we eens kijken naar elke fase van deze typische werkstroom, zodat u begrijpt hoe de configuraties vaak van elkaar afhankelijk zijn. Uw werkstroom kan meer fasen hebben. De volgende concepten helpen u inzicht te krijgen in CI/CD en u te helpen bij het ontwerpen van uw werkstroom voor beveiliging.

Fase 1: Git-werkstroom

Codewijzigingen, niet alleen naar software, maar ook naar pijplijn als code en infrastructuur als code, worden opgeslagen en beheerd in Git. Git is een gedistribueerde broncodebeheersoftware. Wanneer code wordt gepusht van lokale computers naar de gecentraliseerde Git-server, kunnen bedrijfsregels worden toegepast voordat deze worden geaccepteerd.

Pull-aanvragen en samenwerking

De industriestandaardwerkstroom, ongeacht uw saaS-leverancier (Software Configuration Management) software als een service (SaaS), is het gebruik van pull-aanvragen, die zowel als een geautomatiseerde kwaliteitspoortwachter als een handmatige goedkeuringsstap kunnen fungeren voordat broncode wordt geaccepteerd.

De werkstroom voor pull-aanvragen is ontworpen om gezonde wrijving te introduceren. Daarom moet deze alleen worden toegepast op beveiligde specifieke Git-vertakkingen. Met name de vertakkingen die geautomatiseerde werkstromen activeren die uw cloudresources kunnen implementeren, configureren of op een andere manier beïnvloeden. Deze vertakkingen worden beveiligde vertakkingen genoemd en volgen doorgaans naamconventies zoals production of releases/*.

Het is gebruikelijk dat pull-aanvragen het volgende vereisen:

  • Peerbeoordelingen
  • Continue integratie (CI)-builds doorgeven
  • Handmatige goedkeuring

Als aan de vereisten wordt voldaan, worden de codewijzigingen geaccepteerd en kunnen ze worden samengevoegd.

Toegang tot beveiligde vertakkingen beperken

De werkstroom voor pull-aanvragen wordt samen met besturingselementen voor beperkte toegang gebruikt. De werkstroom voor pull-aanvragen kan echter niet worden afgedwongen, tenzij de server is geconfigureerd om directe wijzigingen in beveiligde vertakkingen af te wijzen.

Een ontwikkelaar kan niet rechtstreeks naar de production vertakking pushen, maar moet in plaats daarvan een pull-aanvraag maken die gericht is op de beveiligde vertakking. Elke SCM-leverancier heeft een andere smaak voor het bereiken van beperkte toegang tot beveiligde branches. Met GitHub is deze functie bijvoorbeeld alleen beschikbaar voor organisaties die gebruikmaken van het GitHub-team of de GitHub Enterprise-cloud.

Uw Git-toegangsmodel documentleren

Omdat het samenwerkingsmodel complex is en veel bewegende onderdelen bevat, is het handig om een tabel te maken die alle mogelijke manieren documenteert waarop codewijzigingen implementaties kunnen activeren, bijvoorbeeld:

Naam van vertakking Vereist pull-aanvraag? Implementeert? Toegang voor ontwikkelaars Beheerderstoegang
feat/* Nee Nr. Lezen/schrijven Lezen/schrijven
main Ja Staging Read Lezen/schrijven
production Ja, van main alleen Productie Read Lezen/schrijven

Dit voorbeeld van een Git-toegangstabel is te versimpeld om het doel ervan te illustreren. In de praktijk zijn er vaak meer actoren, meer implementatiedoelen en meerdere pijplijnen die worden uitgevoerd voor verschillende use cases. De tabelstructuur kan afwijken, afhankelijk van de vereisten van uw organisatie en uw workloads.

De tabel moet u helpen bij het beantwoorden van vragen zoals:

  • Als een ontwikkelaar codewijzigingen naar vertakking X pusht, wordt deze geïmplementeerd? Zo ja, naar welke omgeving?
  • Op welk moment in de levenscyclus van de toepassingscode is er een scan op beveiligingsproblemen uitgevoerd?
  • Als er een beveiligingsprobleem wordt gevonden, hoeveel codepushen en goedkeuringen zijn vereist voordat deze in productie terechtkomt?

Deze tabel is niet alleen handig voor foutopsporing en statische documentatie, maar ook voor teamsamenwerking. Het is transparant voor ontwikkelaars waar gezonde wrijving in de werkstroom is geïntroduceerd om prioriteit te geven aan codekwaliteit en -beveiliging. Belangrijker is dat de ontwikkelaar het verwachte pad toont voor codewijzigingen om de productie te bereiken.

Omdat DevOps een traject is, is uw Git-toegangsmodel niet statisch. Het verandert en ontwikkelt zich naarmate de teams hun eigen ritmes en volwassenheid vinden. Daarom is het belangrijk om deze documentatie zo dicht mogelijk bij de code op te slaan, bijvoorbeeld in de Git-opslagplaatsen.

Zie voor meer informatie over pull-aanvragen en beveiligde vertakkingen:

Fase 2: Pijplijnen als code

De verplaatsing van pijplijn als code versnelde automatiseringsimplementatie en -implementaties door pijplijndefinities en -configuraties van de CI-leverancier naar de ontwikkelaars te verplaatsen, waardoor de build- en implementatielogica dichter bij de bijbehorende toepassingslogica komt. De grotere flexibiliteit hier komt ook met een grotere verantwoordelijkheid.

RBAC-besturingselementen in een pijplijn op basis van een gebruikersinterface kunnen voorkomen dat afzonderlijke gebruikers destructieve wijzigingen aanbrengen. Pijplijnen als code worden echter vaak uitgevoerd met bevoorrechte identiteiten en kunnen uw werkbelastingen vernietigen als dit wordt geïnstrueerd.

Fase 3: Uw implementatiereferenties beveiligen

Pijplijnen en codeopslagplaatsen mogen geen in code vastgelegde referenties en geheimen bevatten. Referenties en geheimen moeten ergens anders worden opgeslagen en gebruikmaken van CI-leveranciersfuncties voor beveiliging. Omdat pijplijnen worden uitgevoerd als headless agents, moeten ze nooit het wachtwoord van een persoon gebruiken. Pijplijnen moeten worden uitgevoerd met behulp van hoofdloze beveiligingsprinciplen, zoals service-principals of beheerde identiteiten. Toegang tot de referenties, database-verbindingsreeks s en API-sleutels van deze beveiligingsprincipaal moeten ook veilig worden beheerd in het CI-platform.

Hoe een referentie wordt beveiligd, poorten en goedkeuringen zijn leverancierspecifieke functies. Wanneer u een CI-platform kiest, moet u ervoor zorgen dat het alle functies ondersteunt die u nodig hebt.

Azure Pipelines is een oplossing voor continue integratie op ondernemingsniveau waarbij referenties worden opgeslagen als serviceverbindingen, waarop u goedkeuringen en controles kunt configureren. Deze configuratie omvat handmatige goedkeuring en specifieke branch- of pijplijnautorisaties.

Azure Key Vault

Als uw CI-platform dit ondersteunt, kunt u overwegen referenties op te slaan in een toegewezen geheimarchief, bijvoorbeeld Azure Key Vault. Referenties worden tijdens runtime opgehaald door de buildagent en uw kwetsbaarheid voor aanvallen wordt verminderd.

Fase 4: Uw Azure-resources beveiligen

Uw Azure-resources moeten worden beveiligd volgens het principe van minimale bevoegdheden, toegepast op zowel machtigingen als bereik.

Zie voor meer informatie:

Aangepaste rollen maken voor buildagents

CI/CD-automatisering is niet alleen van toepassing op toepassingen, maar ook op infrastructuur. IaC-sjablonen (Infrastructure as Code) zorgen voor consistente implementaties en helpen gecentraliseerde cloudplatformteams te schalen.

Het is belangrijk om te begrijpen dat IaC-automatisering fout kan gaan. Het kan onjuist worden geconfigureerd en in het slechtste geval de infrastructuur definitief verwijderen. Wanneer u uw cloudtraject plant, moet u vooraf bepalen welke bewerkingen bedrijfskritiek zijn en menselijke tussenkomst vereisen.

Beheervergrendelingen kunnen bijvoorbeeld niet worden verwijderd, kunnen worden toegepast op bedrijfskritieke resources, zoals een gegevens. Als u wilt voorkomen dat dit gebeurt, kunt u machtigingen verwijderen Microsoft.Authorization/*/Delete uit een service-principal die wordt gebruikt in CI-automatisering. In dit voorbeeld en gebruiksvoorbeeld kan de service-principal de beheervergrendeling maken , maar niet verwijderen.

Het is raadzaam om een aangepaste rol te maken voor uw CI-agents. Houd er rekening mee dat bouwagenten headless lopen en hoofdloze agents hersenloos zijn. Kies uw machtigingen zorgvuldig.

Raadpleeg voor meer informatie:

Resources

Volgende stappen

Nu u begrijpt hoe u DevOps beveiligt, leert u meer over end-to-end-governance van DevOps naar Azure.