Share via


Linter szabály – a kimenetek nem tartalmazhatnak titkos kódokat

Ez a szabály megkeresi a titkos kódok lehetséges expozícióját a sablon kimeneteiben.

Linter-szabály kódja

A bicep-konfigurációs fájlban a következő érték használatával szabhatja testre a szabálybeállításokat:outputs-should-not-contain-secrets

Megoldás

Ne adjon meg olyan értéket a kimenetben, amely titkos kulcsokat rejthet el. Például secureString vagy secureObject típusú biztonságos paraméterek, vagy list* olyan függvények, mint a listKeys. A sablon kimenete az üzembe helyezési előzményekben van tárolva, így egy írásvédett engedélyekkel rendelkező felhasználó hozzáférhet az egyébként nem elérhető információkhoz írásvédett engedélyekkel. A következő példa meghiúsul, mert egy biztonsági paramétert tartalmaz egy kimeneti értékben.

@secure()
param secureParam string

output badResult string = 'this is the value ${secureParam}'

Az alábbi példa meghiúsul, mert függvényt list* használ egy kimenetben.

param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' existing = {
  name: storageName
}

output badResult object = {
  value: stg.listKeys().keys[0].value
}

A következő példa meghiúsul, mert a kimeneti név "jelszót" tartalmaz, ami azt jelzi, hogy titkos kulcsot tartalmazhat.

output accountPassword string = '...'

A probléma megoldásához el kell távolítania a titkos adatokat a kimenetből. Az ajánlott eljárás a titkos kulcsot tartalmazó erőforrás resourceId azonosítójának kimenete, majd a titkos kód lekérése, amikor az erőforrásnak szüksége van az információra vagy frissítésre. A titkos kulcsok a KeyVaultban is tárolhatók az összetettebb üzembe helyezési forgatókönyvek érdekében.

Az alábbi példa egy biztonságos mintát mutat be a storageAccount kulcs modulból való lekéréséhez.

output storageId string = stg.id

Amely egy későbbi üzembe helyezés során használható az alábbi példában látható módon

someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value

Hamis pozitív értékek elhallgattatása

Néha ez a szabály olyan sablonkimenetekre figyelmeztet, amelyek valójában nem tartalmaznak titkos kulcsokat. Például nem minden list* függvény ad vissza bizalmas adatokat. Ezekben az esetekben letilthatja a sorra vonatkozó figyelmeztetést úgy, hogy hozzáadja #disable-next-line outputs-should-not-contain-secrets a figyelmeztetést tartalmazó sor elé.

#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'

Érdemes megjegyzést fűzni, amely elmagyarázza, hogy a szabály miért nem vonatkozik erre a sorra.

Következő lépések

A linterről további információt a Bicep-linter használata című témakörben talál.