Regra linter - use assettings protegidas para segredos de comandoToExecute

Esta regra encontra uma possível exposição de segredos nas definições propriedade de um recurso de script personalizado.

Código de regra linter

Utilize o seguinte valor no ficheiro de configuração Bicep para personalizar as definições de regras:

protect-commandtoexecute-secrets

Solução

Para recursos de script personalizados, o commandToExecute valor deve ser colocado sob o objeto da protectedSettings propriedade em vez do objeto da settings propriedade se incluir dados secretos, como uma senha. Por exemplo, os dados secretos podem ser encontrados em parâmetros seguros, list* funções como listKeys ou em argumentos de scripts personalizados.

Não utilize dados secretos no settings objeto porque utiliza texto claro. Para obter mais informações, consulte as virtualMachines/extensões do Microsoft.Compute, a extensão de script personalizada para windows e utilize a versão 2 da extensão de script personalizada Azure com máquinas virtuais Linux.

O exemplo a seguir falha porque commandToExecute é especificado sob settings e utiliza um 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}'
    }
  }
}

Pode corrigi-lo movendo a propriedade commandToExecute para o protectedSettings objeto.

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}'
    }
  }
}

Passos seguintes

Para obter mais informações sobre o linter, consulte o lince Bicep.