Comparteix a través de


Regla de linter: los resultados no deben contener secretos

Esta regla encuentra la posible exposición de secretos en los resultados de una plantilla.

Código de regla de linter

Use el valor siguiente del archivo de configuración de Bicep para personalizar los valores de regla: outputs-should-not-contain-secrets.

Soluciones

No incluya ningún valor en un resultado que pueda exponer posiblemente secretos. Por ejemplo, parámetros seguros de tipo secureString o secureObject, o funciones list* como listKeys. La salida de una plantilla se almacena en el historial de implementación, por lo que un usuario con permisos de solo lectura podría acceder a información que de otra manera no estaría disponible con esos permisos. En el siguiente ejemplo se produce un error porque se incluye un parámetro protegido en un valor de salida.

@secure()
param secureParam string

output badResult string = 'this is the value ${secureParam}'

En el siguiente ejemplo se produce un error porque utiliza una función list* en una salida.

param storageName string
resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' existing = {
  name: storageName
}

output badResult object = {
  value: stg.listKeys().keys[0].value
}

En el ejemplo siguiente se produce un error porque el nombre de salida contiene "contraseña", lo que indica que puede contener un secreto.

output accountPassword string = '...'

Para solucionarlo, tendrás que quitar los datos secretos de la salida. El procedimiento recomendado es generar el resourceId del recurso que contiene el secreto y recuperar este último al crear o actualizar el recurso que necesita la información. Los secretos también se pueden almacenar en KeyVault para escenarios de implementación más complejos.

En el ejemplo siguiente se muestra un patrón seguro para recuperar una clave de storageAccount de un módulo.

output storageId string = stg.id

Que se puede usar en una implementación posterior, como se muestra en el ejemplo siguiente

someProperty: listKeys(myStorageModule.outputs.storageId.value, '2021-09-01').keys[0].value

Silenciamiento de los falsos positivos

A veces, esta regla alerta sobre salidas de plantilla que en realidad no contienen secretos. Por ejemplo, no todas las funciones list* realmente devuelven datos confidenciales. En estos casos, puede deshabilitar la advertencia para esta línea agregando #disable-next-line outputs-should-not-contain-secrets antes de la línea con la advertencia.

#disable-next-line outputs-should-not-contain-secrets // Doesn't contain a password
output notAPassword string = '...'

Es una buena práctica agregar un comentario que explique por qué la regla no se aplica a esta línea.

Pasos siguientes

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