Linter 规则 - 将 protectedSettings 用于 commandToExecute 机密

此规则在自定义脚本资源的设置属性中发现可能出现的机密泄露。

Linter 规则代码

请在 Bicep 配置文件中使用以下值自定义规则设置:

use-protectedsettings-for-commandtoexecute-secrets

解决方案

对于自定义脚本资源,如果 commandToExecute 值包含机密数据(如密码),则该值应放置在 protectedSettings 属性对象下,而不是 settings 属性对象下。 例如,可以在安全参数、list* 函数(如 listKeys)或在自定义脚本参数中找到机密数据。

请勿在 settings 对象中使用机密数据,因为它使用明文。 有关详细信息,请参阅 Microsoft.Compute virtualMachines/extensions适用于 Windows 的自定义脚本扩展在 Linux 虚拟机上使用 Azure 自定义脚本扩展版本 2

下面的示例失败,因为 commandToExecutesettings 下指定并使用安全参数。

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

可以通过将 commandToExecute 属性移动到 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}'
    }
  }
}

后续步骤

有关 Linter 的详细信息,请参阅使用 Bicep Linter