Regola Linter: gli output non devono contenere segreti
Questa regola rileva la possibile esposizione dei segreti negli output di un modello.
Codice regola Linter
Usa il valore seguente nel file di configurazione Bicep per personalizzare le impostazioni delle regole: outputs-should-not-contain-secrets
Soluzione
Non includere valori in un output che potrebbe potenzialmente esporre segreti. Ad esempio, parametri sicuri di tipo secureString o secureObject o funzioni list*
come listKeys.
L'output di un modello viene archiviato nella cronologia di distribuzione, pertanto un utente con autorizzazioni di sola lettura potrebbe ottenere l'accesso alle informazioni altrimenti non disponibili con l'autorizzazione di sola lettura.
L'esempio seguente ha esito negativo perché include un parametro sicuro in un valore di output.
@secure()
param secureParam string
output badResult string = 'this is the value ${secureParam}'
L'esempio seguente ha esito negativo perché usa una funzione list*
in un output.
param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
name: storageName
}
output badResult object = {
value: stg.listKeys().keys[0].value
}
L'esempio seguente ha esito negativo perché il nome di output contiene 'password', che indica che può contenere un segreto
output accountPassword string = '...'
Per risolverlo, è necessario rimuovere i dati segreti dall'output. La procedura consigliata consiste nel restituire il valore resourceId della risorsa contenente il segreto e recuperare il segreto quando la risorsa che richiede le informazioni viene creata o aggiornata. I segreti possono anche essere archiviati in KeyVault per scenari di distribuzione più complessi.
L'esempio seguente illustra un modello sicuro per il recupero di una chiave storageAccount da un modulo.
output storageId string = stg.id
Che può essere usato in una distribuzione successiva, come illustrato nell'esempio seguente
someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value
Ridurre al minimo i falsi positivi
In alcuni casi, questa regola genera avvisi sugli output del modello che non contengono effettivamente segreti. Ad esempio, non tutte le funzioni list*
restituiscono effettivamente dati sensibili. In questi casi, è possibile disabilitare l'avviso per questa riga aggiungendo #disable-next-line outputs-should-not-contain-secrets
prima della riga con l'avviso.
#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'
È consigliabile aggiungere un commento che spiega perché la regola non si applica a questa riga.
Passaggi successivi
Per altre informazioni su linter, vedi Usare linter di Bicep.