Linter-regel – utdata ska inte innehålla hemligheter
Den här regeln hittar eventuell exponering av hemligheter i en malls utdata.
Linterregelkod
Använd följande värde i Bicep-konfigurationsfilen för att anpassa regelinställningar:outputs-should-not-contain-secrets
Lösning
Ta inte med några värden i utdata som potentiellt kan exponera hemligheter. Till exempel säkra parametrar av typen secureString eller secureObject, eller list*
funktioner som listKeys.
Utdata från en mall lagras i distributionshistoriken, så en användare med skrivskyddade behörigheter kan få åtkomst till information som annars inte är tillgänglig med skrivskyddad behörighet.
Följande exempel misslyckas eftersom det innehåller en säker parameter i ett utdatavärde.
@secure()
param secureParam string
output badResult string = 'this is the value ${secureParam}'
Följande exempel misslyckas eftersom det använder en list*
funktion i ett utdata.
param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageName
}
output badResult object = {
value: stg.listKeys().keys[0].value
}
Följande exempel misslyckas eftersom utdatanamnet innehåller "lösenord", vilket indikerar att det kan innehålla en hemlighet
output accountPassword string = '...'
För att åtgärda det måste du ta bort hemliga data från utdata. Den rekommenderade metoden är att mata ut resourceId för resursen som innehåller hemligheten och hämta hemligheten när resursen som behöver informationen skapas eller uppdateras. Hemligheter kan också lagras i KeyVault för mer komplexa distributionsscenarier.
I följande exempel visas ett säkert mönster för att hämta en storageAccount-nyckel från en modul.
output storageId string = stg.id
Som kan användas i en efterföljande distribution enligt följande exempel
someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value
Tysta falska positiva identifieringar
Ibland aviseras den här regeln om mallutdata som faktiskt inte innehåller hemligheter. Till exempel returnerar inte alla list*
funktioner känsliga data. I dessa fall kan du inaktivera varningen för den här raden genom att lägga till #disable-next-line outputs-should-not-contain-secrets
före raden med varningen.
#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'
Det är bra att lägga till en kommentar som förklarar varför regeln inte gäller för den här raden.
Nästa steg
Mer information om linter finns i Använda Bicep-linter.