Правило анализатора кода — используйте protectedSettings для секретов commandToExecute

Это правило находит возможное раскрытие секретов в свойстве параметров ресурса пользовательского скрипта.

Код правила анализатора кода

Для настройки параметров правил укажите в файле конфигурации Bicep следующее значение:

protect-commandtoexecute-secrets

Решение

Для пользовательских ресурсов скрипта значение commandToExecute должно быть помещено под объектом свойства protectedSettings, а не объектом свойства settings, если оно включает секретные данные, такие как пароль. Например, секретные данные можно найти в параметрах безопасности, таких функциях, как list*, или аргументах пользовательских скриптов.

Не используйте секретные данные в объекте settings, так как он использует открытый текст. Дополнительные сведения см. в статьях Microsoft.Compute virtualMachines/extensions, Расширение пользовательских скриптов для Windows и Использование расширения пользовательских скриптов Azure версии 2 с виртуальными машинами Linux.

Следующий пример завершается сбоем, так как commandToExecute указывается в разделе settings и использует безопасный параметр.

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

Это можно исправить, перемещая свойство commandToExecute в объект 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}'
    }
  }
}

Следующие шаги

Дополнительные сведения об анализаторе кода Bicep см. в разделе Использование анализатора кода Bicep.