分享方式:


Linter 規則 - 針對 commandToExecute 秘密使用 protectedSettings

此規則會在自訂指令碼資源的設定屬性中尋找可能暴露的秘密。

Linter 規則程式碼

使用 Bicep 設定檔中的下列值來自訂規則設定:

protect-commandtoexecute-secrets

解決方案

針對自訂指令碼資源,若 commandToExecute 值包含秘密資料 (如密碼),則應置於 protectedSettings 屬性物件下,而不是 settings 屬性物件下。 例如,您可在安全參數、list* 函式 (如 listKeys) 或自訂指令碼引數中找到秘密資料。

由於 settings 物件使用純文字,因此請勿在其中使用祕密資料。 如需詳細資訊,請參閱 Microsoft.Compute virtualMachines/延伸模組適用於 Windows 的自訂指令碼延伸模組,以及搭配 Linux 虛擬機器使用 Azure 自訂指令碼延伸模組第 2 版

下列範例由於在 settings 下指定 commandToExecute 並使用安全參數,因此會失敗。

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

下一步

如需 Linter 的詳細資訊,請參閱使用 Bicep Linter