Compartilhar via


Regra de Linter - use protectedSettings para segredos commandToExecute

Esta regra encontra a possível exposição de segredos na propriedade de configurações de um recurso de script personalizado.

Código de regra linter

Use o seguinte valor no arquivo de configuração Bicep para personalizar as configurações de regra:

protect-commandtoexecute-secrets

Solução

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

Não use dados com segredo no objeto settings porque eles usam texto não criptografado. Para obter mais informações, consulte Microsoft.Compute virtualMachines/extensions, Custom Script Extension for Windows e Usar a versão 2 da extensão de script personalizado do Azure com máquinas virtuais do Linux.

O exemplo a seguir falha porque commandToExecute é especificado em settings e usa um parâmetro seguro.

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

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

resource customScriptExtension 'Microsoft.HybridCompute/machines/extensions@2023-10-03-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}'
    }
  }
}

Você pode corrigi-lo movendo a propriedade commandToExecute para o objeto protectedSettings.

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

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

resource customScriptExtension 'Microsoft.HybridCompute/machines/extensions@2023-10-03-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}'
    }
  }
}

Próximas etapas

Para saber mais sobre o linter, confira Usar o linter do Bicep.