Compartir vía


Regla linter: parámetros seguros en la implementación anidada

Los recursos de implementación anidados con ámbito externo no deben usarse para parámetros seguros ni funciones list*. Puede exponer los valores seguros en el historial de implementación.

Código de regla de linter

Use el valor siguiente del archivo de configuración de Bicep para personalizar los valores de regla:

secure-params-in-nested-deploy

Soluciones

Establezca las properties.expressionEvaluationOptions.scope a inner de la implementación en o use en su lugar un módulo de Bicep.

En el ejemplo siguiente se produce un error en esta prueba porque se hace referencia a un parámetro seguro en un recurso de implementación anidado de ámbito externo.

@secure()
param secureValue string

resource nested 'Microsoft.Resources/deployments@2024-03-01' = {
  name: 'nested'
  properties: {
    mode: 'Incremental'
    template: {
      '$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
      contentVersion: '1.0.0.0'
      variables: {}
      resources: [
        {
          name: 'outerImplicit'
          type: 'Microsoft.Network/networkSecurityGroups'
          apiVersion: '2023-11-01'
          location: '[resourceGroup().location]'
          properties: {
            securityRules: [
              {
                name: 'outerImplicit'
                properties: {
                  description: format('{0}', secureValue)
                  protocol: 'Tcp'
                }
              }
            ]
          }
        }
      ]
    }
  }
}

Puede corregirlo estableciendo las propiedades de la implementación.expressionEvaluationOptions.scope en 'inner':

@secure()
param secureValue string

resource nested 'Microsoft.Resources/deployments@2024-03-01' = {
  name: 'nested'
  properties: {
    mode: 'Incremental'
    expressionEvaluationOptions: {
      scope: 'Inner'      // Set to inner scope
    }
    template: {
      '$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
      contentVersion: '1.0.0.0'
      variables: {}
      resources: [
        {
          name: 'outerImplicit'
          type: 'Microsoft.Network/networkSecurityGroups'
          apiVersion: '2023-11-01'
          location: '[resourceGroup().location]'
          properties: {
            securityRules: [
              {
                name: 'outerImplicit'
                properties: {
                  description: format('{0}', secureValue)
                  protocol: 'Tcp'
                }
              }
            ]
          }
        }
      ]
    }
  }
}

Pasos siguientes

Para obtener más información acerca de linter, consulte Uso de linter de Bicep.