Integración bidireccional de AWS Security Hub con el software Jira - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Integración bidireccional de AWS Security Hub con el software Jira

Creado por Joaquín Manuel Rinaudo (AWS)

Repositorio de código: Integración de Security Hub a JIRA

Entorno: PoC o piloto

Tecnologías: seguridad, identidad, conformidad

Carga de trabajo: todas las demás cargas de trabajo

Servicios de AWS: AWS Lambda; AWS Security Hub; Amazon CloudWatch

Resumen

Esta solución crea una integración bidireccional entre AWS Security Hub y Jira. Esta solución le permite crear y actualizar de forma automática y manual los tickets de JIRA a partir de los resultados de Security Hub. Los equipos de seguridad pueden usar esta integración para notificar a los equipos de desarrollo cualquier resultado grave en materia de seguridad que requiera la adopción de medidas.

La solución le permite:

  • Seleccionar qué controles de Security Hub crean o actualizan automáticamente tickets en Jira.

  • En la consola de Security Hub, usar las acciones personalizadas de Security Hub para escalar tickets manualmente en Jira.

  • Asignar automáticamente tickets en Jira en función de las etiquetas de cuentas de AWS definidas en AWS Organizations. Si esta etiqueta no está definida, se asignan de forma predeterminada.

  • Eliminar automáticamente los resultados de Security Hub que estén marcados como falsos positivos o riesgos aceptados en Jira.

  • Cerrar automáticamente un ticket de Jira cuando su resultado relacionado esté archivado en Security Hub.

  • Reabrir tickets de Jira cuando se repitan resultados de Security Hub.

Flujo de trabajo de Jira

La solución emplea un flujo de trabajo de Jira personalizado que permite a los desarrolladores gestionar y documentar los riesgos. A medida que el problema avanza en el flujo de trabajo, la integración bidireccional garantiza que el estado del ticket de Jira y el resultado de Security Hub se mantengan sincronizados en todos los flujos de trabajo de ambos servicios. Este flujo de trabajo es un derivado de SecDevOps Risk Workflow de Dinis Cruz, con licencia CC BY 4.0. Recomendamos añadir una condición de flujo de trabajo de Jira para que solo los miembros de su equipo de seguridad puedan cambiar el estado del ticket.

Diagrama de flujo de trabajo de un problema de Jira. Puede solucionar el problema, aceptar el riesgo o marcarlo como falso positivo.

Para ver un ejemplo de ticket de Jira generado automáticamente por esta solución, consulte la sección de Información adicional de este patrón.

Requisitos previos y limitaciones

Requisitos previos 

  • Si desea implementar esta solución en un entorno de AWS con múltiples cuentas:

    • Su entorno de múltiples cuentas está activo y gestionado por AWS Organizations.

    • Security Hub está activado en sus cuentas de AWS.

    • En AWS Organizations, ha designado una cuenta de administrador de Security Hub.

    • Tiene un rol de IAM multicuenta con permisos AWSOrganizationsReadOnlyAccess para la cuenta de administración de AWS Organizations.

    • (Opcional) Ha etiquetado sus cuentas de AWS con SecurityContactID. Esta etiqueta se usa para asignar tickets de Jira a los contactos de seguridad definidos.

  • Si desea implementar esta solución en una sola cuenta de AWS:

    • Dispone de una cuenta de AWS activa.

    • Security Hub está activado en sus cuentas de AWS.

  • Una instancia de Jira Server

    Importante: esta solución es compatible con el uso de Jira Cloud. Sin embargo, Jira Cloud no admite la importación de flujos de trabajo XML, por lo que deberá volver a crear el flujo de trabajo manualmente en Jira.

  • Permisos de administrador en Jira

  • Uno de los siguientes tokens de Jira:

    • Para Jira Enterprise, un token de acceso personal (PAT). Para obtener más información, consulte Uso de tokens de acceso personal (soporte de Atlassian).

    • Para Jira Cloud, un token de la API de Jira. Para obtener más información, consulte Gestionar tokens de API (soporte de Atlassian).

Arquitectura

Esta sección ilustra la arquitectura de la solución en distintos escenarios, por ejemplo, cuando el desarrollador y el ingeniero de seguridad deciden aceptar el riesgo o deciden solucionar el problema.

Escenario 1: el desarrollador aborda el problema

  1. Security Hub genera un resultado relacionado con un control de seguridad específico, como los del estándar de prácticas recomendadas de AWS Foundational Security.

  2. Un CloudWatch evento de Amazon asociado al hallazgo y a la CreateJIRA acción inicia una función de AWS Lambda.

  3. La función de Lambda usa su archivo de configuración y el campo GeneratorId del resultado para evaluar el escalado del resultado.

  4. La función de Lambda determina que el resultado debe escalarse y obtiene la etiqueta de cuenta SecurityContactID de AWS Organizations en la cuenta de administración de AWS. Esta ID está asociada al desarrollador y se usa como ID de asignación del ticket de Jira.

  5. La función de Lambda usa las credenciales almacenadas en AWS Secrets Manager para crear un ticket en Jira. Jira notifica al desarrollador.

  6. El desarrollador aborda el problema de seguridad subyacente en el resultado y, en Jira, cambia el estado del ticket a TEST FIX.

  7. Security Hub actualiza el resultado como ARCHIVED y se genera un nuevo evento. Este evento hace que la función de Lambda cierre automáticamente el ticket de Jira.

Diagrama de arquitectura que muestra la integración de Jira y Security Hub cuando un desarrollador soluciona un problema.

Escenario 2: el desarrollador decide aceptar el riesgo

  1. Security Hub genera un resultado relacionado con un control de seguridad específico, como los del estándar de prácticas recomendadas de AWS Foundational Security.

  2. Un CloudWatch evento asociado al hallazgo y a la CreateJIRA acción inicia una función Lambda.

  3. La función de Lambda usa su archivo de configuración y el campo GeneratorId del resultado para evaluar el escalado del resultado.

  4. La función de Lambda determina que el resultado debe escalarse y obtiene la etiqueta de cuenta SecurityContactID de AWS Organizations en la cuenta de administración de AWS. Esta ID está asociada al desarrollador y se usa como ID de asignación del ticket de Jira.

  5. La función de Lambda usa las credenciales almacenadas en AWS Secrets Manager para crear un ticket en Jira. Jira notifica al desarrollador.

  6. El desarrollador decide aceptar el riesgo y, en Jira, cambia el estado del ticket a AWAITING RISK ACCEPTANCE.

  7. El ingeniero de seguridad revisa la solicitud y considera que la justificación empresarial es adecuada. El ingeniero de seguridad cambia el estado del ticket de Jira a ACCEPTED RISK. El ticket de Jira se cierra.

  8. Un evento CloudWatch diario inicia la función Lambda de actualización, que identifica los tickets de JIRA cerrados y actualiza los hallazgos relacionados con Security Hub como. SUPPRESSED

Un diagrama de arquitectura que muestra la integración de Jira y Security Hub cuando un desarrollador acepta el riesgo de un resultado.

Herramientas

  • AWS le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.

  • Amazon CloudWatch Events le ayuda a supervisar los eventos del sistema para sus recursos de AWS mediante el uso de reglas para hacer coincidir los eventos y dirigirlos a funciones o transmisiones.

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • AWS Organizations es un servicio de administración de cuentas que le permite agrupar varias cuentas de AWS en una organización que usted crea y administra de manera centralizada.

  • AWS Secrets Manager le permite reemplazar las credenciales codificadas en el código, incluidas las contraseñas, con una llamada a la API de Secrets Manager para recuperar el secreto mediante programación.

  • AWS Security Hub proporciona una visión completa de su estado de seguridad en AWS. También le permite comprobar si su entorno de AWS cumple con los estándares y las prácticas recomendadas del sector de seguridad.

Repositorio de código

El código de este patrón está disponible en GitHub el repositorio aws-securityhub-jira-software-integration. Incluye el código de muestra y el flujo de trabajo de Jira para esta solución.

Epics

TareaDescripciónHabilidades requeridas

Importe el flujo de trabajo.

Como administrador de Jira, importe el archivo issue-workflow.xml a su instancia de Jira Server. Este archivo se encuentra en el repositorio aws-securityhub-jira-software-integration de. GitHub Para obtener más instrucciones, consulte Usar XML para crear un flujo de trabajo (documentación de Jira).

Administrador de Jira

Active y asigne el flujo de trabajo.

Los flujos de trabajo estarán inactivos hasta que los asigne a un esquema de flujo de trabajo. A continuación, asigne el esquema de flujo de trabajo a un proyecto.

  1. En su proyecto, asegúrese de haber identificado un esquema de tipo de problema para el proyecto. Puede crear un nuevo tipo de problema o seleccionar uno existente, como Bug.

  2. Asigne el flujo de trabajo importado a un esquema de flujo de trabajo siguiendo las instrucciones de Activar un flujo de trabajo (documentación de Jira).

  3. Asigne el esquema de flujo de trabajo a un proyecto siguiendo las instrucciones de Asociar un esquema de flujo de trabajo a un proyecto (documentación de Jira).

Administrador de Jira
TareaDescripciónHabilidades requeridas

Configure los parámetros de la solución.

  1. En la carpeta conf, abra params_prod.shfile.

  2. Proporcione valores para los siguientes parámetros:

    • ORG_ACCOUNT_ID – LA ID de cuenta de su cuenta de administración de AWS Organizations. La solución lee las etiquetas de las cuentas y asigna los tickets a los contactos de seguridad específicos definidos en dichas etiquetas de cuentas de AWS.

    • ORG_ROLE – El nombre del rol de IAM utilizado para acceder a la cuenta de administración de AWS Organizations. Este rol debe tener permisos de OrganizationsReadOnlyAccess.

    • EXTERNAL_ID – Un parámetro opcional si usa una ID externa para asumir el rol de IAM definido en ORG_ROLE. Para más información, consulte Cómo utilizar un ID externo (documentación de IAM).

    • JIRA_DEFAULT_ASSIGNEE – Esta es la ID de Jira a la que se asignan, de forma predeterminada, todos los problemas de seguridad. Esta asignación predeterminada se usa en caso de que la cuenta no esté etiquetada correctamente o no se pueda asumir el rol.

    • JIRA_INSTANCE – La dirección HTTPS de su servidor de Jira en el siguiente formato: team-<team-id>.atlassian.net/

    • JIRA_PROJECT_KEY – El nombre de la clave de proyecto de Jira empleada para crear los tickets, como SEC o TEST. Este proyecto ya debe existir en Jira. 

    • ISSUE_TYPE – El nombre del esquema de tipo de problema asignado al proyecto en Jira, como Bug o Security Issue.

    • REGIONS – Lista de códigos de región de AWS en los que desea implementar esta solución, por ejemplo eu-west-1.

  3. Guarde y cierre el archivo de parámetros de la solución.

Administrador de sistemas de AWS

Identifique los resultados que desea automatizar.

  1. Abra la consola de Security Hub en https://console.aws.amazon.com/securityhub/

  2. En el panel de navegación de Security Hub, elija Resultados.

  3. Seleccione el título del resultado.

  4. Seleccione el ID del resultado. Esto muestra el JSON completo del resultado.

  5. En el JSON, copie la cadena del campo GeneratorId. Este valor está en formato de resultados de seguridad de AWS (ASFF). Por ejemplo, aws-foundational-security-best-practices/v/1.0.0/S3.1 corresponde a los resultados del control de seguridad S3.1 S3 Block Public Access setting should be enabled.

  6. Repita estos pasos hasta que haya copiado todos los valores GeneratorID de los resultados que desee automatizar.

Agregue los resultados al archivo de configuración.

  1. En src/code, abra el archivo config.jsonconfig.

  2. Pegue los valores GeneratorID que recuperó anteriormente en el parámetro default, usando comas para separar cada ID.

  3. Guarde y cierre el archivo de configuración.

En el siguiente ejemplo de código se muestra la automatización de los resultados aws-foundational-security-best-practices/v/1.0.0/SNS.1 y aws-foundational-security-best-practices/v/1.0.0/S3.1.

{     "Controls" : {         "eu-west-1": [          "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0/rule/1.22"       ],         "default": [ aws-foundational-security-best-practices/v/1.0.0/SNS.1, aws-foundational-security-best-practices/v/1.0.0/S3.1      ]     }   }

Nota: Puede automatizar diferentes resultados para cada región de AWS. Una práctica recomendada para evitar la duplicación de resultados es seleccionar una sola región para automatizar la creación de controles relacionados con IAM.

Administrador de sistemas de AWS
TareaDescripciónHabilidades requeridas

Implemente la integración.

En un terminal con línea de comandos, escriba el siguiente comando:

./deploy.sh prod
Administrador de sistemas de AWS

Cargar credenciales de Jira en AWS Secrets Manager.

  1. Abra la consola de Secrets Manager en https://console.aws.amazon.com/secretsmanager/.

  2. En Secretos, elija Almacenar un secreto nuevo.

  3. En Secret type (Tipo de secreto), elija Other type of secret (Otro tipo de secreto).

  4. Si usa Jira Enterprise, en los pares clave/valor, haga lo siguiente:

    • En la primera fila, introduzca auth en el cuadro de claves y, a continuación, introduzca token_auth en el cuadro de valores.

    • Añada una segunda fila, introduzca token en el cuadro de claves y, a continuación, introduzca su token de acceso personal en el cuadro de valores.

    Si usa la nube Jira Cloud, para los Pares de claves/valores, haga lo siguiente:

    • En la primera fila, introduzca auth en el cuadro de claves y, a continuación, introduzca basic_auth en el cuadro de valores.

    • Añada una segunda fila, introduzca token en el cuadro de claves y, a continuación, introduzca su token de API en el cuadro de valores.

    • Añada una tercera fila, introduzca email en el cuadro de claves y, a continuación, escriba su dirección de correo electrónico en el cuadro de valores.

  5. Elija Siguiente.

  6. En Nombre del secreto, ingrese Jira-Token y, a continuación, en la parte inferior de la página, elija Siguiente.

  7. En la página Rotación del secreto, mantenga Cómo desactivar la rotación automática y, a continuación, en la parte inferior de la página, elija Siguiente.

  8. En la página Revisar, revise los detalles del secreto y, luego, elija Almacenar.

Administrador de sistemas de AWS

Cree la acción personalizada Security Hub.

  1. Para cada región de AWS, en la interfaz de línea de comandos de AWS (AWS CLI), utilice create-action-targetel comando para crear una acción CreateJiraIssue personalizada de Security Hub denominada.

    aws securityhub create-action-target --name "CreateJiraIssue" \  --description "Create ticket in JIRA" \  --id "CreateJiraIssue" --region $<aws-region>
  2. Abra la consola de Security Hub en https://console.aws.amazon.com/securityhub/.

  3. En el panel de navegación de Security Hub, elija Resultados.

  4. En la lista de resultados, seleccione aquellos que desee escalar.

  5. En el menú Acciones, elija CreateJiraIssue.

Administrador de sistemas de AWS

Recursos relacionados

Información adicional

Ejemplo de un ticket de Jira

Cuando se produce un resultado específico de Security Hub, esta solución crea automáticamente un ticket de Jira. El ticket contiene la información siguiente:

  • Título: el título identifica el problema de seguridad en el siguiente formato:

    AWS Security Issue :: <AWS account ID> :: <Security Hub finding title>
  • Descripción: la sección de descripción del ticket indica el control de seguridad asociado al resultado, incluye un enlace al resultado en la consola de Security Hub y proporciona una breve descripción de cómo gestionar el problema de seguridad en el flujo de trabajo de Jira.

El siguiente es un ejemplo de ticket de Jira generado de manera automática.

Title (Título)

Problema de seguridad de AWS :: 012345678912 :: Lambda.1 Lambda function policies should prohibit public access.

Descripción

¿Cuál es el problema? Hemos detectado un resultado de seguridad en la cuenta de AWS 012345678912 de la que es responsable.

Este control comprueba si la política de funciones de AWS Lambda adjuntada al recurso Lambda prohíbe el acceso público. Si la política de función de Lambda permite el acceso público, se produce un error en el control.

<Enlace a resultado de Security Hub>

¿Qué debo hacer con el ticket?

  • Acceda a la cuenta y verifique la configuración. Confirme que está trabajando en el ticket moviéndolo a “Asignado para solucionar”. Una vez solucionado, páselo a solución de prueba para que el equipo de seguridad valide la resolución el problema.

  • Si cree que se debe aceptar el riesgo, muévalo a “Esperando aceptación del riesgo”. Esto requerirá la revisión de un ingeniero de seguridad.

  • Si cree que es un falso positivo, cámbielo a “Marcar como falso positivo”. Un ingeniero de seguridad lo revisará y lo cerrará o reabrirá en consecuencia.