Condividi tramite


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.