Linter 规则 - 将 protectedSettings 用于 commandToExecute 机密
此规则在自定义脚本资源的设置属性中发现可能出现的机密泄露。
Linter 规则代码
请在 Bicep 配置文件中使用以下值自定义规则设置:
use-protectedsettings-for-commandtoexecute-secrets
解决方案
对于自定义脚本资源,如果 commandToExecute
值包含机密数据(如密码),则该值应放置在 protectedSettings
属性对象下,而不是 settings
属性对象下。 例如,可以在安全参数、list*
函数(如 listKeys)或在自定义脚本参数中找到机密数据。
请勿在 settings
对象中使用机密数据,因为它使用明文。 有关详细信息,请参阅 Microsoft.Compute virtualMachines/extensions、适用于 Windows 的自定义脚本扩展和在 Linux 虚拟机上使用 Azure 自定义脚本扩展版本 2。
下面的示例失败,因为 commandToExecute
在 settings
下指定并使用安全参数。
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。