Skydda hemligheter i Azure Pipelines

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

Den här artikeln innehåller metodtips för att skydda hemligheter i Azure Pipelines. En hemlighet är allt som du vill kontrollera åtkomsten till, till exempel API-nycklar, lösenord, certifikat eller kryptografiska nycklar.

Azure Pipelines genererar inte hemliga värden. Du kan dock behöva lägga till en hemlighet i en pipeline för att lagra känsliga data som en API-nyckel. Mer information om hur du ställer in hemliga variabler finns i Ange hemliga variabler.

Använd inte hemligheter om en annan metod är tillgänglig

Den bästa metoden för att skydda en hemlighet är inte att ha en hemlighet i första hand. Kontrollera om din pipeline kan använda en annan metod än att använda en hemlighet för att utföra en uppgift.

  • Använd hanterade identiteter:

  • Azure CLI-uppgift:

    • Om du använder Azure CLI-uppgiften kan du i din pipeline överväga att använda addSpnToEnvironment inställningen för att få åtkomst till tjänstens huvudnamn i skriptet utan att uttryckligen skicka hemligheter.

Mer information finns i Använda tjänstens huvudnamn och hanterade identiteter

Använda hemliga variabler

Lagra aldrig känsliga värden som klartext i en Azure Pipelines -.yml-fil .

Hemliga variabler kan användas för privat information som lösenord, ID:t och andra identifierande data som du inte vill ska exponeras i en pipeline. Vi rekommenderar att du anger hemliga variabler med Azure Key Vault. Du kan också ange hemliga variabler i användargränssnittet eller i en variabelgrupp. Vi rekommenderar inte att du använder ett loggningskommando för att ange en hemlig variabel. När du anger en hemlighet med ett loggningskommando kan alla som har åtkomst till din pipeline också se hemligheten.

Hemliga variabler krypteras och kan användas i pipelines utan att exponera deras värden. Även om deras värden inte exponeras, upprepa aldrig hemligheter som utdata och skicka inte hemligheter på kommandoraden. I stället föreslår vi att du mappar dina hemligheter till miljövariabler.

När du skapar en hemlighet följer du riktlinjerna för variabel namngivning och ser till att ditt hemliga namn inte avslöjar känslig information.

Begränsa åtkomsten till hemliga variabler

Följ dessa metodtips för att begränsa åtkomsten till hemligheter i Azure DevOps:

  • Lagra dina hemligheter i Azure Key Vault. Med Azure Key Vault kan du sedan använda Azures rollbaserade åtkomstkontrollmodell för att begränsa åtkomsten till en hemlighet eller grupp med hemligheter.
  • Ange hemliga variabler i användargränssnittet för en pipeline. Hemliga variabler som anges i användargränssnittet för pipelineinställningar för en pipeline begränsas till pipelinen där de anges. Därför kan du ha hemligheter som bara är synliga för användare med åtkomst till pipelinen.
  • Ange hemligheter i en variabelgrupp. Variabelgrupper följer bibliotekssäkerhetsmodellen. Du kan styra vem som kan definiera nya objekt i ett bibliotek och vem som kan använda ett befintligt objekt.

Skriv inte hemligheter till loggar

Azure Pipelines försöker rensa hemligheter från loggar där det är möjligt, men det är inte idiotsäkert. Undvik att upprepa hemligheter för konsolen, använda dem i kommandoradsparametrar eller logga dem till filer. Var försiktig när du använder Azure CLI-kommandon som matar ut känslig information. None output formatAnvänd , och om du behöver hämta en hemlighet från ett Azure CLI-anrop, Use none output format and retrieve security information to a secret variable.

Använd inte strukturerade data som hemligheter

Undvik att använda strukturerade dataformat som JSON, XML eller YAML för att kapsla in hemliga värden, inklusive kontrolltecken som vagnretur, \roch radmatning\n. Skapa i stället enskilda hemligheter för varje känsligt värde. Den här metoden säkerställer bättre redigeringsnoggrannhet och minimerar risken för att exponera känsliga data oavsiktligt.

Granska hur hemligheter hanteras

Följ dessa metodtips för att granska hur hemligheter används i Azure Pipelines:

  • Granska källkoden: Granska källkoden för lagringsplatsen som är värd för pipelinen. Kontrollera alla uppgifter som används i pipelinen för att säkerställa att hemligheter hanteras korrekt. Kontrollera till exempel att hemligheter inte oavsiktligt skickas till oavsiktliga värdar eller uttryckligen skrivs ut i loggutdata.
  • Granska körningsloggar: När du har testat giltiga och ogiltiga indata kan du visa körningsloggarna för din pipeline. Kontrollera att hemligheter redigeras korrekt och inte exponeras. Ibland kan fel i kommandon eller verktyg oavsiktligt läcka hemligheter i felloggar. Även om Azure Pipelines försöker rensa hemligheter från loggar är manuell granskning fortfarande viktigt.

Granska och rotera hemligheter

Följ dessa metodtips för att granska och rotera hemligheter:

  • Granska registrerade hemligheter: Utvärdera regelbundet de hemligheter som registrerats i dina pipelines. Bekräfta att de fortfarande är nödvändiga och ta bort alla som inte längre behövs, vilket bidrar till att minska oredan och potentiella säkerhetsrisker.
  • Rotera hemligheter: Rotera hemligheter regelbundet för att minimera tidsperioden då en komprometterad hemlighet kan utnyttjas. Genom att regelbundet ändra hemligheter förbättrar du säkerheten.
  • Välj rätt autentiseringsmetod
    • Typer av hemligheter som används:
      • Personliga åtkomsttoken (PAT): Dessa token används för autentisering. Följ rekommenderade säkerhetsmetoder när du väljer rätt autentiseringsmetod. Du kan hantera PAT:er med hjälp av REST-API:et.
      • Hemliga variabler: Använd hemliga variabler för att lagra känslig information på ett säkert sätt, till exempel API-nycklar, lösenord eller andra autentiseringsuppgifter i pipelinen.
      • Azure Key Vault-hemligheter: Använd Azure Key Vault för att lagra och hantera hemligheter på ett säkert sätt.
      • Tjänstanslutningar: Dessa tjänstanslutningar gör att din pipeline kan ansluta till externa tjänster (till exempel Azure, GitHub, Docker Hub). Säkerställa korrekt konfiguration och säker hantering av tjänstanslutningshemligheter.

Använda YAML-mallar

Använd mallar i stället för att inkludera infogade skript med hemliga parametrar direkt i din pipeline YAML. Den här metoden förbättrar säkerheten genom att avlägsna känslig information från huvudpipelinen.

Om du vill implementera den här metoden skapar du en separat YAML-fil för skriptet och lagrar sedan skriptet på en separat, säker lagringsplats. Du kan sedan referera till mallen och skicka en hemlig variabel i YAML som en parameter. Den säkra variabeln ska komma från Azure Key Vault, en variabelgrupp eller pipelinegränssnittet. Mer information om hur du använder mallar finns i mallanvändningsreferensen.

Begränsa hemligheter med grenprinciper och behörigheter för variabelgrupper

För att se till att hemligheter är knutna till grenen main och inte är tillgängliga för slumpmässiga grenar kan du använda en kombination av behörigheter för variabelgrupper, infogning av villkorsstyrda jobb och grenprinciper.

Med grenprinciper kan du framtvinga byggverifieringsprinciper som endast tillåter byggen från huvudgrenen. Sedan kan du använda behörigheter för variabelgrupper för att se till att endast auktoriserade pipelines har åtkomst till hemligheterna som lagras i din variabelgrupp. Slutligen kan du använda ett villkor i pipelinen för att se till att variabelgruppen bara kan refereras till av en push-överföring till grenen main .

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

Nästa steg