Règle linter : utiliser protectedSettings pour les secrets commandToExecute

Cette règle recherche l’exposition possible de secrets dans la propriété de paramètres d’une ressource de script personnalisé.

Code de règle de linter

Utilisez la valeur suivante dans le fichier config Bicep pour personnaliser les paramètres de règle :

protect-commandtoexecute-secrets

Solution

Pour les ressources de script personnalisé, la valeur commandToExecute doit être placée sous l’objet de propriété protectedSettings au lieu de l’objet de propriété settings si elle inclut des données secrètes, comme un mot de passe. Par exemple, des données secrètes se trouvent dans des paramètres sécurisés, des fonctions list* telles que listKeys, ou dans des arguments de script personnalisé.

N’utilisez pas de données secrètes dans l’objet settings, car il utilise du texte clair. Pour plus d’informations, voir Microsoft.Compute virtualMachines/extensions, Extension de script personnalisé pour Windows et Utiliser l’extension de script personnalisé Azure version 2 avec des machines virtuelles Linux.

L’exemple suivant échoue, car commandToExecute est spécifié sous settings et utilise un paramètre sécurisé.

param vmName string
param location string
param fileUris string
param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' existing = {
  name: storageAccountName
}

resource customScriptExtension 'Microsoft.HybridCompute/machines/extensions@2023-03-15-preview' = {
  name: '${vmName}/CustomScriptExtension'
  location: location
  properties: {
    publisher: 'Microsoft.Compute'
    type: 'CustomScriptExtension'
    autoUpgradeMinorVersion: true
    settings: {
      fileUris: split(fileUris, ' ')
      commandToExecute: 'mycommand ${storageAccount.listKeys().keys[0].value}'
    }
  }
}

Vous pouvez résoudre ce problème en déplaçant la propriété CommandToExecute vers l’objet protectedSettings.

param vmName string
param location string
param fileUris string
param storageAccountName string

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' existing = {
  name: storageAccountName
}

resource customScriptExtension 'Microsoft.HybridCompute/machines/extensions@2023-03-15-preview' = {
  name: '${vmName}/CustomScriptExtension'
  location: location
  properties: {
    publisher: 'Microsoft.Compute'
    type: 'CustomScriptExtension'
    autoUpgradeMinorVersion: true
    settings: {
      fileUris: split(fileUris, ' ')
    }
    protectedSettings: {
      commandToExecute: 'mycommand ${storageAccount.listKeys().keys[0].value}'
    }
  }
}

Étapes suivantes

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