Regla de linter: use protectedSettings para secretos commandToExecute

Esta regla detecta una posible exposición de los secretos en la propiedad de configuración de un recurso de script personalizado.

Código de regla de linter

Use el valor siguiente del archivo de configuración de Bicep para personalizar los valores de regla:

protect-commandtoexecute-secrets

Soluciones

Para los recursos de script personalizados, el valor commandToExecute debe colocarse debajo del objeto de propiedad protectedSettings en lugar del objeto de propiedad settings si incluye datos secretos, como una contraseña. Por ejemplo, los datos secretos se pueden encontrar en parámetros seguros, funciones list* como listKeys, o bien en argumentos de scripts personalizados.

No use datos secretos en el objeto settings porque usa texto sin formato. Para más información, vea Microsoft.Compute virtualMachines/extensions, Extensión de la secuencia de comandos personalizada para Windows y Uso de la extensión de script personalizado de Azure versión 2 con máquinas virtuales Linux.

En el ejemplo siguiente se produce un error porque se especifica commandToExecute en settings y usa un parámetro seguro.

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

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

resource customScriptExtension 'Microsoft.HybridCompute/machines/extensions@2019-08-02-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}'
    }
  }
}

Puede corregirlo moviendo la propiedad commandToExecute al objeto protectedSettings.

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

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

resource customScriptExtension 'Microsoft.HybridCompute/machines/extensions@2019-08-02-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}'
    }
  }
}

Pasos siguientes

Para obtener más información acerca de linter, consulte Uso de linter de Bicep.