Delen via


Geheimen beveiligen in Azure Pipelines

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

Dit artikel bevat aanbevolen procedures voor het beveiligen van geheimen in Azure Pipelines. Een geheim is alles waartoe u de toegang strikt wilt beheren, zoals API-sleutels, wachtwoorden, certificaten of cryptografische sleutels.

Azure Pipelines genereert geen geheime waarden. Mogelijk moet u echter een geheim toevoegen aan een pijplijn om gevoelige gegevens op te slaan, zoals een API-sleutel. Zie Geheime variabelen instellen voor meer informatie over het instellen van geheime variabelen.

Gebruik geen geheimen als er een andere methode beschikbaar is

De beste methode om een geheim te beveiligen, is niet om een geheim in de eerste plaats te hebben. Controleer of uw pijplijn een andere methode kan gebruiken dan een geheim om een taak uit te voeren.

  • Beheerde identiteiten gebruiken:

  • Azure CLI-taak:

    • Als u de Azure CLI-taak gebruikt, kunt u overwegen om in uw pijplijn de instelling te gebruiken voor toegang tot details van de addSpnToEnvironment service-principal in het script zonder expliciet geheimen door te geven.

Zie Service-principals en beheerde identiteiten gebruiken voor meer informatie

Geheime variabelen gebruiken

Sla nooit gevoelige waarden op als tekst zonder opmaak in een Azure Pipelines -.yml-bestand .

Geheime variabelen kunnen worden gebruikt voor persoonlijke informatie, zoals wachtwoorden, id's en andere identificatiegegevens die u niet wilt weergeven in een pijplijn. U wordt aangeraden geheime variabelen in te stellen met Azure Key Vault. U kunt ook geheime variabelen instellen in de gebruikersinterface of in een variabelegroep. U wordt afgeraden een logboekregistratieopdracht te gebruiken om een geheime variabele in te stellen. Wanneer u een geheim instelt met een opdracht voor logboekregistratie, kan iedereen die toegang heeft tot uw pijplijn ook het geheim zien.

Geheime variabelen worden versleuteld en kunnen worden gebruikt in pijplijnen zonder dat hun waarden worden weergegeven. Hoewel hun waarden niet zichtbaar zijn, echo je nooit geheimen als uitvoer en geef je geen geheimen door op de opdrachtregel. In plaats daarvan raden we u aan uw geheimen toe te wijzen aan omgevingsvariabelen.

Wanneer u een geheim maakt, volgt u richtlijnen voor variabelenamen en zorgt u ervoor dat uw geheime naam geen gevoelige informatie openbaar maakt.

Toegang tot geheime variabelen beperken

Volg deze aanbevolen procedures om de toegang tot geheimen in Azure DevOps te beperken:

  • Sla uw geheimen op in Azure Key Vault. Met Azure Key Vault kunt u vervolgens het op rollen gebaseerde toegangsbeheermodel van Azure gebruiken om de toegang tot een geheim of groep geheimen te beperken.
  • Stel geheime variabelen in de gebruikersinterface in voor een pijplijn. Geheime variabelen die zijn ingesteld in de gebruikersinterface voor pijplijninstellingen voor een pijplijn, hebben het bereik van de pijplijn waar ze zijn ingesteld. U kunt dus geheimen hebben die alleen zichtbaar zijn voor gebruikers met toegang tot die pijplijn.
  • Geheimen instellen in een variabelegroep. Variabelegroepen volgen het beveiligingsmodel van de bibliotheek. U kunt bepalen wie nieuwe items in een bibliotheek kan definiëren en wie een bestaand item kan gebruiken.

Schrijf geen geheimen naar logboeken

Azure Pipelines probeert waar mogelijk geheimen te verwijderen uit logboeken, maar het is niet onfeilbaar. Vermijd het echoën van geheimen naar de console, het gebruik ervan in opdrachtregelparameters of het vastleggen van geheimen in bestanden. Wees voorzichtig wanneer u Azure CLI-opdrachten gebruikt die gevoelige informatie uitvoeren. Gebruik de None output format, en als u een geheim wilt ophalen uit een Azure CLI-aanroep, Use none output format and retrieve security information to a secret variable.

Gebruik gestructureerde gegevens niet als geheimen

Vermijd het gebruik van gestructureerde gegevensindelingen, zoals JSON, XML of YAML, om geheime waarden in te kapselen, inclusief besturingstekens zoals regelterugloop en \rregelfeed.\n Maak in plaats daarvan afzonderlijke geheimen voor elke gevoelige waarde. Deze aanpak zorgt voor een betere nauwkeurigheid van de redaction en minimaliseert het risico dat gevoelige gegevens per ongeluk zichtbaar worden gemaakt.

Controleren hoe geheimen worden verwerkt

Volg deze aanbevolen procedures om te controleren hoe geheimen worden gebruikt in Azure Pipelines:

  • Bekijk de broncode: Bekijk de broncode van de opslagplaats die als host fungeert voor de pijplijn. Controleer alle taken die in de pijplijn worden gebruikt om ervoor te zorgen dat geheimen correct worden verwerkt. Controleer bijvoorbeeld of geheimen niet per ongeluk naar onbedoelde hosts worden verzonden of expliciet worden afgedrukt naar logboekuitvoer.
  • Controleer uitvoeringslogboeken: na het testen van geldige en ongeldige invoer, bekijkt u de uitvoeringslogboeken voor uw pijplijn. Zorg ervoor dat geheimen correct worden bewerkt en niet worden weergegeven. Soms kunnen fouten in opdrachten of hulpprogramma's onbedoeld geheimen in foutenlogboeken lekken. Hoewel Azure Pipelines probeert geheimen uit logboeken te verwijderen, is handmatige controle nog steeds essentieel.

Geheimen controleren en draaien

Volg deze aanbevolen procedures om geheimen te controleren en te roteren:

  • Geregistreerde geheimen controleren: evalueer regelmatig de geheimen die zijn geregistreerd in uw pijplijnen. Bevestig dat ze nog steeds nodig zijn en verwijder alle die niet meer nodig zijn, wat helpt bij het verminderen van onbelangrijke en potentiële beveiligingsrisico's.
  • Geheimen draaien: draai geheimen regelmatig om het tijdvenster te minimaliseren waarin een gecompromitteerd geheim kan worden misbruikt. Door geheimen periodiek te wijzigen, verbetert u de beveiliging.
  • De juiste verificatiemethode kiezen
    • Gebruikte typen geheimen:
      • Persoonlijke toegangstokens (PAT's): deze tokens worden gebruikt voor verificatie. Volg aanbevolen beveiligingsprocedures bij het kiezen van de juiste verificatiemethode. U kunt PAT's beheren met behulp van de REST API.
      • Geheime variabelen: gebruik geheime variabelen om veilig gevoelige informatie op te slaan, zoals API-sleutels, wachtwoorden of andere referenties in uw pijplijn.
      • Azure Key Vault-geheimen: Gebruik Azure Key Vault om geheimen veilig op te slaan en te beheren.
      • Serviceverbindingen: Met deze serviceverbindingen kan uw pijplijn verbinding maken met externe services (bijvoorbeeld Azure, GitHub, Docker Hub). Zorg voor de juiste configuratie en veilige verwerking van serviceverbindingsgeheimen.

YAML-sjablonen gebruiken

Gebruik sjablonen in plaats van inlinescripts met geheime parameters rechtstreeks in uw pijplijn-YAML op te slaan. Deze aanpak verbetert de beveiliging door gevoelige informatie te abstraheren van de hoofdpijplijn.

Als u deze aanpak wilt implementeren, maakt u een afzonderlijk YAML-bestand voor uw script en slaat u dat script vervolgens op in een afzonderlijke, beveiligde opslagplaats. U kunt vervolgens verwijzen naar de sjabloon en een geheime variabele doorgeven in uw YAML als parameter. De beveiligde variabele moet afkomstig zijn van Azure Key Vault, een variabelegroep of de gebruikersinterface van de pijplijn. Zie de sjabloongebruiksreferentie voor meer informatie over het gebruik van sjablonen.

Geheimen beperken met vertakkingsbeleid en machtigingen voor variabelengroepen

Om ervoor te zorgen dat geheimen zijn gekoppeld aan de main vertakking en niet toegankelijk zijn voor willekeurige vertakkingen, kunt u een combinatie van machtigingen voor variabelengroepen, voorwaardelijke taakinvoeging en vertakkingsbeleid gebruiken.

Met vertakkingsbeleid kunt u buildvalidatiebeleid afdwingen dat alleen builds van de hoofdvertakking toestaat. Vervolgens kunt u machtigingen voor variabelengroepen gebruiken om ervoor te zorgen dat alleen geautoriseerde pijplijnen toegang hebben tot de geheimen die zijn opgeslagen in uw variabelegroep. Ten slotte kunt u een voorwaarde in uw pijplijn gebruiken om ervoor te zorgen dat de variabelegroep alleen kan worden verwezen door een push naar de main vertakking.

jobs:
- job: ExampleJob
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  pool:
    vmImage: 'ubuntu-latest'
  steps:
  - script: echo "This runs only for the main branch"
    displayName: 'Conditional Step'
  variables:
  - group: your-variable-group-name

Volgende stappen