Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługi Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022
W usłudze Azure Pipelines można umożliwić użytkownikom dostosowywanie sposobu uruchamiania potoku przez zbieranie wprowadzanych przez nich danych za pomocą zmiennych i parametrów. Jednak zaakceptowanie danych wejściowych użytkownika może również powodować zagrożenia bezpieczeństwa, jeśli nie są prawidłowo obsługiwane. Z tego artykułu dowiesz się, jak bezpiecznie używać zmiennych i parametrów w potoku.
Ten artykuł jest częścią serii, która ułatwia implementowanie środków zabezpieczeń dla usługi Azure Pipelines. Aby uzyskać więcej informacji, zobacz Secure Azure Pipelines.
Wymagania wstępne
| Kategoria | Wymagania |
|---|---|
| Azure DevOps | — Zaimplementuj zalecenia w Zabezpieczanie Azure DevOps oraz Zabezpieczanie Azure Pipelines. — Podstawowa wiedza na temat języka YAML i usługi Azure Pipelines. Aby uzyskać więcej informacji, zobacz Utwórz swój pierwszy potok. |
| Uprawnienia | - Aby zmodyfikować uprawnienia potoków: Członek grupy Administratorzy Projektu. - Aby zmodyfikować uprawnienia organizacji: członek grupy Project Collection Administrators. |
Zmienne
Zmienne to wygodny sposób na wcześniejsze zbieranie danych od użytkownika i ułatwianie transferu danych między krokami potoku. Jednak zmienne zdefiniowane w zadaniach YAML lub skryptach są domyślnie do odczytu i zapisu. Wartości skonfigurowane w krokach nadrzędnych mogą nieoczekiwanie modyfikować wartości podrzędne.
Na przykład poniższy fragment kodu skryptu wywołuje zmienną o nazwie MyConfig.
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
Jeśli poprzedni krok ustawi wartość zmiennej MyConfig na Debug & deltree /y c:, uruchomienie tego skryptu spowoduje usunięcie zawartości agenta kompilacji i może prowadzić do niezamierzonych konsekwencji. W tym przykładzie przedstawiono potencjalne zagrożenie dla takich ustawień.
Zmienne systemowe, takie jak Build.SourcesDirectory i zmienne wyjściowe zadań, są zawsze tylko do odczytu. Można również wyznaczyć zmienną utworzoną w skrycie lub zadaniu YAML jako tylko do odczytu, przekazując flagę isReadonly=true w poleceniu rejestrowania.
W definicji zmiennej YAML można określić zmienną tylko do odczytu przy użyciu określonego readonly klucza:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
Należy zachować szczególną ostrożność ze zmiennymi tajnymi. Zalecane metody ustawiania zmiennych tajnych obejmują używanie interfejsu użytkownika, tworzenie grupy zmiennych lub używanie grupy zmiennych pochodzącej z usługi Azure Key Vault. Aby uzyskać więcej informacji, zobacz Ustawianie zmiennych tajnych.
Zmienne czasu kolejki
Podczas definiowania zmiennej w interfejsie użytkownika usługi Azure Pipelines możesz wybrać, czy użytkownicy będą mogli przesłonić wartość podczas wykonywania potoku. Zmienne, które umożliwiają użytkownikom ustawianie ich wartości w czasie kolejki, są nazywane zmiennymi czasu kolejki i mogą być zdefiniowane tylko w interfejsie użytkownika zmiennych usługi Azure Pipelines.
W edytorze klasycznego potoku definiujesz zmienną ustawianą w czasie kolejkowania, zaznaczając pole wyboru dla opcji Ustawiane w czasie kolejkowania. W potokach YAML oznaczasz je, zaznaczając opcję Zezwalaj użytkownikom na zastąpienie tej wartości przy uruchamianiu tego potoku.
Uwaga / Notatka
W potoku wydania wybierz pozycję Ustawialne w czasie publikacji. Aby uzyskać więcej informacji, zobacz Jak edytować zmienne w czasie wdrożenia?
Gdy użytkownik ręcznie uruchamia potok, może wybrać zmienne czasu kolejki i zmienić wartości.
Użytkownicy muszą mieć uprawnienie do edytowania konfiguracji kompilacji kolejki w potoku, aby móc definiować zmienne ustawione w czasie kolejki.
Ogranicz zmienne, które można ustawić w czasie kolejki
Interfejs użytkownika usługi Azure Pipelines i interfejs API REST, który uruchamia potok, umożliwiają użytkownikom dodawanie nowych zmiennych podczas kolejkowania. Ta możliwość umożliwia użytkownikom tworzenie zmiennych, których autor potoku nie zdefiniował, nadpisywanie zmiennych systemowych oraz ustawianie wartości istniejących zmiennych podczas dodawania do kolejki.
Aby uniknąć problemów spowodowanych tymi możliwościami, można ograniczyć zmienne, które można ustawić w czasie kolejki. Można włączyć ustawienie Ogranicz zmienne, które można ustawiać podczas kolejkowania, aby użytkownicy mogli podczas kolejkowania ustawiać tylko zmienne, które są jawnie oznaczone jako Można ustawiać podczas kolejkowania lub Zezwalaj użytkownikom na zastąpienie tej wartości podczas uruchamiania tego potoku.
To ustawienie można zastosować na poziomie organizacji i projektu.
Administratorzy kolekcji projektów mogą zastosować to ustawienie na poziomie organizacji w Ustawienia organizacji>Potoki>Ustawienia. Gdy ustawienie jest włączone, tylko zmienne, które są jawnie oznaczone jako możliwe do ustawienia w czasie kolejkowania, można ustawić w czasie kolejkowania dla wszystkich potoków we wszystkich projektach w organizacji.
Administratorzy projektu mogą zastosować to ustawienie na poziomie projektu w obszarze Ustawienia projektu>Potoki>Ustawienia. Gdy ustawienie jest włączone, tylko zmienne, które są jawnie oznaczone jako Możliwe do ustawienia podczas kolejkowania, można ustawić podczas kolejkowania dla wszystkich potoków w tym projekcie. Jeśli ustawienie nie jest włączone na poziomie organizacji, można je włączyć lub wyłączyć dla poszczególnych projektów.
Jeśli ustawienie na poziomie organizacji jest włączone, ma zastosowanie do wszystkich projektów w organizacji i nie można go wyłączyć na poziomie projektu.
Poniższy przykład przedstawia zmienne dla klasycznego potoku, przy czym niektóre z nich są oznaczone jako Możliwe do ustawienia w czasie kolejkowania. Zmienną BuildPlatform można ustawić w czasie kolejki, ale BuildConfiguration nie można jej ustawić.
Po uruchomieniu tego potoku na ekranie Zmienne są widoczne i dostępne do wybrania tylko zmienne oznaczone jako Ustawiane w czasie kolejkowania.
Jeśli zmienne limitu, które można ustawić w czasie kolejki , są włączone na poziomie projektu lub organizacji, przycisk Dodaj zmienną nie jest wyświetlany.
Użycie interfejsów API Builds - Queue lub Runs - Run Pipeline do umieszczenia uruchomienia potoku w kolejce oraz próba ustawienia wartości zmiennej, która nie została oznaczona jako Możliwe do ustawienia w momencie kolejkowania, kończą się błędem podobnym do następującego:
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (BuildConfiguration). 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
}
Parametry
Uruchomiony potok nie może modyfikować parametrów potoku, w przeciwieństwie do zmiennych. Parametry mają typy danych, takie jak number i string, i mogą być ograniczone do określonych podzestawów wartości. To ograniczenie jest przydatne, gdy konfigurowalny przez użytkownika aspekt potoku powinien akceptować tylko wartości ze wstępnie zdefiniowanej listy, zapewniając, że potok nie akceptuje dowolnych danych.
Włącz sprawdzanie poprawności argumentów zadań powłoki
Potoki danych mogą odwoływać się do zadań wykonywanych w ich obrębie. Niektóre zadania obejmują arguments parametr, który umożliwia użytkownikom określenie większej liczby opcji zadania.
Zastosowanie ustawienia Włącz walidację argumentów zadań powłoki powoduje sprawdzenie parametrów arguments wbudowanych zadań powłoki pod kątem danych wejściowych, które mogą wstrzykiwać polecenia do skryptów. To sprawdzenie gwarantuje, że powłoka prawidłowo interpretuje znaki, takie jak średniki, cudzysłowy i nawiasy, w następujących zadaniach potoku:
- PowerShell
- Skrypt wsadowy
- Bash
- Protokół SSH
- AzureFileCopy
- WindowsMachineFileCopy
- PowerShellOnTargetMachines
- SqlAzureDacpacDeployment
- SqlDacpacDeploymentOnMachineGroup
- AzureCLI
- AzurePowerShell
- ServiceFabricPowerShell
Można zastosować opcję Włącz sprawdzanie poprawności argumentów zadań powłoki na poziomie organizacji w obszarze Ustawienia organizacji>Potoki>Ustawienia lub na poziomie projektu w obszarze Ustawienia projektu>Potoki>Ustawienia. Jeśli ustawienie na poziomie organizacji jest włączone, ma zastosowanie do wszystkich projektów w organizacji i nie można go wyłączyć na poziomie projektu.
Po włączeniu tego ustawienia wszelkie problemy z walidacją związane z parametrem arguments wyzwala następujący komunikat o błędzie:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
Aby rozwiązać ten problem, dostosuj argument, uciekając przed znakami specjalnymi, jak wskazano w komunikacie o błędzie.