Consideraciones de seguridad para los canaries de Synthetics - Amazon CloudWatch

Consideraciones de seguridad para los canaries de Synthetics

En las siguientes secciones se explican los problemas de seguridad que debe tener en cuenta al crear y ejecutar canaries en Synthetics.

Use conexiones seguras

Dado que el código de valor controlado y los resultados de las ejecuciones de prueba de valor controlado pueden contener información confidencial, no haga que su valor controlado se conecte a puntos de conexión a través de conexiones no cifradas. Utilice siempre conexiones cifradas, como aquellas que empiezan por https://.

Consideraciones de nomenclatura para valores controlados

El nombre de recurso de Amazon (ARN) de un valor controlado se incluye en la cabecera del usuario-agente como parte de las llamadas salientes que se realicen desde el navegador Chromium impulsado por Puppeteer que se incluye como parte de la biblioteca contenedora de CloudWatch Synthetics. Ayuda a identificar el tráfico de valores controlados de CloudWatch Synthetics y a relacionarlo de nuevo con los valores controlados que realizan las llamadas.

El ARN de valor controlado incluye el nombre del valor controlado. Elija nombres de valor controlado que no revelen información privada.

Además, asegúrese de apuntar sus canaries solo a aquellos sitios web y puntos de enlace que controle.

Secretos e información confidencial en código de valor controlado

Si pasa el código de valor controlado directamente al valor controlado usando un archivo zip, el contenido del script se puede ver en los registros de AWS CloudTrail.

Si tiene información confidencial o secretos (como claves de acceso o credenciales de base de datos) en un script de valor controlado, le recomendamos encarecidamente que almacene el script como un objeto con control de versiones en Amazon S3 y pase la ubicación de Amazon S3 al valor controlado, en lugar de pasar el código de valor controlado mediante un archivo zip.

Si utiliza un archivo zip para pasar el script de valor controlado, le recomendamos encarecidamente que no incluya secretos ni información confidencial en el código fuente del valor controlado. Para obtener más información acerca de cómo utilizar AWS Secrets Manager para ayudar a mantener seguros sus secretos, consulte ¿Qué es AWS Secrets Manager?.

Consideraciones de permisos

Se recomienda que restrinja el acceso a los recursos que CloudWatch Synthetics ha creado o utilizado. Utilice permisos estrictos en los buckets de Amazon S3 donde los canaries almacenan los resultados de las ejecuciones de prueba y otros artefactos, como registros y capturas de pantalla.

Del mismo modo, mantenga permisos estrictos en las ubicaciones donde se almacena el código origen del valor controlado, de modo que ningún usuario elimine accidentalmente o de forma maliciosa las capas o funciones de Lambda que se han utilizado para el valor controlado.

Para ayudar a garantizar la ejecución del código de valor controlado deseado, puede utilizar el control de versiones de objetos en el bucket de Amazon S3 donde se almacena el código del valor controlado. A continuación, cuando especifique este código para ejecutarlo como valor controlado, puede incluir el objeto versionId como parte de la ruta, como en los ejemplos siguientes.

https://bucket.s3.amazonaws.com/path/object.zip?versionId=version-id https://s3.amazonaws.com/bucket/path/object.zip?versionId=version-id https://bucket.s3-region.amazonaws.com/path/object.zip?versionId=version-id

Seguimientos de pilas y mensajes de excepción

De forma predeterminada, los valores controlados de CloudWatch Synthetics capturan cualquier excepción que el script del valor controlado produzca, independientemente de si el script es personalizado o proviene de un esquema. CloudWatch Synthetics registra tanto el mensaje de excepción como el seguimiento de la pila en tres ubicaciones:

  • Vuelva al servicio de CloudWatch Synthetics para acelerar la depuración al describir las ejecuciones de prueba

  • En CloudWatch Logs en función de la configuración con la que se crean las funciones de Lambda

  • En el archivo de registro de Synthetics, que es un archivo de texto llano que se carga en la ubicación de Amazon S3 especificada por el valor que se establece para la ubicación de resultados del valor controlado resultsLocation

Si desea enviar y almacenar menos información, puede capturar excepciones antes de que regresen a la biblioteca contenedora de CloudWatch Synthetics.

También puede haber URL de solicitud en los errores. CloudWatch Synthetics busca cualquier URL en el error que el script genera y edita los parámetros de URL restringidos de ellas en función de la configuración restrictedUrlParameters. Si está registrando mensajes de error en su script, puede usar getSanitizedErrorMessage para editar direcciones URL antes de registrar.

Limite el alcance de los roles de IAM

Le recomendamos que no configure el valor controlado para visitar URL o puntos de conexión potencialmente malintencionados. Apuntar el valor controlado a sitios web o puntos de conexión desconocidos o que no son de confianza podría exponer el código de la función de Lambda a scripts de un usuario malicioso. Si un sitio web malicioso puede salir de Chromium, podría tener acceso a su código Lambda de una manera similar a si se conectó a él mediante un navegador de Internet.

Ejecute la función de Lambda con un rol de ejecución de IAM que tenga permisos más focalizados. De esta forma, si la función de Lambda se ve comprometida por un script malicioso, tendrá acciones limitadas que puede realizar cuando se ejecute como la cuenta de AWS del valor controlado.

Cuando se utiliza la consola de CloudWatch para crear un valor controlado, se crea con un rol de ejecución de IAM reducido.

Redacción de datos confidenciales

CloudWatch Synthetics captura las direcciones URL, el código de estado, los motivos del error (si existe) y cabeceras y cuerpos de solicitudes y respuestas. Esto permite al usuario del valor controlado a comprender, monitorear y depurar valores controlados.

Las configuraciones descritas en las siguientes secciones se pueden establecer en cualquier punto de la ejecución del valor controlado. También puede optar por aplicar diferentes configuraciones a diferentes pasos de Synthetics.

Direcciones URL de solicitud

De forma predeterminada, CloudWatch Synthetics registra las direcciones URL de solitud, los códigos de estado y el motivo de estado de cada URL en los registros de los valores controlados. Las URL de solicitud también pueden aparecer en informes de ejecución de valores controlados, archivos HAR, etc. La URL de solicitud puede contener parámetros de consulta confidenciales, como tokens de acceso o contraseñas. Puede editar la información confidencial para que CloudWatch Synthetics no la registre.

Para editar la información confidencial, establezca la propiedad de configuración restrictedUrlParameters. Para obtener más información, consulte Clase de SyntheticsConfiguration. Esto hace que CloudWatch Synthetics edite los parámetros de URL, incluidos los valores de los parámetros de ruta y de consulta, basados en restrictedUrlParameters antes de que se realice el registro. Si está registrando direcciones URL en el script, puede usar getSanitizedUrl(url, stepConfig = null) para editar las direcciones URL antes de que se realice el registro. Para obtener más información, consulte Clase de SyntheticSloghelper.

Encabezados

De forma predeterminada, CloudWatch Synthetics no registra las cabeceras de solicitud o respuesta. Para canarios de la UI, este es el comportamiento predeterminado para canaries que usan la versión de tiempo de ejecución syn-nodejs-puppeteer-3.2 y posteriores.

Si las cabeceras no contienen información confidencial, puede habilitar las cabeceras en los informes de archivos HAR y HTTP al establecer la propiedades includeRequestHeaders y includeResponseHeaders a true. Puede habilitar todos las cabeceras pero optar por restringir los valores de las claves de cabecera confidenciales. Por ejemplo, puede elegir solo editar las cabeceras Authorization de los artefactos que los canaries producen.

Cuerpo de solicitud y de respuesta

De forma predeterminada, CloudWatch Synthetics no registra el cuerpo de solicitud o de respuesta en registros o informes de valores controlados. Esta información resulta especialmente útil para los canarios de la API. Synthetics captura todas las solicitudes HTTP y puede mostrar cabeceras y cuerpos de solicitud y de respuesta. Para obtener más información, consulte executeHttpStep(stepName, requestOptions, [callback], [stepConfig]). Puede elegir habilitar el cuerpo de solicitud o de respuesta al establecer las propiedades includeRequestBody y includeResponseBody en true.