
Una herramienta de AWS para ayudarte a crear una evaluación puntual de tu cuenta de AWS usando Prowler.
La ciberseguridad sigue siendo un tema muy importante y un punto de preocupación para muchos CIOs, CISOs y sus clientes. Para abordar estas importantes preocupaciones, AWS ha desarrollado un conjunto principal de servicios que los clientes deben utilizar para ayudar a proteger sus cuentas. Las revisiones de Amazon GuardDuty, AWS Security Hub, AWS Config y AWS Well-Architected ayudan a los clientes a mantener una postura de seguridad sólida en sus cuentas de AWS. A medida que más organizaciones se despliegan en la nube, especialmente si lo hacen rápidamente, y aún no han implementado los servicios recomendados de AWS, puede existir la necesidad de realizar una evaluación de seguridad rápida del entorno de nube.
Hemos desarrollado una solución económica, fácil de desplegar, segura y rápida para proporcionar a nuestros clientes un informe de evaluación de seguridad. Estos informes se generan utilizando el proyecto de código abierto Prowler. Prowler realiza una evaluación de seguridad puntual basada en las mejores prácticas de AWS y puede ayudar a identificar rápidamente cualquier área de riesgo potencial en el entorno desplegado de un cliente. Si está interesado en realizar estas evaluaciones de forma continua, AWS recomienda habilitar el estándar de mejores prácticas de seguridad fundamentales de Security Hub. Si está interesado en integrar los resultados de su evaluación de Prowler con Security Hub, puede seguir las instrucciones en la Documentación de Prowler.
Nota: Prowler no es una solución propiedad de AWS. Los clientes deben revisar Prowler de forma independiente antes de ejecutar esta solución. Cualquier dependencia asociada con Prowler debe mantenerse actualizada. Esta solución instala una versión fijada de Prowler (actualmente 5.41.0) desde el instalador de paquetes pip, de modo que un cambio en el formato de salida de Prowler no pueda romper un escaneo sin previo aviso. Para pasar a una versión más reciente, edite la línea
pip3 install prowler==en2-sat2-codebuild-prowler.yaml.
📕 Para obtener instrucciones paso a paso más detalladas, visite el módulo 2 en el Taller SHIP.
La solución se despliega con AWS CloudFormation. Cuando se despliega, se crean un proyecto de AWS CodeBuild y un bucket de Amazon S3 para almacenar los informes generados por Prowler. Luego se utiliza una función de AWS Lambda para iniciar el proyecto de AWS CodeBuild.
Los valores predeterminados de los parámetros (entrada del usuario) ejecutarán un escaneo básico en una sola cuenta. Sin embargo, puede elegir diferentes parámetros para ejecutar escaneos más exhaustivos o para escanear múltiples cuentas. El proceso de despliegue tarda menos de 5 minutos en completarse. Las plantillas de AWS CloudFormation de la solución se proporcionan para su revisión en este repositorio de Github.
Una vez que se despliega la plantilla, el proyecto de CodeBuild se ejecutará. La evaluación predeterminada tarda alrededor de 5 minutos en completarse. El tiempo para completar una evaluación de seguridad variará según la cantidad de recursos y las opciones de escaneo seleccionadas. Al final de las evaluaciones, los informes se entregan al bucket de S3 creado.

SATv2 se puede personalizar actualizando los parámetros de CloudFormation. Esta sección resume las opciones disponibles y proporciona un enlace a la sección con más información.
| Parámetro | Descripción | Más información |
|---|---|---|
| ProwlerScanType | Especifique qué tipo de escaneo realizar. Seleccionar full sin especificar diferentes ProwlerOptions realizará un escaneo completo. Para realizar una comprobación específica, elija Full y agregue -c a ProwlerOptions. | Tipos de escaneo |
| ExcludeSecretsChecks | El valor predeterminado es true, lo que omite las comprobaciones de Prowler que buscan secretos codificados de forma rígida en el contenido de los recursos. Establezca en false para ejecutarlas. | Comprobaciones de secretos |
| MultiAccountScan | Establezca esto en true si desea escanear todas las cuentas de su organización. Debe haber desplegado la plantilla de requisito previo para aprovisionar un rol, o especificar un ProwlerRole diferente con los permisos adecuados. | Escaneo de múltiples cuentas |
| Reporting | Establezca esto en true si desea resumir los informes de Prowler en un único csv. Esto es útil al escanear múltiples cuentas. | Resumen de informes |
| EmailAddress | Especifique una dirección si desea recibir un correo electrónico cuando finalice la evaluación. | Notificaciones |
| Parámetros avanzados | ||
| ConcurrentAccountScans | Para escaneos de múltiples cuentas, especifique el número de cuentas a escanear de forma concurrente. Esto es útil para organizaciones grandes con muchas cuentas. Seleccionar más de tres cambia el tamaño de la instancia de CodeBuild y puede generar costos adicionales. | |
| CodeBuildTimeout | Establezca el tiempo de espera para el trabajo de CodeBuild. El valor predeterminado es 300 minutos (5 horas). | |
| MultiAccountListOverride | Especifique una lista de cuentas a escanear delimitada por espacios. Dejar esto en blanco escaneará todas las cuentas de su organización. Asegúrese de haber establecido el parámetro MultiAccountScan anterior en true si desea escanear cuentas específicas. Si no puede proporcionar acceso delegado a ListAccount, puede proporcionar el parámetro MultiAccountListOverride. | Escaneo de múltiples cuentas |
| ProwlerOptions | Especifique los parámetros para Prowler. El --role y el ARN se agregarán automáticamente al final de los parámetros que especifique. Esto también se puede utilizar para especificar una única comprobación. | Escaneo completo |
Puede utilizar este proyecto para ejecutar Prowler en múltiples cuentas de una organización de AWS, o en una sola cuenta. Proporcionamos instrucciones para usar AWS CloudShell o la consola de AWS. Elija una opción para comenzar.
Para ejecutar la solución de evaluación de seguridad de autoservicio (SATv2) en una sola cuenta, siga las instrucciones a continuación. Puede optar por usar la AWS CLI o la consola de AWS.
Inicie sesión en su cuenta de AWS.
En la barra de navegación, elija AWS CloudShell.
Para descargar la plantilla de CloudFormation, ingrese el siguiente comando.
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/2-sat2-codebuild-prowler.yaml
Para crear un bucket de S3 para almacenar la plantilla, ingrese los siguientes comandos. La plantilla es mayor a 51,200 bytes, por lo que CloudFormation requiere que se cargue en S3 en lugar de pasarse en línea.
TEMPLATE_BUCKET=sat2-cfn-templates-$(aws sts get-caller-identity --query Account --output text)-$AWS_REGION
aws s3 mb s3://$TEMPLATE_BUCKET --region $AWS_REGION
Para desplegar la plantilla de CloudFormation, ingrese el siguiente comando. La opción --s3-bucket carga la plantilla en el bucket antes de crear la pila.
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
--stack-name sat2 \
--capabilities CAPABILITY_NAMED_IAM \
--s3-bucket $TEMPLATE_BUCKET
Después de crear la pila, puede eliminar el bucket de almacenamiento temporal. Solo se utiliza para entregar la plantilla a CloudFormation.
aws s3 rb s3://$TEMPLATE_BUCKET --force
La solución de evaluación de seguridad de autoservicio (SAT) también admite escaneos de múltiples cuentas. Debe desplegar un rol de requisito previo en cada cuenta en la que desee realizar el escaneo. Para ejecutar SATv2 en múltiples cuentas, siga las instrucciones a continuación. Puede optar por usar la AWS CLI o la consola de AWS.
Estas instrucciones asumen que ya cuenta con los requisitos previos para las operaciones de conjuntos de pilas. Para obtener más información, visite la Guía del usuario de AWS CloudFormation.
Nota: Los StackSets no se aplican a la cuenta de administración. Para evaluar la cuenta de administración, despliegue el 1-sat2-member-role como una pila de CloudFormation.
Inicie sesión en su cuenta de administración de AWS.
En la barra de navegación, elija AWS CloudShell.
Identifique desde qué cuenta ejecutará el escaneo de Prowler. Los clientes suelen utilizar una cuenta de herramientas de seguridad o una cuenta de auditoría. Tome nota del ID de la cuenta para el parámetro ProwlerAccountID.
Para descargar la plantilla de CloudFormation, ingrese el siguiente comando.
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/1-sat2-member-roles.yaml
Despliegue la plantilla de CloudFormation a través de CloudFormation StackSets. Actualice los siguientes parámetros:
aws cloudformation create-stack-set --template-body file://1-sat2-member-roles.yaml \
--stack-set-name sat2-member-roles \
--permission-model SERVICE_MANAGED \
--auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false \
--capabilities CAPABILITY_NAMED_IAM \
--parameters ParameterKey=ProwlerAccountID,ParameterValue=<aws-account-id> \
--region <region>
Utilice el siguiente comando para crear instancias de pila para cada cuenta de su organización. Puede apuntar a una OU específica o a la OU raíz. Actualice los siguientes parámetros:
aws cloudformation create-stack-instances --stack-set-name sat2-member-roles \
--deployment-targets OrganizationalUnitIds='["<root-ou>"]' \
--regions '["<region>"]' \
--operation-preferences FailureTolerancePercentage=100,MaxConcurrentPercentage=100 \
--region <region>
Determine si tiene un administrador delegado o una política de recursos que ya exista para su cuenta de Prowler. Solo se necesita una opción y se recomienda la política de recursos, ya que es más granular.
Nota: Las políticas de recursos no están disponibles en GovCloud, por lo que deberá usar un administrador delegado.
7a. Su cuenta de Prowler podría ya tener una delegación. Puede usar los siguientes comandos para verificarlo:
aws organizations list-delegated-administrators
7b. Su cuenta de Prowler podría ya tener una política de recursos. Puede usar los siguientes comandos para verificarlo:
aws organizations describe-resource-policy
Si no tiene un administrador delegado ni una política de recursos, puede usar los siguientes comandos para agregar el acceso adecuado.
Nota: Si no puede proporcionar acceso delegado a ListAccount, puede proporcionar el parámetro MultiAccountListOverride en la
2-sat2-codebuild-prowler template.
Nota: Si está utilizando GovCloud, use el paso 8a para crear un administrador delegado. Si está utilizando una región comercial, use el paso 8b para proporcionar acceso con privilegios mínimos a ListAccounts.
8a. Use el siguiente comando para delegar un administrador si aún no tiene uno. Reemplace <aws-account-id> con el ID de la cuenta desde la que ejecutará Prowler.
aws organizations register-delegated-administrator <aws-account-id>
8b. Use los siguientes comandos para agregar una política de recursos.
Reemplace <aws-account-id> con el ID de la cuenta desde la que ejecutará Prowler.
aws organizations put-resource-policy --content \
'{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<aws-account-id>:root"
},
"Action": [
"organizations:ListAccounts",
"organizations:DescribeAccount",
"organizations:ListTagsForResource",
"organizations:ListParents",
"organizations:DescribeOrganizationalUnit"
],
"Resource": "*"
}
]
}'
Nota:
ListParentsy son los que completan las columnas y en los hallazgos. Omítalos y el resto del escaneo seguirá funcionando, pero esas dos columnas volverán vacías.
Nota: Asegúrese de haber cambiado a la cuenta que especificó que ejecutará Prowler.
Para descargar la plantilla, abra AWS CloudShell en la cuenta de Prowler e ingrese el siguiente comando.
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/2-sat2-codebuild-prowler.yaml
Para crear un bucket de S3 para almacenar la plantilla, ingrese los siguientes comandos. La plantilla es mayor a 51,200 bytes, por lo que CloudFormation requiere que se cargue en S3 en lugar de pasarse en línea.
TEMPLATE_BUCKET=sat2-cfn-templates-$(aws sts get-caller-identity --query Account --output text)-$AWS_REGION
aws s3 mb s3://$TEMPLATE_BUCKET --region $AWS_REGION
Para desplegar la plantilla en la cuenta de Prowler. Establezca MultiAccountScan en true para escanear todas las cuentas de su organización. La opción --s3-bucket carga la plantilla en el bucket antes de crear la pila.
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
--stack-name sat2-prowler \
--capabilities CAPABILITY_NAMED_IAM \
--s3-bucket $TEMPLATE_BUCKET \
--parameter-overrides MultiAccountScan=true
Después de crear la pila, puede eliminar el bucket de almacenamiento temporal. Solo se utiliza para entregar la plantilla a CloudFormation.
aws s3 rb s3://$TEMPLATE_BUCKET --force
Descargue los archivos 1-sat2-member-roles.yaml y 2-sat2-codebuild-prowler.yaml.
Despliegue la plantilla de CloudFormation mediante CloudFormation StackSets. Actualice los siguientes parámetros:
Navegue a la consola de AWS CloudFormation.
En el panel de navegación, elija StackSets.
Elija Create StackSet.
En Permissions, deje seleccionado Service-managed permissions.
En Specify template, seleccione Upload a template file.
Elija 1-sat2-member-roles.yaml que descargó en el paso 1-1.
Elija Next.
En Stack name, introduzca sat2-member-role.
En Parameters, introduzca lo siguiente:
Elija Next.
En la página Configure StackSet options, elija Next.
En Set deployment options, introduzca lo siguiente:
Elija Next.
En la página Review, marque la casilla I acknowledge that AWS CloudFormation might create IAM resources. y elija Submit.
Determine si ya existe un administrador delegado o una política de recursos para la cuenta en la que desea desplegar Prowler. Se recomienda ejecutar Prowler desde su cuenta de herramientas de seguridad (Audit). Para actualizar o verificar que la cuenta de auditoría tiene permisos para ListAccounts, siga estos pasos.
Navegue a la consola de AWS Organization.
En el panel de navegación, elija Settings.
En Delegated administrator for AWS Organizations, incluya la siguiente declaración.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<aws-account-id>:root"
},
"Action": [
"organizations:ListAccounts",
"organizations:DescribeAccount",
"organizations:ListTagsForResource",
"organizations:ListParents",
"organizations:DescribeOrganizationalUnit"
],
"Resource": "*"
}
]
}
Nota:
ListParentsyDescribeOrganizationalUnitson lo que rellena las columnasaccount_ou_uidyaccount_ou_nameen los hallazgos. Omítalos y el resto del escaneo seguirá funcionando, pero esas dos columnas aparecerán vacías.
Navegue a la consola de AWS CloudFormation en la cuenta desde la que ejecutará la herramienta (ProwlerAccountID).
En el panel de navegación, elija Stacks.
Elija Create stack.
En Specify template, seleccione Upload a template file.
Elija 2-sat2-codebuild-prowler.yaml que descargó en el paso 1-1.
Elija Next.
En Stack name, introduzca sat2-prowler.
En la sección Parameters, en MultiAccountScan, seleccione true.
Opcionalmente, puede habilitar los informes para obtener un resumen de todas las cuentas en un único archivo csv. En Reporting, seleccione true.
Elija Next.
En la página Configure stack options, elija Next.
En la página Review SAS, marque la casilla I acknowledge that AWS CloudFormation might create IAM resources. y elija Submit.
Una vez desplegada la solución, una función Lambda inicia el proyecto de CodeBuild. Cuando el proyecto de CodeBuild termine de compilarse, los resultados de Prowler se cargarán en el bucket de Amazon S3 creado. Si configuró las notificaciones, recibirá un correo electrónico cuando finalice el escaneo de Prowler. Si configuró los informes, tendrá un archivo csv consolidado en la carpeta /reports.
Si no configuró las alertas por correo electrónico, puede supervisar el progreso desde la consola de CodeBuild.
Para revisar los resultados, siga estos pasos.
Navegue a la consola de Amazon S3 en la cuenta en la que desplegó Prowler.
Seleccione el bucket que comienza por sat2-prowler-prowlerfindingsbucket-
Elija la carpeta del formato de salida que desee y, a continuación, las carpetas scan_date= y scan_time= de la ejecución que quiera revisar.
Cada formato de salida tiene su propia carpeta de nivel superior, y cada ejecución escribe en una subcarpeta scan_date=YYYY-MM-DD/scan_time=HHMMSS debajo de ella. La hora es la hora UTC a la que comenzó el escaneo:
csv/scan_date=2026-09-01/scan_time=204955/ Prowler's CSV findings, as written
html/scan_date=2026-09-01/scan_time=204955/ per-account HTML reports
json/scan_date=2026-09-01/scan_time=204955/ per-account JSON
ocsf-json/scan_date=2026-09-01/scan_time=204955/ per-account OCSF JSON
parquet/scan_date=2026-09-01/scan_time=204955/ the copy Athena queries
compliance/scan_date=2026-09-01/scan_time=204955/ compliance CSVs, when produced
reports/ consolidated CSV and dashboard
Cada ejecución tiene su propia carpeta, por lo que volver a ejecutar la solución nunca mezcla hallazgos nuevos con los antiguos, incluso cuando la ejecuta más de una vez el mismo día. Las ejecuciones anteriores se conservan para que pueda compararlas.
Para cada cuenta, habrá 4 tipos de archivo (csv, html, json, json-ocsf) con el formato prowler-output-<aws-account-id>-<datetime>.
Seleccione uno de los objetos html.
Elija Open.

Se abrirá una nueva ventana con su informe. Puede usar los filtros para identificar y priorizar los hallazgos.

Si habilitó los informes, habrá un panel html estático en la carpeta de informes.
Nota: No comparta su URL prefirmada con nadie. Una URL prefirmada utiliza credenciales de seguridad para conceder permiso temporal para descargar objetos. La URL se puede introducir en un navegador o usar mediante un programa para descargar el objeto. Las credenciales utilizadas por la URL prefirmada son las del usuario de AWS que generó la URL. Para obtener más información, consulte Sharing objects with presigned URLs.
Prowler tiene un panel integrado para revisar los resultados. Para usar el panel de Prowler, Prowler debe estar instalado localmente y debe descargar los resultados de Prowler localmente.
Debe tener la Interfaz de Línea de Comandos (CLI) de AWS y credenciales válidas. Para obtener más información, consulte la guía del usuario de la interfaz de línea de comandos de AWS.
Instale Prowler. Para obtener más información, consulte las instrucciones de instalación de Prowler.
pip install prowler
Obtenga el nombre del bucket de Amazon S3. El nombre del bucket está en la consola de CloudFormation como recurso ProwlerFindingsBucket. Alternativamente, navegue a la consola de S3 y busque un bucket con el formato {stack_name}-prowlerfindingsbucket-{ID}
Descargue los CSV y los datos de cumplimiento desde S3. Si no ejecutó un escaneo completo, es posible que no tenga datos de cumplimiento. Reemplace {bucket_name} con el nombre de su bucket, y {scan_date} y {scan_time} con la ejecución que desea cargar, por ejemplo 2026-09-01 y 204955. Para listar las ejecuciones disponibles, use aws s3 ls s3://{bucket_name}/csv/scan_date={scan_date}/.
aws s3 sync s3://{bucket_name}/compliance/scan_date={scan_date}/scan_time={scan_time}/ output/compliance/
aws s3 sync s3://{bucket_name}/csv/scan_date={scan_date}/scan_time={scan_time}/ output/
Nota: Sincronice una ejecución a la vez. El panel de Prowler lee
output/*.csvy no busca en subcarpetas, por lo que copiar las propias carpetasscan_date=enoutput/producirá un panel vacío. Cargar dos ejecuciones a la vez mostraría cada hallazgo dos veces.
Ejecute el panel. Use el siguiente comando para ejecutar el panel. De forma predeterminada, se iniciará en http://127.0.0.1:11666/.
prowler dashboard
De forma predeterminada, SAT2 ejecutará un escaneo intermedio, que ejecuta todas las comprobaciones de severidad crítica y alta. Puede optar por ejecutar un escaneo básico o completo eligiendo un valor diferente para el parámetro ProwlerScanType.
Por ejemplo, un escaneo de una sola cuenta usando la opción de escaneo intermedio usaría este comando:```bash
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml
--stack-name sat2-prowler
--capabilities CAPABILITY_NAMED_IAM
--s3-bucket $TEMPLATE_BUCKET
--parameter-overrides ProwlerScanType=Intermediate
>Nota: La opción `--s3-bucket` es obligatoria porque la plantilla supera los 51.200 bytes, el máximo que CloudFormation acepta en línea. `$TEMPLATE_BUCKET` es el bucket de staging creado en los pasos de despliegue de CloudShell anteriores. Se aplica a todos los ejemplos de `aws cloudformation deploy` de este README.
Las comprobaciones se añaden con frecuencia; para ver las últimas comprobaciones, ejecute el comando `prowler aws --list-checks`. A continuación se proporciona un ejemplo para cada nivel de comprobación.
### Escaneo básico
Para ver una lista de comprobaciones, revise [comprobaciones básicas](https://github.com/awslabs/aws-security-assessment-solution/blob/main/checks/basic_checks.txt).
- Comprobación manual - Mantener los datos de contacto actualizados.
- Buscar runtimes de Lambda obsoletos.
- Asegurarse de que CloudTrail está habilitado en todas las regiones
- Asegurarse de que AWS Config está habilitado en todas las regiones.
- Asegurarse de que ningún grupo de seguridad permite la entrada desde 0.0.0.0/0 o ::/0 a ningún puerto.
- Comprobar si GuardDuty está habilitado
- Asegurarse de que la política de contraseñas de IAM requiere al menos una letra minúscula
- Asegurarse de que la política de contraseñas de IAM requiere al menos un número
- Asegurarse de que la política de contraseñas de IAM requiere al menos un símbolo
- Asegurarse de que la política de contraseñas de IAM requiere al menos una letra mayúscula
- Asegurarse de que MFA está habilitado para la cuenta raíz
- Asegurarse de que las claves de acceso se rotan cada 90 días o menos
- Asegurarse de que no hay buckets de S3 abiertos a Todos o a Cualquier usuario de AWS.
### Escaneo intermedio
Para ver una lista de comprobaciones, revise [comprobaciones intermedias](https://github.com/awslabs/aws-security-assessment-solution/blob/main/checks/intermediate_checks.txt).
Este escaneo añadirá `--severity critical high` a las opciones de escaneo de Prowler. Con esta opción seleccionada, Prowler ejecutará todas las comprobaciones de seguridad que resulten en severidad crítica o alta.
### Escaneo completo
Para ver una lista de comprobaciones, revise [comprobaciones completas](https://github.com/awslabs/aws-security-assessment-solution/blob/main/checks/full_checks.txt).
Esta opción no añade ningún parámetro adicional al escaneo de Prowler. Dará como resultado que Prowler ejecute más de 650 comprobaciones.
También puede usar el escaneo completo para personalizar el escaneo como desee.
Para **ProwlerScanType** elija **Full**.
Para **ProwlerOptions**, añada la comprobación. Por ejemplo, para comprobar solo si GuardDuty está habilitado, introduzca:
`aws --ignore-exit-code-3 -c guardduty_is_enabled`
### Comprobaciones de secretos
Por defecto, SATv2 omite las 23 comprobaciones de Prowler que buscan secretos codificados de forma rígida en el contenido de los recursos. Cubren el código de Lambda, las capas y las variables de entorno, las imágenes de ECR, los repositorios de CodeCommit, los eventos de registro de CloudWatch, los datos de usuario y las plantillas de lanzamiento de EC2, las salidas de CloudFormation y la configuración de Amplify, API Gateway, Batch, CodeBuild, Data Pipeline, ECS, Elastic Beanstalk, Glue, SageMaker, documentos de SSM y Step Functions. La lista completa es el mapeo `ProwlerExclusions` de la plantilla.
Estas comprobaciones descargan el contenido de los recursos, como el código de las funciones y las capas de las imágenes de contenedor, en el entorno de CodeBuild. Sus hallazgos pueden incluir fragmentos de lo que coincidió. Omitirlas mantiene ese contenido fuera del escaneo y de los informes, y acorta el escaneo.
La exclusión se aplica a todos los tipos de escaneo y se añade al comando de Prowler con `-e`. Las listas de comprobaciones de la carpeta [checks](https://github.com/awslabs/aws-security-assessment-solution/blob/main/checks) siguen incluyendo estas comprobaciones, porque se ejecutan cuando ExcludeSecretsChecks es false. Otras comprobaciones de la categoría `secrets` de Prowler, como IMDSv2, la rotación de claves de acceso y la rotación de Secrets Manager, comprueban la configuración en lugar del contenido y siguen ejecutándose.
Para ejecutar las comprobaciones de secretos, establezca ExcludeSecretsChecks en false:```bash
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
--stack-name sat2-prowler \
--capabilities CAPABILITY_NAMED_IAM \
--s3-bucket $TEMPLATE_BUCKET \
--parameter-overrides ExcludeSecretsChecks=false
Opcionalmente, puedes especificar una dirección de correo electrónico en el parámetro EmailAddress cuando despliegas la plantilla de CloudFormation. Esto creará un tema de SNS y enviará un correo electrónico cuando finalice el trabajo de CodeBuild.
Esto puede ser útil al ejecutar escaneos más largos, o en muchas cuentas.
Por ejemplo, un escaneo de una sola cuenta con notificaciones por correo electrónico usaría este comando:```bash
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml
--stack-name sat2-prowler
--capabilities CAPABILITY_NAMED_IAM
--s3-bucket $TEMPLATE_BUCKET
--parameter-overrides EmailAddress=[email protected]
Con o sin el parámetro opcional EmailAddress establecido, puedes ver el progreso en la consola de CodeBuild.
1. Navega a la [consola de CodeBuild](https://console.aws.amazon.com/codesuite/).
2. En el panel de navegación, en **Build**, elige **Build projects**.
3. Elige el proyecto de compilación que comienza con **ProwlerCodeBuild-**.
4. En Build history, verás la última ejecución.

5. Opcionalmente, puedes elegir **Start build** para ejecutar otro escaneo con las opciones que elijas cuando desplegaste la solución.
## Resumen de informes
Opcionalmente, puedes habilitar los informes para resumir múltiples resultados de escaneos de Prowler en un único archivo. Esto puede ser útil cuando se ejecuta Prowler en múltiples cuentas en una AWS Organization. La función de resumen de informes está desactivada por defecto. Para habilitar los informes, establece el parámetro Reporting en true cuando despliegues la plantilla de CloudFormation. Esto creará un WorkGroup de Athena, una tabla de Glue y ejecutará automáticamente una consulta para consolidar los resultados. El archivo csv resumido se encuentra en el mismo bucket de S3 que los resultados de Prowler, en la carpeta /reports.
Si especificas una dirección de correo electrónico mientras los informes están habilitados, recibirás un segundo correo electrónico cuando finalice la consulta de Athena.
### Cómo se construye la tabla de Athena
Athena consulta la copia en `parquet/` de los hallazgos en lugar del CSV de Prowler. El proyecto de CodeBuild convierte cada CSV a Parquet antes de subirlo, y la tabla de Glue `prowler` apunta a `parquet/`.
La conversión existe porque Prowler 5.17.0 y versiones posteriores incluyen markdown multilínea en los metadatos de sus comprobaciones, por lo que los campos `DESCRIPTION`, `RISK` y `REMEDIATION_*` contienen saltos de línea. Prowler entrecomilla esos campos correctamente, pero Athena lee el CSV a través del `TextInputFormat` de Hive, que divide los registros por saltos de línea antes de que se ejecute cualquier SerDe. Por lo tanto, una tabla respaldada por CSV devuelve una fila por línea física en lugar de una fila por hallazgo, y descarta silenciosamente las columnas que siguen al primer campo multilínea. Parquet no utiliza saltos de línea como límites de registro, por lo que el texto se conserva intacto. Parquet también comprime en gran medida el texto de remediación repetido, lo que abarata las consultas: un conjunto de CSV de 116 MB se convierte en aproximadamente 3 MB de Parquet.
La carpeta `csv/` se deja exactamente como la escribió Prowler, por lo que el panel de Prowler y cualquier herramienta existente de CSV siguen funcionando.
### Historial de escaneos y duplicados
La tabla está particionada por `scan_date` **y** `scan_time`, por lo que cada ejecución de la solución obtiene su propia partición. De esto se derivan dos cosas:
- El CSV consolidado en `/reports` cubre solo la ejecución más reciente, por lo que volver a ejecutar la solución nunca duplica el recuento de hallazgos, y los hallazgos que ya no existen no permanecen en el informe.
- Las ejecuciones anteriores siguen siendo consultables. `scan_date` y `scan_time` son columnas normales, por lo que puedes comparar resultados entre ejecuciones. La consulta guardada **Prowler scan trend** hace esto, una fila por ejecución.
Particionar solo por la fecha no es suficiente. Un segundo escaneo el mismo día escribiría en la misma partición, y sus hallazgos se fusionarían con los de la ejecución anterior en lugar de reemplazarlos. Cualquier hallazgo que el escaneo más reciente ya no reporte, porque se eliminó un recurso, una cuenta abandonó la organización, un rol de miembro dejó de funcionar o se restringió el tipo de escaneo, seguiría apareciendo en el informe y parecería actual.
Las nuevas particiones se registran automáticamente: la Lambda de informes ejecuta `MSCK REPAIR TABLE` antes de ejecutar la consulta de consolidación, por lo que no hay ningún crawler que programar ni nada que añadir manualmente.
Si escribes tus propias consultas de Athena, restíngelas a una sola ejecución o agregarás todos los escaneos del bucket a la vez. Ambas claves son de ancho fijo, por lo que compararlas concatenadas ordena las ejecuciones cronológicamente:```sql
SELECT severity, count(*)
FROM "{bucket_name}"."prowler"
WHERE status = 'FAIL'
AND concat(scan_date, scan_time) = (
SELECT max(concat(scan_date, scan_time)) FROM "{bucket_name}"."prowler"
)
GROUP BY severity
Para consultar un día completo a través de todas sus ejecuciones, filtre solo por scan_date.
Nota: Si está actualizando una implementación que usaba el diseño anterior basado únicamente en
scan_date, los resultados anteriores a la actualización no son visibles para la nueva tabla, porque sus rutas de S3 no tienen un nivelscan_time=. Los datos permanecen intactos en S3. Puede dejar que el siguiente escaneo vuelva a poblar la tabla, o mover los archivos antiguos a una carpetascan_time=, por ejemploaws s3 mv s3://{bucket_name}/parquet/scan_date={scan_date}/ s3://{bucket_name}/parquet/scan_date={scan_date}/scan_time=000000/ --recursive, y luego ejecutarMSCK REPAIR TABLE prowleren Athena.
Por ejemplo, un escaneo multi-cuenta con informes y alertas por correo electrónico habilitados usaría este comando:```bash
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml
--stack-name sat2-prowler
--capabilities CAPABILITY_NAMED_IAM
--s3-bucket $TEMPLATE_BUCKET
--parameter-overrides MultiAccountScan=true Reporting=true EmailAddress=[email protected]

Se crean dos consultas guardadas como ejemplos:
| Consulta guardada | Qué muestra |
| ---------------------------- | ---------------------------------------------------------------------- |
| Prowler organization summary | Comprobaciones fallidas en todas las cuentas evaluadas, para el escaneo más reciente. |
| Prowler scan trend | Comprobaciones fallidas por fecha de escaneo y severidad, para comparar ejecuciones a lo largo del tiempo. |
Para revisar y ejecutar una consulta, siga estos pasos:
1. Navegue a la consola de Amazon Athena.
2. Elija el grupo de trabajo que comienza con sat2-prowler-*.
3. Elija la pestaña **Saved queries**.
4. Seleccione la consulta que desea ejecutar eligiendo el **ID**.

5. Elija **Run** para ejecutar la consulta.

## Preguntas frecuentes (FAQ)
1. ¿Tiene algún costo?
+ Esta solución está diseñada para ejecutarse dentro del [AWS Free Tier](https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all).
+ Para [Amazon CodeBuild](https://aws.amazon.com/free/devops/?p=ft&z=subnav&loc=3), los clientes obtienen 100 minutos de compilación por mes.
+ Para los clientes que ya han excedido el nivel gratuito con CodeBuild, S3 y Lambda, esta solución cuesta menos de $1 ejecutarla.
2. ¿Es esta una herramienta de monitoreo e informes continuos?
+ No. Esta es una evaluación única; recomendamos a los clientes usar [AWS Security Hub](https://aws.amazon.com/security-hub/) para evaluaciones continuas.
3. ¿Se integra con GuardDuty, Security Hub, CloudWatch, etc.?
+ No. Puede seguir las instrucciones de [este blog](https://aws.amazon.com/blogs/security/use-aws-fargate-prowler-send-security-configuration-findings-about-aws-services-security-hub/) para integrar Prowler y Security Hub.
4. ¿Cómo remedio los problemas en los informes?
+ Generalmente, los problemas deben describirse en el informe con correcciones fácilmente identificables. Consulte también la documentación pública de cada herramienta (Prowler). Si esto es insuficiente, comuníquese con su equipo de cuenta de AWS o con [AWS Support](https://aws.amazon.com/contact-us/) para que le ayuden a comprender los informes y a trabajar en la remediación de los problemas.
5. ¿Qué hallazgos reporta Prowler para SATv2?
| Comprobación | Mitigación |
| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Comprobar si las operaciones de API invocadas por funciones Lambda están siendo registradas por CloudTrail. | CloudTrail es una configuración a nivel de cuenta de AWS. CloudTrail debe habilitarse independientemente de SATv2. |
| Habilitar la protección contra terminación para las pilas de Cloudformation | SATv2 está diseñado para ejecutarse en un momento determinado y luego eliminarse. Si la pila se termina, los hallazgos aún se conservan en el bucket de S3. |
| Comprobar si los grupos de logs de CloudWatch están protegidos por AWS KMS. | Los datos de los grupos de logs siempre están cifrados en CloudWatch Logs. De forma predeterminada, CloudWatch Logs utiliza cifrado del lado del servidor para los datos de logs en reposo. No se configura una clave KMS administrada por el cliente para ahorrar costos. |
| Comprobar si los grupos de logs de CloudWatch tienen una política de retención de días específicos. | La retención de los grupos de logs está establecida en 7 días por diseño. Esta comprobación busca grupos de logs con una retención inferior a un año. |
| Comprobar si los buckets de S3 tienen el cifrado KMS habilitado. | Todos los buckets de Amazon S3 tienen el cifrado configurado de forma predeterminada, y los objetos se cifran automáticamente mediante el cifrado del lado del servidor con claves administradas por Amazon S3 (SSE-S3). No se configura una clave KMS administrada por el cliente para ahorrar costos. |
| Comprobar si MFA Delete está habilitado en el bucket de S3. | Los resultados de la evaluación de Prowler se pueden regenerar y no requieren MFA delete. |
| Comprobar si los buckets de S3 tienen el bloqueo de objetos habilitado | Los resultados de la evaluación de Prowler se pueden regenerar y no requieren el bloqueo de objetos de S3. |
| Comprobar si los buckets de S3 tienen habilitado el registro de acceso al servidor | Los resultados de la evaluación de Prowler no requieren el registro de acceso al servidor. |
## Limpieza
Después de ejecutar la solución, debe eliminar las pilas de CloudFormation para eliminar los recursos que ya no son necesarios. El bucket de S3 con los resultados del escaneo de Prowler permanecerá.
Para eliminar la solución de evaluación de seguridad de su cuenta, siga estos pasos.
1. Navegue a la [consola de AWS CloudFormation](https://console.aws.amazon.com/cloudformation) en la cuenta desde la que ejecutó la herramienta (ProwlerAccountID).
2. En el panel de navegación, elija **Stacks**.
3. Elija la pila **sat2-prowler**.
4. Elija **Delete**.
Si implementó el StackSet de rol de miembro para escanear varias cuentas, siga estos pasos.
1. Navegue a la [consola de AWS CloudFormation](https://console.aws.amazon.com/cloudformation) en la cuenta donde creó el StackSet de rol de miembro.
2. En el panel de navegación, elija **StackSets**.
3. Elija el StackSet **sat2-member-roles**.
4. Elija **Actions**, luego **Delete stacks form StackSet**.
5. Especifique el mismo **AWS OU ID** que cuando creó el StackSet.
6. Para **Specify regions**, elija **Add all regions**.
7. Elija **Next** y **Submit**.
Una vez que finalice el cambio, puede eliminar el StackSet.
1. Elija el StackSet **sat2-member-roles**.
2. Elija **Actions**, luego **Delete StackSet**.
Si desea eliminar el bucket de Amazon S3 con los resultados del escaneo, siga los pasos de la [guía del usuario de Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) para eliminar los objetos y el bucket. Si ejecuta la solución nuevamente, se creará un nuevo bucket de S3 para sus resultados.
## Seguridad
Consulte [CONTRIBUTING](https://github.com/awslabs/aws-security-assessment-solution/blob/main/CONTRIBUTING.md#security-issue-notifications) para obtener más información.
## Licencia
Este proyecto está licenciado bajo la Licencia Apache-2.0.
| ProwlerRole |
| El rol que Prowler debe asumir para realizar el escaneo. Cambie esto si desea especificar su propio rol con permisos diferentes. |
DescribeOrganizationalUnitaccount_ou_uidaccount_ou_name