Pravidlo Linter – výstupy by neměly obsahovat tajné kódy.
Toto pravidlo najde možné vystavení tajných kódů ve výstupech šablony.
Kód pravidla Linteru
K přizpůsobení nastavení pravidel použijte v konfiguračním souboru Bicep následující hodnotu: outputs-should-not-contain-secrets
Řešení
Do výstupu nezahrnujte žádné hodnoty, které by mohly potenciálně vystavit tajné kódy. Například zabezpečené parametry typu secureString nebo secureObject nebo list*
funkce, jako jsou listKeys.
Výstup ze šablony je uložen v historii nasazení, takže uživatel s oprávněními jen pro čtení by mohl získat přístup k informacím, jinak není k dispozici s oprávněním jen pro čtení.
Následující příklad selže, protože obsahuje zabezpečený parametr ve výstupní hodnotě.
@secure()
param secureParam string
output badResult string = 'this is the value ${secureParam}'
Následující příklad selže, protože používá list*
funkci ve výstupu.
param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageName
}
output badResult object = {
value: stg.listKeys().keys[0].value
}
Následující příklad selže, protože název výstupu obsahuje heslo, což znamená, že může obsahovat tajný kód.
output accountPassword string = '...'
Pokud ho chcete opravit, musíte z výstupu odebrat tajná data. Doporučeným postupem je výstup resourceId prostředku obsahujícího tajný kód a načtení tajného kódu při vytvoření nebo aktualizaci prostředku, který potřebuje informace. Tajné kódy se také můžou ukládat ve službě KeyVault pro složitější scénáře nasazení.
Následující příklad ukazuje zabezpečený vzor pro načtení klíče storageAccount z modulu.
output storageId string = stg.id
Který lze použít v následném nasazení, jak je znázorněno v následujícím příkladu
someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value
Šetření falešně pozitivních výsledků
Někdy toto pravidlo upozorní na výstupy šablony, které ve skutečnosti neobsahují tajné kódy. Například ne všechny list*
funkce skutečně vracejí citlivá data. V těchto případech můžete upozornění pro tento řádek zakázat přidáním #disable-next-line outputs-should-not-contain-secrets
před řádek s upozorněním.
#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'
Doporučujeme přidat komentář vysvětlující, proč se pravidlo na tento řádek nevztahuje.
Další kroky
Další informace o linteru naleznete v tématu Použití linter Bicep.