Delen via


Variabelen en parameters veilig gebruiken in uw pijplijn

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

In dit artikel wordt beschreven hoe u veilig variabelen en parameters gebruikt om invoer van pijplijngebruikers te verzamelen. Als u meer wilt weten over het gebruik van variabelen en parameters, raadpleegt u:

Wees voorzichtig met geheime variabelen. De aanbevolen manieren om geheime variabelen in te stellen, bevinden zich in de gebruikersinterface, in een variabelegroep en in een variabelegroep uit Azure Key Vault. Zie Geheime variabelen instellen voor meer informatie.

Variabelen

Variabelen kunnen een handige manier zijn om informatie van de gebruiker vooraf te verzamelen. U kunt ook variabelen gebruiken om gegevens van stap naar stap door te geven in een pijplijn.

Maar gebruik variabelen met voorzichtigheid. Nieuw gemaakte variabelen, ongeacht of deze zijn gedefinieerd in YAML of door een script zijn geschreven, zijn standaard lezen/schrijven. Een downstreamstap kan de waarde van een variabele wijzigen op een manier die u niet verwacht.

Uw script leest bijvoorbeeld:

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

Een voorgaande stap kan worden ingesteld op MyConfigDebug & deltree /y c:. Hoewel in dit voorbeeld alleen de inhoud van uw buildagent wordt verwijderd, kunt u zich voorstellen hoe deze instelling gemakkelijk veel gevaarlijker kan worden.

U kunt variabelen alleen-lezen maken. Systeemvariabelen zoals Build.SourcesDirectorytaakuitvoervariabelen en wachtrijtijdvariabelen zijn altijd alleen-lezen. Variabelen die zijn gemaakt in YAML of die tijdens runtime door een script worden gemaakt, kunnen worden aangeduid als alleen-lezen. Wanneer een script of taak een nieuwe variabele maakt, kan deze de vlag doorgeven in de isReadonly=true logboekregistratieopdracht om de variabele alleen-lezen te maken.

In YAML kunt u alleen-lezenvariabelen opgeven met behulp van een specifieke sleutel:

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

Variabelen voor wachtrijtijd

Wanneer u een variabele definieert in de gebruikersinterface-editor voor pijplijnen, kunt u ervoor kiezen om gebruikers de waarde ervan te laten overschrijven bij het uitvoeren van de pijplijn. We noemen een dergelijke variabele een tijdsvariabele in de wachtrij. Variabelen voor wachtrijtijd worden altijd gedefinieerd in de gebruikersinterface-editor voor pijplijnen.

Schermopname van het definiëren van een variabele voor wachtrijtijd.

Variabelen voor wachtrijtijd worden beschikbaar gesteld aan de eindgebruiker wanneer ze handmatig een pijplijn uitvoeren en ze kunnen hun waarden wijzigen. Schermopname van het bijwerken van de waarde van een variabele in de wachtrijtijd.

Gebruikers moeten de samenstellingsmachtiging voor de wachtrij bewerken voor de pijplijn om variabelen op te geven die zijn ingesteld op het tijdstip van de wachtrij.

Variabelen beperken die kunnen worden ingesteld op het tijdstip van de wachtrij

De gebruikersinterface en REST API die worden gebruikt om een pijplijn uit te voeren, bieden gebruikers de mogelijkheid om nieuwe variabelen te definiëren op het moment van de wachtrij.

Schermopname van het toevoegen van een variabele voor wachtrijtijd vlak voordat u de pijplijn uitvoert.

In de begindagen van Azure Pipelines traden er bij deze functionaliteit enkele problemen op:

  • Gebruikers kunnen nieuwe variabelen definiëren die niet expliciet zijn gedefinieerd door de auteur van de pijplijn in de definitie.
  • Gebruikers konden systeemvariabelen overschrijven.

Om deze problemen op te lossen hebben we een instelling gedefinieerd om variabelen te beperken die tijdens de wachtrijtijd kunnen worden ingesteld. Als deze instelling is ingeschakeld, kunnen alleen variabelen worden ingesteld die expliciet zijn gemarkeerd als Settable at queue time (Instelbaar tijdens wachtrijtijd). Met andere woorden, u kunt alle variabelen instellen tijdens de wachtrijtijd, als deze instelling is ingeschakeld.

De instelling is ontworpen om te werken op organisatieniveau en op projectniveau.

  1. Organisatieniveau. Wanneer de instelling is ingeschakeld, wordt afgedwongen dat alleen voor alle pijplijnen in alle projecten in de organisatie alleen variabelen kunnen worden ingesteld die expliciet zijn gemarkeerd als 'Settable at queue time'. Wanneer de instelling is uitgeschakeld, kan elk project kiezen of u variabelen wilt beperken die zijn ingesteld op het tijdstip van de wachtrij of niet. De instelling is een wisselknop onder Organisatie Instellingen -> Pijplijnen -> Instellingen. Alleen Beheer istrators voor projectverzamelingen kunnen deze in- of uitschakelen. Schermopname van het beperken van variabelen die op wachtrijtijd op organisatieniveau kunnen worden ingesteld.
  2. Projectniveau. Wanneer de instelling is ingeschakeld, wordt afgedwongen dat alleen voor alle pijplijnen in het project alleen variabelen kunnen worden ingesteld die expliciet zijn gemarkeerd als 'Settable at queue time'. Als de instelling is ingeschakeld op organisatieniveau, is deze ingeschakeld voor alle projecten en kan deze niet worden uitgeschakeld. De instelling is een wisselknop onder Project Instellingen -> Pijplijnen -> Instellingen. Alleen Project Beheer istrators kunnen deze in- of uitschakelen. Schermopname van het beperken van variabelen die kunnen worden ingesteld op wachtrijtijd op projectniveau.

Laten we eens kijken naar een voorbeeld. Stel dat de instelling is ingeschakeld en uw pijplijn definieert een variabele met de naam my_variable die niet is ingesteld tijdens de wachtrij. Schermopname van het definiëren van een variabele in een klassieke pijplijn.

Stel vervolgens dat u de pijplijn wilt uitvoeren. In het deelvenster Variabelen worden geen variabelen weergegeven en de knop Variabele toevoegen ontbreekt.

Schermopname van het deelvenster Variabelen met de instelling ingeschakeld.

Het gebruik van builds - queue and the Runs - Run Pipeline REST API calls to queue a pipeline run and set the value of my_variable of a new variable will fail with an error similar to the following.

{
  "$id": "1",
  "innerException": null,
  "message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
  "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
  "typeKey": "PipelineValidationException",
  "errorCode": 0,
  "eventId": 3000
}

Parameters

In tegenstelling tot variabelen kunnen pijplijnparameters niet worden gewijzigd door een pijplijn terwijl deze wordt uitgevoerd. Parameters hebben gegevenstypen zoals number en string, en ze kunnen worden beperkt tot een subset van waarden. Het beperken van de parameters is handig wanneer een door de gebruiker configureerbaar deel van de pijplijn alleen een waarde uit een beperkte lijst moet halen. De installatie zorgt ervoor dat de pijplijn geen willekeurige gegevens gebruikt.

Parametervalidatie voor shell-taken inschakelen

Pijplijnen kunnen verwijzen naar taken die in de pijplijn worden uitgevoerd. Verschillende taken die zijn opgenomen in Azure DevOps hebben een parameter argumenten waarmee u meer opties voor de taak kunt opgeven.

Wanneer de instelling Parametervalidatie voor shell-taken inschakelen is ingeschakeld, wordt de parameter argumenten gecontroleerd op tekens die mogelijk niet correct door de shell worden uitgevoerd. Voorbeelden van tekens zijn puntkomma's, aanhalingstekens en haakjes.

Net als bij de optie Limietvariabelen die kunnen worden ingesteld bij de optie Voor wachtrijtijd, kan parametervalidatie voor shell-taken worden geconfigureerd op organisatieniveau op Instellingen> Pipelines Instellingen of op projectniveau op Instellingen> Pipelines>>Instellingen.

Wanneer deze optie is ingeschakeld, is er een gedetecteerd validatieprobleem, een foutbericht zoals het volgende wordt vastgelegd: Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

Als u het probleem wilt oplossen, past u de argumenten aan door speciale tekens te ontsnappen, zoals aangegeven in het foutbericht.

Wanneer parametervalidatie voor shell-taken is ingeschakeld, wordt de validatie toegepast op de parameter argumenten in de volgende taken.

  • Powershell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

Volgende stappen

Nadat u uw invoer hebt beveiligd, moet u ook uw gedeelde infrastructuur beveiligen.