Sdílet prostřednictvím


Ochrana tajných kódů v Azure Pipelines

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

Tento článek obsahuje osvědčené postupy pro ochranu tajných kódů ve službě Azure Pipelines. Tajný kód je vše, co chcete pevně řídit přístup, jako jsou klíče rozhraní API, hesla, certifikáty nebo kryptografické klíče.

Azure Pipelines negeneruje hodnoty tajných kódů. K ukládání citlivých dat, jako je klíč rozhraní API, ale možná budete muset do kanálu přidat tajný kód. Další informace o nastavení proměnných tajných kódů najdete v tématu Nastavení proměnných tajných kódů.

Nepoužívejte tajné kódy, pokud je k dispozici jiná metoda

Nejlepší metodou ochrany tajného kódu není mít tajný kód na prvním místě. Zkontrolujte, jestli kanál může použít jinou metodu než použití tajného kódu k provedení úlohy.

  • Použití připojení služeb:
    • Pokud cílíte na Azure nebo jiné služby, místo správy tajných kódů v proměnných používejte připojení služeb.
    • Připojení služeb umožňují bezpečně se připojit k externím službám, aniž byste museli vystavit citlivé informace přímo v konfiguraci kanálu.
    • Další informace najdete v tématu Správa připojení služeb a připojení k Microsoft Azure pomocí připojení služby Azure Resource Manager.
  • Použití spravovaných identit:

    • Zvažte použití spravovaných identit místo přímého zpracování tajných kódů.
    • Spravované identity umožňují aplikacím a službám ověřovat zabezpečení se službami Azure bez nutnosti explicitních přihlašovacích údajů.
    • Spravované identity můžete použít pro přístup k jiným službám Azure.
  • Úloha Azure CLI:

    • Pokud používáte úlohu Azure CLI, zvažte v kanálu použití addSpnToEnvironment nastavení pro přístup k podrobnostem instančního objektu ve skriptu bez explicitního předávání tajných kódů.

Další informace najdete v tématu Použití instančních objektů a spravovaných identit.

Použití tajných proměnných

V souboru .yml Azure Pipelines nikdy neukládáte citlivé hodnoty jako prostý text.

Tajné proměnné se dají použít pro soukromé informace, jako jsou hesla, ID a další identifikační data, která byste nechtěli vystavit v kanálu. Doporučujeme nastavit tajné proměnné pomocí služby Azure Key Vault. Můžete také nastavit tajné proměnné v uživatelském rozhraní nebo ve skupině proměnných. K nastavení tajné proměnné nedoporučujeme použít příkaz protokolování. Když nastavíte tajný kód pomocí příkazu protokolování, uvidí tajný kód také každý, kdo má přístup k vašemu kanálu.

Tajné proměnné jsou zašifrované a dají se použít v kanálech bez vystavení jejich hodnot. I když jejich hodnoty nejsou vystavené, nikdy neodhalujte tajné kódy jako výstup a nepředávejte tajné kódy na příkazovém řádku. Místo toho doporučujeme namapovat tajné kódy na proměnné prostředí.

Při vytváření tajného kódu postupujte podle pokynů pro pojmenování proměnných a ujistěte se, že název tajného kódu nezveřejňuje citlivé informace.

Omezení přístupu k tajným proměnným

Pokud chcete omezit přístup k tajným kódům v Azure DevOps, postupujte podle těchto osvědčených postupů:

  • Ukládejte tajné kódy ve službě Azure Key Vault. Pomocí služby Azure Key Vault pak můžete pomocí modelu řízení přístupu na základě role v Azure omezit přístup k tajnému kódu nebo skupině tajných kódů.
  • Nastavte tajné proměnné v uživatelském rozhraní pro kanál. Tajné proměnné nastavené v uživatelském rozhraní nastavení kanálu pro kanál jsou vymezeny na kanál, ve kterém jsou nastavené. Můžete tedy mít tajné kódy, které jsou viditelné jenom uživatelům s přístupem k danému kanálu.
  • Nastavte tajné kódy ve skupině proměnných. Skupiny proměnných se řídí modelem zabezpečení knihovny. Můžete určit, kdo může definovat nové položky v knihovně a kdo může použít existující položku.

Nezapisovat tajné kódy do protokolů

Azure Pipelines se snaží vyčistit tajné kódy z protokolů všude, kde je to možné, ale není to hloupé. Vyhněte se opakování tajných kódů v konzole, jejich použití v parametrech příkazového řádku nebo jejich protokolování do souborů. Při použití příkazů Azure CLI, které vypíše citlivé informace, buďte opatrní. Použijte a None output formatpokud potřebujete načíst tajný kód z volání Azure CLI. Use none output format and retrieve security information to a secret variable

Nepoužívejte strukturovaná data jako tajné kódy.

Nepoužívejte strukturované formáty dat, jako jsou JSON, XML nebo YAML, k zapouzdření tajných hodnot, včetně řídicích znaků, jako je návrat \rna začátek řádku nebo odřádkování.\n Místo toho vytvořte jednotlivé tajné kódy pro každou citlivou hodnotu. Tento přístup zajišťuje lepší přesnost redakce a minimalizuje riziko neúmyslného zveřejnění citlivých dat.

Auditování způsobu zpracování tajných kódů

Pokud chcete auditovat, jak se tajné kódy používají ve službě Azure Pipelines, postupujte podle těchto osvědčených postupů:

  • Zkontrolujte zdrojový kód: Prozkoumejte zdrojový kód úložiště, které je hostitelem kanálu. Pokud chcete zajistit správné zpracování tajných kódů, zkontrolujte všechny úlohy používané v kanálu. Ověřte například, že tajné kódy nejsou neúmyslně odesílány nechtěným hostitelům nebo explicitně vytištěny do výstupu protokolu.
  • Kontrola protokolů spuštění: Po otestování platných a neplatných vstupů si prohlédněte protokoly spuštění pro váš kanál. Ujistěte se, že jsou tajné kódy správně upraveny a nejsou vystavené. Někdy můžou chyby v příkazech nebo nástrojích neúmyslně uniknout tajným kódům do protokolů chyb. I když se Azure Pipelines pokouší z protokolů vyčistit tajné kódy, je ruční kontrola stále důležitá.

Auditování a obměna tajných kódů

Při auditování a obměně tajných kódů postupujte podle těchto osvědčených postupů:

  • Kontrola registrovaných tajných kódů: Pravidelně vyhodnocujte tajné kódy zaregistrované ve vašich kanálech. Ověřte, že jsou stále nezbytné, a odeberte všechny, které už nepotřebujete, což pomáhá snížit nepotřebné a potenciální bezpečnostní rizika.
  • Obměňujte tajné kódy: Pravidelně obměňujte tajné kódy, abyste minimalizovali časové období, během kterého by mohlo dojít k zneužití ohroženého tajného kódu. Změnou tajných kódů pravidelně vylepšujete zabezpečení.
  • Volba správné metody ověřování
    • Typy používaných tajných kódů:
      • Osobní přístupové tokeny (PAT): Tyto tokeny se používají k ověřování. Při výběru správné metody ověřování dodržujte osvědčené postupy zabezpečení. PaT můžete spravovat pomocí rozhraní REST API.
      • Proměnné tajných kódů: Pomocí tajných proměnných můžete bezpečně ukládat citlivé informace, jako jsou klíče rozhraní API, hesla nebo jiné přihlašovací údaje v rámci kanálu.
      • Tajné kódy služby Azure Key Vault: Bezpečné ukládání a správa tajných kódů pomocí služby Azure Key Vault
      • Připojení služeb: Tato připojení služeb umožňují vašemu kanálu připojit se k externím službám (například Azure, GitHub nebo Docker Hub). Zajistěte správnou konfiguraci a zabezpečené zpracování tajných kódů připojení služeb.

Použití šablon YAML

Místo zahrnutí vložených skriptů s tajnými parametry přímo ve vašem kanálu YAML použijte šablony. Tento přístup zlepšuje zabezpečení tím, že abstrahuje citlivé informace mimo hlavní kanál.

Pokud chcete tento přístup implementovat, vytvořte pro svůj skript samostatný soubor YAML a uložte ho do samostatného zabezpečeného úložiště. Pak můžete na šablonu odkazovat a předat proměnnou tajného kódu v YAML jako parametr. Zabezpečená proměnná by měla pocházet ze služby Azure Key Vault, skupiny proměnných nebo uživatelského rozhraní kanálu. Další informace o používání šablon najdete v referenčních informacích k použití šablon.

Omezení tajných kódů pomocí zásad větve a oprávnění skupiny proměnných

Abyste měli jistotu main , že jsou tajné kódy svázané s větví a nejsou přístupné náhodným větvím, můžete použít kombinaci oprávnění skupiny proměnných, podmíněného vkládání úloh a zásad větví.

Pomocí zásad větví můžete vynutit zásady ověření sestavení, které povolují pouze sestavení z hlavní větve. Potom můžete pomocí oprávnění skupiny proměnných zajistit, aby k tajným kódům uloženým ve vaší skupině proměnných měli přístup jenom autorizované kanály. Nakonec můžete ve svém kanálu použít podmínku, abyste měli jistotu, že na skupinu proměnných může odkazovat jenom na nasdílení změn do main větve.

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

Další kroky