Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
In Azure Pipelines kunt u variabelen en parameters gebruiken om invoer van gebruikers te verzamelen. Deze mogelijkheid is handig als u gebruikers wilt toestaan de pijplijnuitvoering aan te passen. Het accepteren van gebruikersinvoer kan echter ook beveiligingsrisico's veroorzaken als deze niet goed worden verwerkt. In dit artikel leert u hoe u veilig variabelen en parameters in uw pijplijn kunt gebruiken.
Dit artikel maakt deel uit van een reeks waarmee u beveiligingsmaatregelen voor Azure Pipelines kunt implementeren. Zie Secure Azure Pipelines voor meer informatie.
Vereiste voorwaarden
Categorie | Eisen |
---|---|
Azure DevOps | - Aanbevelingen implementeren in Azure DevOps veilig en beveiligd maken van Azure Pipelines. - Basiskennis van YAML en Azure Pipelines. Zie Uw eerste pijplijn maken voor meer informatie. |
Machtigingen | - Machtigingen voor pijplijnen wijzigen: lid van de groep Projectbeheerders. - Organisatiemachtigingen wijzigen: Lid van de groep Beheerders van projectverzamelingen. |
Variabelen
Variabelen fungeren als een handige methode om gebruikersinvoer vooraf te verzamelen en gegevensoverdracht tussen pijplijnstappen te vergemakkelijken. Wees echter voorzichtig bij het werken met variabelen. Nieuw gemaakte variabelen, ongeacht of deze zijn gedefinieerd in YAML of in scripts, zijn standaard lezen/schrijven. Downstreamstappen kunnen variabele waarden onverwacht wijzigen.
Denk bijvoorbeeld aan het volgende scriptfragment:
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Als een voorgaande stap MyConfig
op Debug & deltree /y c:
instelt, kan dit leiden tot onbedoelde gevolgen. Hoewel in dit voorbeeld alleen de inhoud van uw buildagent wordt verwijderd, wordt het potentiële gevaar van dergelijke instellingen gemarkeerd.
U kunt variabelen read-only maken.
Systeemvariabelen zoals Build.SourcesDirectory
, taakuitvoervariabelen 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 het de isReadonly=true
-vlag in zijn logboekregistratieopdracht doorgeven om de variabele read-only te maken.
In YAML kunt u alleen-lezenvariabelen opgeven met behulp van de volgende specifieke sleutel:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Wees voorzichtig met geheime variabelen. De aanbevolen methoden voor het instellen van geheime variabelen zijn onder andere het gebruik van de gebruikersinterface, het maken van een variabelegroep of het gebruik van een variabelegroep die afkomstig is uit Azure Key Vault. Zie Geheime variabelen instellen voor meer informatie.
Variabelen voor wachtrijtijd
Wanneer u een variabele definieert in de gebruikersinterface-editor voor pijplijnen, kunt u toestaan dat gebruikers de waarde ervan overschrijven tijdens de uitvoering van de pijplijn. Deze variabelen worden wachtrij-tijdvariabelen genoemd en worden altijd gedefinieerd in de gebruikersinterface-editor voor pijplijnen.
Variabelen voor wachtrijtijd worden beschikbaar gesteld aan de eindgebruiker wanneer ze handmatig een pijplijn uitvoeren en ze kunnen hun waarden wijzigen.
Gebruikers hebben de machtiging om de wachtrijconfiguratie te bewerken voor de pijplijn nodig om variabelen op te geven die bij het in de wachtrij zetten worden ingesteld.
Variabelen beperken die kunnen worden ingesteld tijdens de wachttijd
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.
In de vroege dagen van Azure Pipelines had deze functionaliteit de volgende problemen:
- Gebruikers kunnen nieuwe variabelen definiëren die nog niet 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 wachtrij kunnen worden ingesteld. Als deze instelling is ingeschakeld, kunnen alleen de variabelen die expliciet zijn gemarkeerd als 'Settable at queue time' worden ingesteld. Met andere woorden, u kunt eventuele variabelen instellen op het moment van de wachtrij, tenzij deze instelling is ingeschakeld.
De instelling is ontworpen om te werken op organisatie- en projectniveau.
-
Organisatieniveau:
- Wanneer de instelling is ingeschakeld, wordt afgedwongen dat alleen variabelen die expliciet zijn gemarkeerd als 'Instelbaar bij wachtrijtijd' kunnen worden gewijzigd voor alle pijplijnen binnen alle projecten van de organisatie.
- Beheerders van projectverzamelingen kunnen deze instelling in- of uitschakelen.
- Krijg toegang tot deze instelling onder Organisatie-instellingen>Pijplijnen>Instellingen.
-
Projectniveau:
- Net als op organisatieniveau zorgt het inschakelen van deze instelling ervoor dat alleen variabelen die zijn gemarkeerd als 'Settable at queue time' kunnen worden gewijzigd voor alle pijplijnen binnen het specifieke project.
- Als de instelling op organisatieniveau is ingeschakeld, is deze van toepassing op alle projecten en kan deze niet worden uitgeschakeld.
- Projectbeheerders kunnen deze instelling in- of uitschakelen.
- Toegang tot deze instelling onder Instellingen voor projectinstellingen>pijplijnen>.
In het volgende voorbeeld ziet u dat de instelling is ingeschakeld en dat uw pijplijn een variabele definieert met de naam my_variable
die niet instelbaar is tijdens de wachttijd.
Stel vervolgens dat u de pijplijn wilt uitvoeren. In het deelvenster Variabelen worden geen variabelen weergegeven en de knop Variabele toevoegen ontbreekt.
Met behulp van de Builds - Queue en de Runs - Run Pipeline REST API-aanroepen om een pipeline-run in te plannen en de waarde van my_variable
of een nieuwe variabele in te stellen, mislukt met een foutmelding die lijkt op de volgende.
{
"$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
}
Parameterwaarden
In tegenstelling tot variabelen kan een actieve pijplijn geen pijplijnparameters wijzigen.
Parameters hebben gegevenstypen zoals number
en string
, en ze kunnen worden beperkt tot specifieke waardesubsets. Deze beperking is waardevol wanneer een door de gebruiker configureerbaar aspect van de pijplijn alleen waarden uit een vooraf gedefinieerde lijst mag accepteren, zodat de pijplijn geen willekeurige gegevens accepteert.
Parametervalidatie voor shell-taken inschakelen
Pijplijnen kunnen verwijzen naar taken die in de pijplijn worden uitgevoerd. Sommige taken bevatten een arguments
parameter waarmee u meer opties voor de taak kunt opgeven.
Wanneer de instelling Parametervalidatie voor shell-taken inschakelen is ingeschakeld, wordt de parameter argumenten gecontroleerd om ervoor te zorgen dat de shell tekens zoals puntkomma's, aanhalingstekens en haakjes correct uitvoert. Net als bij de Limietvariabelen die kunnen worden ingesteld op wachtrijtijd optie, kunt u validatie van shell-taskparameters inschakelen configureren op organisatie- of projectniveau onder Instellingen>Pijplijnen>Instellingen.
Wanneer deze functie is ingeschakeld, activeren eventuele validatieproblemen met betrekking tot de arguments
parameter een foutbericht zoals de volgende:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
U kunt dit probleem oplossen door de argumenten aan te passen door speciale tekens te escapen, zoals aangegeven in het foutbericht. Deze validatie is van toepassing op de arguments
parameter in de volgende specifieke taken:
- Powershell
- BatchScript
- Bash (een Unix-shell en programmeertaal)
- SSH
- AzureFileCopy
- WindowsMachineFileCopy