Sdílet prostřednictvím


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@2021-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.