Partager via


Règle linter : Les sorties ne doivent pas contenir de secrets

Cette règle recherche l’exposition possible de secrets dans les sorties d’un modèle.

Code de règle de linter

Utilisez la valeur suivante dans le fichier config Bicep pour personnaliser les paramètres de règle : outputs-should-not-contain-secrets

Solution

N’incluez pas de valeurs dans une sortie susceptibles d’exposer des secrets. Par exemple, des paramètres sécurisés de type secureString ou secureObject, ou des fonctions list* telles que listKeys. ​ La sortie d’un modèle est stockée dans l’historique de déploiement. Ainsi, un utilisateur disposant d’autorisations d’accès en lecture seule peut accéder à des informations qui sont en principe inaccessibles avec une autorisation en lecture seule. L’exemple suivant est un échec, car il inclut un paramètre sécurisé dans une valeur de sortie.

@secure()
param secureParam string

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

L’exemple suivant échoue, car il utilise une fonction list* dans une sortie.

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

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

L’exemple suivant échoue car le nom de sortie contient « password », indiquant qu’il peut contenir un secret

output accountPassword string = '...'

Pour corriger cela, vous devez supprimer les données secrètes de la sortie. La pratique recommandée consiste à sortir le resourceId de la ressource contenant le secret, et à récupérer ce secret quand la ressource ayant besoin des informations est créée ou mise à jour. Les secrets peuvent également être stockés dans KeyVault pour des scénarios de déploiement plus complexes.

L’exemple suivant montre un modèle sécurisé pour la récupération d’une clé storageAccount à partir d’un module.

output storageId string = stg.id

Qui peut être utilisé dans un autre déploiement, comme indiqué dans l’exemple suivant

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

Ignorer les faux-positifs

Parfois, cette règle alerte sur les modèles de sorties qui ne contiennent pas réellement de secrets. Par exemple, toutes les fonctions list* ne retournent pas réellement de données sensibles. Dans ce cas, vous pouvez désactiver l’avertissement pour cette ligne en ajoutant #disable-next-line outputs-should-not-contain-secrets avant la ligne avec l’avertissement.

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

Il est judicieux d’ajouter un commentaire expliquant pourquoi la règle ne s’applique pas à cette ligne.

Étapes suivantes

Pour plus d’informations sur le linter, consultez Utiliser le linter Bicep.