Volver a actualizaciones
Nuevo releaseSep 10, 2026

aws-security-assessment-solution v3.0.0

Una herramienta de AWS para ayudarte a crear una evaluación puntual de tu cuenta de AWS usando Prowler.

Compartir

Soluciones de Evaluación de Seguridad de Autoservicio (v2.0)

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 deberían usar 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 sobre 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 de AWS recomendados, puede existir la necesidad de realizar una evaluación de seguridad rápida del entorno en la nube.

Hemos desarrollado una solución económica, fácil de implementar, 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 en un punto específico del tiempo basada en las mejores prácticas de AWS y puede ayudar a identificar rápidamente cualquier área de riesgo potencial en el entorno implementado del cliente. Si está interesado en realizar estas evaluaciones de forma continua, AWS recomienda habilitar el estándar de Prácticas recomendadas 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== en 2-sat2-codebuild-prowler.yaml.

📕 Para obtener instrucciones paso a paso más detalladas, visite el módulo 2 en el SHIP Workshop.

Tabla de Contenidos

Descripción general

La solución se implementa con AWS CloudFormation. Cuando se implementa, 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 extensos o para escanear múltiples cuentas. El proceso de implementación tarda menos de 5 minutos en completarse. Las plantillas de AWS CloudFormation de la solución se proporcionan para revisión en este repositorio de Github.

Una vez que la plantilla está implementada, 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á dependiendo del número de recursos y las opciones de escaneo seleccionadas. Al final de las evaluaciones, los informes se entregan al bucket de S3 creado.

diagrama de arquitectura

Parámetros

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ámetroDescripciónMás información
ProwlerScanTypeEspecifique qué tipo de escaneo realizar. Seleccionar full sin especificar diferentes ProwlerOptions realizará un escaneo completo. Para realizar una verificación específica, elija Full y agregue -c a ProwlerOptions.Tipos de escaneo
MultiAccountScanEstablezca esto en true si desea escanear todas las cuentas de su organización. Debe haber implementado la plantilla de requisito previo para aprovisionar un rol, o especificar un ProwlerRole diferente con los permisos apropiados.Escaneo de múltiples cuentas
ReportingEstablezca esto en true si desea resumir los informes de Prowler en un solo csv. Esto es útil al escanear múltiples cuentas.Resumen de informes
EmailAddressEspecifique una dirección si desea recibir un correo electrónico cuando se complete la evaluación.Notificaciones
Parámetros avanzados
ConcurrentAccountScansPara 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 incurrir en costos adicionales.
CodeBuildTimeoutEstablezca el tiempo de espera para el trabajo de CodeBuild. El valor predeterminado es 300 minutos (5 horas).
MultiAccountListOverrideEspecifique una lista de cuentas separadas por espacios para escanear. Dejar esto en blanco escaneará todas las cuentas de su organización. Asegúrese de haber establecido el parámetro MultiAccountScan en true si desea escanear cuentas específicas. Si no puede proporcionar acceso delegado de ListAccount, puede proporcionar el parámetro MultiAccountListOverride.Escaneo de múltiples cuentas
ProwlerOptionsEspecifique 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 usar para especificar una sola verificación.Escaneo completo
ProwlerRoleEl rol que Prowler debe asumir para realizar el escaneo. Cámbielo si desea especificar su propio rol con diferentes permisos.

Implementación

Puede usar 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.

Tipo de implementaciónAWS CloudShellConsola de AWS
Cuenta únicaEnlaceEnlace
Múltiples cuentasEnlaceEnlace

Escaneo de cuenta única

Para ejecutar la solución de Evaluación de Seguridad de Autoservicio (SATv2) contra una sola cuenta, siga las instrucciones a continuación. Puede elegir usar la AWS CLI o la Consola de AWS.

AWS CloudShell

Mostrar pasos

Implementar la solución

  1. Inicie sesión en su cuenta de AWS.

  2. En la barra de navegación, elija AWS CloudShell.

  3. 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
    
  4. Para crear un bucket de S3 para almacenar la plantilla, ingrese los siguientes comandos. La plantilla es más grande que 51,200 bytes, por lo que CloudFormation requiere que se cargue a 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
    
  5. Para implementar la plantilla de CloudFormation, ingrese el siguiente comando. La opción --s3-bucket carga la plantilla al 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
    
  6. Después de que se cree la pila, puede eliminar el bucket de almacenamiento temporal. Solo se usa para entregar la plantilla a CloudFormation.

    aws s3 rb s3://$TEMPLATE_BUCKET --force
    

Consola de AWS

Mostrar pasos

Implementar la solución

  1. Descargue la plantilla de CloudFormation 2-sat2-codebuild-prowler.yaml.
  2. Navegue a la consola de AWS CloudFormation.
  3. En el panel de navegación, elija Stacks.
  4. Elija Create stack.
  5. En Specify template, seleccione Upload a template file.
  6. Elija 2-sat2-codebuild-prowler.yaml que descargó en el paso 1.
  7. Elija Next.
  8. Para Stack name, ingrese sat2.
  9. Elija Next.
  10. En la página Configure stack options, elija Next.
  11. En la página Review SAS, seleccione la casilla I acknowledge that AWS CloudFormation might create IAM resources. y elija Submit.

Escaneo de múltiples cuentas

La solución de Evaluación de Seguridad de Autoservicio (SAT) también admite escaneos de múltiples cuentas. Debe implementar un rol de requisito previo en cada cuenta en la que desee realizar el escaneo. Para ejecutar SATv2 para múltiples cuentas, siga las instrucciones a continuación. Puede elegir usar la AWS CLI o la Consola de AWS.

Estas instrucciones asumen que ya tiene los requisitos previos para las operaciones de StackSets. 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, implemente el 1-sat2-member-role como una pila de CloudFormation.

AWS CloudShell

Mostrar pasos

Paso 1: Implementar el rol de requisito previo

  1. Inicie sesión en su cuenta de administración de AWS.

  2. En la barra de navegación, elija AWS CloudShell.

  3. Identifique desde qué cuenta ejecutará el escaneo de Prowler. Los clientes suelen usar una cuenta de herramientas de seguridad o una cuenta de auditoría. Tome nota del ID de la cuenta para el parámetro ProwlerAccountID.

  4. 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
    
  5. Implemente la plantilla de CloudFormation mediante CloudFormation StackSets. Actualice los siguientes parámetros:

    • Reemplace <aws-account-id> con el ID de la cuenta desde la que ejecutará Prowler.
    • Reemplace <region> con la Región donde desea implementar la plantilla.
    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>
    
  6. Use 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>
    
  7. 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 necesitará usar un administrador delegado.

    7a. Su cuenta de Prowler podría ya tener una delegación. Puede usar los siguientes comandos para verificar:

    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 verificar:

    aws organizations describe-resource-policy
    
  8. Si no tiene un administrador delegado o una política de recursos, puede usar los siguientes comandos para agregar el acceso apropiado.

    Nota: Si no puede proporcionar acceso delegado de ListAccount, puede proporcionar el parámetro MultiAccountListOverride en la plantilla 2-sat2-codebuild-prowler.

    Nota: Si está usando GovCloud, use el paso 8a para crear un administrador delegado. Si está usando una región comercial, use el paso 8b para proporcionar acceso de privilegio mínimo 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: ListParents y DescribeOrganizationalUnit son lo que completa las columnas account_ou_uid y account_ou_name en los hallazgos. Si las omite, el resto del escaneo sigue funcionando, pero esas dos columnas vuelven vacías.

Paso 2: Implementar la solución SATv2

Nota: Asegúrese de haber cambiado a la cuenta que especificó que ejecutará Prowler.

  1. 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
    
  2. Para crear un bucket de S3 para almacenar la plantilla, ingrese los siguientes comandos. La plantilla es más grande que 51,200 bytes, por lo que CloudFormation requiere que se cargue a 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
    
  3. Para implementar 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 al 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
    
  4. Después de que se cree la pila, puede eliminar el bucket de almacenamiento temporal. Solo se usa para entregar la plantilla a CloudFormation.

    aws s3 rb s3://$TEMPLATE_BUCKET --force
    

Consola de AWS

Mostrar pasos

Paso 1: Implementar el rol de requisito previo

  1. Descargue los archivos 1-sat2-member-roles.yaml y 2-sat2-codebuild-prowler.yaml.

  2. Implemente la plantilla de CloudFormation mediante CloudFormation StackSets. Actualice los siguientes parámetros:

    • Reemplace <aws-account-id> con el ID de la cuenta desde la que ejecutará Prowler.
    • Reemplace <region> con la Región donde desea implementar la plantilla.3. Navega a la consola de AWS CloudFormation.
  3. En el panel de navegación, elige StackSets.

  4. Elige Create StackSet.

  5. En Permissions, deja seleccionada la opción Service-managed permissions.

  6. En Specify template, selecciona Upload a template file.

  7. Elige 1-sat2-member-roles.yaml que descargaste en el paso 1-1.

  8. Elige Next.

  9. En Stack name, introduce sat2-member-role.

  10. En Parameters, introduce lo siguiente:

    • ProwlerAccountID - El ID de cuenta desde la que ejecutarás Prowler.
  11. Elige Next.

  12. En la página Configure StackSet options, elige Next.

  13. En Set deployment options, introduce lo siguiente:

    1. En Deployment targets, deja seleccionada la opción Deploy to organization.
    2. En Specify regions, elige us-east-1.
    3. En Region Concurrency, elige Parallel.
  14. Elige Next.

  15. En la página Review, marca la casilla I acknowledge that AWS CloudFormation might create IAM resources. y elige Submit.

Paso 2: Habilitar administrador delegado para AWS Organizations

Determina si ya existe un administrador delegado o una política de recursos para la cuenta en la que deseas implementar Prowler. Se recomienda ejecutar Prowler desde tu cuenta de herramientas de seguridad (Audit). Para actualizar o verificar que la cuenta de auditoría tiene permisos para ListAccounts, sigue estos pasos.

  1. Navega a la consola de AWS Organization.

  2. En el panel de navegación, elige Settings.

  3. Para Delegated administrator for AWS Organizations, incluye 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: ListParents y DescribeOrganizationalUnit son los que completan las columnas account_ou_uid y account_ou_name en los hallazgos. Si los omites, el resto del escaneo sigue funcionando, pero esas dos columnas se devuelven vacías.

Paso 3: Implementar la solución SATv2

  1. Navega a la consola de AWS CloudFormation en la cuenta desde la que ejecutarás la herramienta (ProwlerAccountID).

  2. En el panel de navegación, elige Stacks.

  3. Elige Create stack.

  4. En Specify template, selecciona Upload a template file.

  5. Elige 2-sat2-codebuild-prowler.yaml que descargaste en el paso 1-1.

  6. Elige Next.

  7. En Stack name, introduce sat2-prowler.

  8. En la sección Parameters, para MultiAccountScan, selecciona true.

  9. Opcionalmente, puedes habilitar los informes para obtener un resumen de todas las cuentas en un único archivo csv. Para Reporting, selecciona true.

  10. Elige Next.

  11. En la página Configure stack options, elige Next.

  12. En la página Review SAS, marca la casilla I acknowledge that AWS CloudFormation might create IAM resources. y elige Submit.

Revisar los resultados

Después de implementar la solución, una función Lambda inicia el proyecto CodeBuild. Cuando el proyecto CodeBuild termina de compilar, los resultados de Prowler se cargan en el bucket de Amazon S3 creado. Si configuraste notificaciones, recibirás un correo electrónico cuando el escaneo de Prowler esté completo. Si configuraste informes, tendrás un archivo csv consolidado en la carpeta /reports.

Si no configuraste alertas por correo electrónico, puedes supervisar el progreso desde la consola de CodeBuild.

Para revisar los resultados, sigue estos pasos.

  1. Navega a la consola de Amazon S3 en la cuenta donde implementaste Prowler.

  2. Selecciona el bucket que comienza con sat2-prowler-prowlerfindingsbucket-

  3. Elige la carpeta del formato de salida que desees y, a continuación, las carpetas scan_date= y scan_time= de la ejecución que quieras 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 en la que comenzó el escaneo:

    csv/scan_date=2026-09-01/scan_time=204955/         Hallazgos CSV de Prowler, tal como se escriben
    html/scan_date=2026-09-01/scan_time=204955/        Informes HTML por cuenta
    json/scan_date=2026-09-01/scan_time=204955/        JSON por cuenta
    ocsf-json/scan_date=2026-09-01/scan_time=204955/   JSON OCSF por cuenta
    parquet/scan_date=2026-09-01/scan_time=204955/     La copia que consulta Athena
    compliance/scan_date=2026-09-01/scan_time=204955/  CSV de cumplimiento, cuando se generan
    reports/                                           CSV consolidado y panel de control
    

    Cada ejecución tiene su propia carpeta, por lo que volver a ejecutar la solución nunca mezcla hallazgos nuevos con los antiguos, incluso si la ejecutas más de una vez el mismo día. Las ejecuciones anteriores se conservan para que puedas compararlas.

  4. Para cada cuenta, habrá 4 tipos de archivo (csv, html, json, json-ocsf) con el formato prowler-output-<aws-account-id>-<datetime>.

  5. Selecciona uno de los objetos html.

  6. Elige Open.

    Prowler Output

  7. Se abrirá una nueva ventana con tu informe. Puedes usar los filtros para identificar y priorizar los hallazgos.

    Prowler findings

Panel de control SATv2 (recomendado)

Si habilitaste los informes, habrá un panel de control html estático en la carpeta de informes.

  1. Selecciona el objeto satv2-dashboard.html y elige Open.
  2. Selecciona el csv consolidado, elige Actions, Share with a presigned URL.

    Nota: No compartas tu URL prefirmada con nadie. Una URL prefirmada utiliza credenciales de seguridad para otorgar permisos de descarga de objetos limitados en el tiempo. La URL se puede introducir en un navegador o ser utilizada por 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, consulta Sharing objects with presigned URLs.

  3. En number of minutes, introduce 1.
  4. Pega la URL en la página satv2-dashboard.html.
  5. Revisa un ejemplo de salida del panel de control en img/satv2-dashboard.png

Panel de control de Prowler

Prowler tiene un panel de control integrado para revisar los resultados. Para usar el panel de control de Prowler, Prowler debe estar instalado localmente y debes descargar los resultados de Prowler localmente.

Debes tener la interfaz de línea de comandos (CLI) de AWS y credenciales válidas. Para obtener más información, consulta la guía del usuario de la interfaz de línea de comandos de AWS.

  1. Instala Prowler. Para obtener más información, consulta las instrucciones de instalación de Prowler.

    pip install prowler
    
  2. Obtén el nombre del bucket de Amazon S3. El nombre del bucket está en la consola de CloudFormation como recurso ProwlerFindingsBucket. Alternativamente, navega a la consola de S3 y busca un bucket con el formato {stack_name}-prowlerfindingsbucket-{ID}

  3. Descarga los CSV y los datos de cumplimiento desde S3. Si no ejecutaste un escaneo completo, es posible que no tengas datos de cumplimiento. Reemplaza {bucket_name} con el nombre de tu bucket, y {scan_date} y {scan_time} con la ejecución que quieras cargar, por ejemplo 2026-09-01 y 204955. Para listar las ejecuciones disponibles, usa 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: Sincroniza una ejecución a la vez. El panel de control de Prowler lee output/*.csv y no busca en subcarpetas, por lo que copiar las carpetas scan_date= en output/ producirá un panel de control vacío. Cargar dos ejecuciones a la vez mostraría cada hallazgo dos veces.

  4. Ejecuta el panel de control. Usa el siguiente comando para ejecutar el panel de control. De forma predeterminada, se iniciará en http://127.0.0.1:11666/.

    prowler dashboard
    

Tipos de escaneo

De forma predeterminada, SAT2 ejecutará un escaneo básico que incluye 13 comprobaciones. Puedes elegir ejecutar una comprobación intermedia o completa seleccionando un valor diferente para el parámetro ProwlerScanType.

Por ejemplo, un escaneo de una sola cuenta con 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 preparación creado en los pasos de implementación 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 más recientes, ejecuta el comando `prowler aws --list-checks`. A continuación se muestra un ejemplo para cada nivel de comprobación.

### Escaneo básico
Para ver una lista de comprobaciones, revisa [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.
- Encontrar runtimes de Lambda obsoletos.
- Asegurar que CloudTrail esté habilitado en todas las regiones.
- Asegurar que AWS Config esté habilitado en todas las regiones.
- Asegurar que ningún grupo de seguridad permita tráfico entrante desde 0.0.0.0/0 o ::/0 a cualquier puerto.
- Comprobar si GuardDuty está habilitado.
- Asegurar que la política de contraseñas de IAM requiera al menos una letra minúscula.
- Asegurar que la política de contraseñas de IAM requiera al menos un número.
- Asegurar que la política de contraseñas de IAM requiera al menos un símbolo.
- Asegurar que la política de contraseñas de IAM requiera al menos una letra mayúscula.
- Asegurar que MFA esté habilitado para la cuenta raíz.
- Asegurar que las claves de acceso se roten cada 90 días o menos.
- Asegurar que no haya buckets de S3 abiertos a Todos o a cualquier usuario de AWS.

### Escaneo intermedio
Para ver una lista de comprobaciones, revisa [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 selección, Prowler ejecutará todas las comprobaciones de seguridad que resulten en severidad crítica o alta.

### Escaneo completo
Para ver una lista de comprobaciones, revisa [comprobaciones completas](https://github.com/awslabs/aws-security-assessment-solution/blob/main/checks/full_checks.txt).

Esta opción no añade parámetros adicionales al escaneo de Prowler. Hará que Prowler ejecute más de 500 comprobaciones.

También puedes usar el escaneo completo para personalizar el escaneo como prefieras.

Para **ProwlerScanType**, elige **Full**.

Para **ProwlerOptions**, añade la comprobación. Por ejemplo, para comprobar solo si GuardDuty está habilitado, introduce:

`aws --ignore-exit-code-3 -c guardduty_is_enabled`

## Notificaciones

Opcionalmente, puedes especificar una dirección de correo electrónico en el parámetro EmailAddress al implementar la plantilla de CloudFormation. Esto creará un tema de SNS y enviará un correo electrónico cuando el trabajo de CodeBuild finalice.

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 [email protected]

Con o sin el parámetro opcional EmailAddress configurado, puedes ver el progreso en la consola de CodeBuild.

  1. Navega a la consola de CodeBuild.

  2. En el panel de navegación, bajo Build, elige Build projects.

  3. Elige el proyecto de Build que comienza con ProwlerCodeBuild-.

  4. En Build history, verás la última ejecución.

    Proyecto de CodeBuild

  5. Opcionalmente, puedes elegir Start build para ejecutar otro escaneo con las opciones que elijas al implementar la solución.

Resumen de informes

Opcionalmente, puedes habilitar los informes para resumir múltiples resultados de escaneo de Prowler en un solo archivo. Esto puede ser útil al ejecutar Prowler en varias cuentas dentro de una organización de AWS. La función de resumen de informes está desactivada por defecto. Para habilitarla, configura el parámetro Reporting en true al implementar 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 cuando la consulta de Athena haya finalizado.

Cómo se construye la tabla de Athena

Athena consulta la copia de 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 sus metadatos de verificación, por lo que los campos DESCRIPTION, RISK y REMEDIATION_* contienen saltos de línea. Prowler cita 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 usa saltos de línea como delimitadores de registros, por lo que el texto se conserva intacto. Parquet también comprime en gran medida el texto repetido de remediación, lo que abarata las consultas: un conjunto de CSVs 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 CSV existente 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 cuenta hallazgos dos veces, 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, con una fila por ejecución.

Particionar solo por 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 un recurso fue eliminado, una cuenta dejó la organización, un rol de miembro dejó de funcionar o el tipo de escaneo se redujo, 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 un crawler que programar ni nada que añadir manualmente.

Si escribes tus propias consultas de Athena, restringe las a una sola ejecución o agregarás todos los escaneos del bucket a la vez. Ambas claves tienen 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 en todas sus ejecuciones, filtra únicamente por `scan_date`.

>Nota: Si estás actualizando un despliegue que usaba el diseño anterior solo con `scan_date`, los resultados anteriores a la actualización no son visibles en la nueva tabla, porque sus rutas S3 no tienen el nivel `scan_time=`. Los datos permanecen intactos en S3. Puedes dejar que el siguiente escaneo repueble la tabla, o mover los archivos antiguos a una carpeta `scan_time=`, por ejemplo `aws s3 mv s3://{bucket_name}/parquet/scan_date={scan_date}/ s3://{bucket_name}/parquet/scan_date={scan_date}/scan_time=000000/ --recursive`, y luego ejecutar `MSCK REPAIR TABLE prowler` en 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 [email protected]

diagrama de arquitectura de informes

Se crean dos consultas guardadas como ejemplos:

Consulta guardadaQué muestra
Resumen de la organización ProwlerComprobaciones fallidas en cada cuenta evaluada, para el escaneo más reciente.
Tendencia de escaneo de ProwlerComprobaciones fallidas por fecha de escaneo y gravedad, 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 Consultas guardadas.

  4. Seleccione la consulta que desea ejecutar eligiendo el ID.

    Consulta guardada de Athena

  5. Elija Ejecutar para ejecutar la consulta.

    Resultados de consulta guardada de Athena

Preguntas frecuentes (FAQ)

  1. ¿Tiene algún costo?
    • Esta solución está diseñada para ejecutarse dentro del Nivel gratuito de AWS.
    • Para Amazon CodeBuild, los clientes obtienen 100 minutos de compilación al mes.
    • Para los clientes que ya han superado el nivel gratuito con CodeBuild, S3 y Lambda, esta solución cuesta menos de $1 por ejecución.
  2. ¿Es una herramienta de monitoreo e informes continuos?
    • No. Esta es una evaluación única; recomendamos que los clientes usen AWS Security Hub para evaluaciones continuas.
  3. ¿Se integra con GuardDuty, Security Hub, CloudWatch, etc.?
    • No. Puede seguir las instrucciones de este blog para integrar Prowler y Security Hub.
  4. ¿Cómo soluciono los problemas de los informes?
    • En general, los problemas deben estar descritos en el informe con correcciones fácilmente identificables. Consulte también la documentación pública de cada herramienta (Prowler). Si esto no es suficiente, comuníquese con su equipo de cuenta de AWS o con el Soporte de AWS para que le ayuden a comprender los informes y trabajar en la corrección de los problemas.
  5. ¿Qué hallazgos reporta Prowler para SATv2?
    VerificaciónMitigación
    Verificar si las operaciones de API invocadas por funciones Lambda se registran en CloudTrail.CloudTrail es una configuración a nivel de cuenta de AWS. CloudTrail debe estar habilitado independientemente de SATv2.
    Habilitar la protección contra terminación para pilas de CloudFormationSATv2 está diseñado para ejecutarse en un momento puntual y luego eliminarse. Si la pila se termina, los hallazgos se conservan en el bucket de S3.
    Verificar si los grupos de registros de CloudWatch están protegidos por AWS KMS.Los datos de los grupos de registros siempre están cifrados en CloudWatch Logs. De forma predeterminada, CloudWatch Logs utiliza cifrado del lado del servidor para los datos de registro en reposo. No se configura una clave KMS administrada por el cliente para ahorrar costos.
    Verificar si los grupos de registros de CloudWatch tienen una política de retención de días específicos.La retención de los grupos de registros se establece en 7 días por diseño. Esta verificación busca grupos de registros con retención inferior a un año.
    Verificar si los buckets de S3 tienen cifrado KMS habilitado.Todos los buckets de Amazon S3 tienen cifrado configurado de forma predeterminada, y los objetos se cifran automáticamente mediante 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.
    Verificar si la eliminación con MFA no está habilitada en los buckets de S3.Los resultados de la evaluación de Prowler se pueden regenerar y no requieren eliminación con MFA.
    Verificar si los buckets de S3 tienen bloqueo de objetos habilitadoLos resultados de la evaluación de Prowler se pueden regenerar y no requieren bloqueo de objetos de S3.
    Verificar si los buckets de S3 tienen registro de acceso al servidor habilitadoLos resultados de la evaluación de Prowler no requieren registro de acceso al servidor.

Limpieza

Después de ejecutar la solución, debe eliminar las pilas de CloudFormation para quitar los recursos que ya no se necesitan. 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 en la cuenta desde la que ejecutó la herramienta (ProwlerAccountID).

  2. En el panel de navegación, elija Pilas.

  3. Elija la pila sat2-prowler.

  4. Elija Eliminar.

Si implementó el StackSet de roles de miembro para escanear varias cuentas, siga estos pasos.

  1. Navegue a la consola de AWS CloudFormation en la cuenta donde creó el StackSet de roles de miembro.

  2. En el panel de navegación, elija StackSets.

  3. Elija el StackSet sat2-member-roles.

  4. Elija Acciones y luego Eliminar pilas del StackSet.

  5. Especifique el mismo ID de OU de AWS que usó al crear el StackSet.

  6. Para Especificar regiones, elija Agregar todas las regiones.

  7. Elija Siguiente y Enviar.

Una vez que el cambio finalice, puede eliminar el StackSet.

  1. Elija el StackSet sat2-member-roles.

  2. Elija Acciones y luego Eliminar 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 para eliminar los objetos y el bucket. Si vuelve a ejecutar la solución, se creará un nuevo bucket de S3 para sus resultados.

Seguridad

Consulte CONTRIBUTING para obtener más información.

Licencia

Este proyecto está licenciado bajo la Licencia Apache-2.0.

Categorías