Añadir nuevas soluciones - Respuesta de seguridad automatizada en 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.

Añadir nuevas soluciones

Las soluciones se pueden añadir manualmente actualizando los archivos del manual de estrategias correspondientes o mediante programación ampliando la solución mediante construcciones de CDK, según el flujo de trabajo que prefiera.

nota

Las instrucciones que figuran a continuación aprovechan los recursos instalados por la solución como punto de partida. Por convención, la mayoría de los nombres de los recursos de la solución contienen el ASR and/or SO0111 para facilitar su localización e identificación.

Descripción general del flujo de trabajo manual

Los runbooks de Automated Security Response en AWS deben seguir la siguiente denominación estándar:

ASR- <standard> - - <version> <control>

Estándar: abreviatura del estándar de seguridad. Debe coincidir con los estándares admitidos por ASR. Debe ser uno de los siguientes valores: «CIS», «AFSBP», «PCI», «NIST» o «SC».

Versión: la versión del estándar. De nuevo, debe coincidir con la versión compatible con ASR y con la versión de los datos de búsqueda.

Control: el ID de control del control que se va a corregir. Debe coincidir con los datos de búsqueda.

  1. Cree un manual en la (s) cuenta (s) de los miembros.

  2. Cree un rol de IAM en las cuentas de los miembros.

  3. (Opcional) Cree una regla de corrección automática en la cuenta de administrador.

Paso 1. Crea un manual en la (s) cuenta (s) de los miembros

  1. Inicie sesión en la consola de AWS Systems Manager y obtenga un ejemplo de cómo encontrar JSON.

  2. Cree un manual de automatización que corrija el hallazgo. En la pestaña De mi propiedad, utilice cualquiera de los ASR- documentos de la pestaña Documentos como punto de partida.

  3. Las AWS Step Functions de la cuenta de administrador ejecutarán su manual. El runbook debe especificar la función de corrección para poder pasarla al ejecutar el runbook.

Paso 2. Cree un rol de IAM en las cuentas de los miembros

  1. Inicie sesión en la consola de AWS Identity and Access Management.

  2. Obtenga un ejemplo de las funciones SO0111 de IAM y cree una nueva. El nombre del rol debe empezar por SO0111-Remediate- - -. <standard> <version> <control> Por ejemplo, si se agrega el control 5.6 de CIS v1.2.0, el rol debe ser. SO0111-Remediate-CIS-1.2.0-5.6

  3. Con este ejemplo, cree una función con el ámbito adecuado que permita únicamente las llamadas a la API necesarias para realizar la corrección.

En este momento, su corrección está activa y disponible para su corrección automática desde la acción personalizada de ASR en AWS Security Hub.

Paso 3: (opcional) Cree una regla de corrección automática en la cuenta de administrador

La corrección automática (no «automatizada») es la ejecución inmediata de la corrección tan pronto como AWS Security Hub reciba el hallazgo. Considere detenidamente los riesgos antes de utilizar esta opción.

  1. Consulte un ejemplo de regla para el mismo estándar de seguridad en CloudWatch Events. El estándar de nomenclatura de las reglas esstandard_control_*AutoTrigger*.

  2. Copie el patrón de eventos del ejemplo que se va a utilizar.

  3. Cambia el GeneratorId valor para que coincida con el GeneratorId de tu JSON de Finding.

  4. Guarda y activa la regla.

Descripción general del flujo de trabajo de CDK

En resumen, se modificarán o agregarán los siguientes archivos del repositorio de ASR. En este ejemplo, se agregó una nueva corrección para la versión ElastiCache .2 a los manuales de estrategias de SC y AFSBP.

nota

Todas las correcciones nuevas deben añadirse al manual de estrategias de la SC, ya que en él se consolidan todas las soluciones disponibles en el ASR. Si tiene la intención de implementar solo un conjunto específico de manuales (por ejemplo, AFSBP), puede: (1) añadir la corrección únicamente a los manuales de estrategias previstos o (2) añadir la corrección a todos los manuales para los que exista en el estándar de Security Hub correspondiente, además del manual de estrategias de SC. Se recomienda utilizar la segunda opción por motivos de flexibilidad.

En este ejemplo, ElastiCache .2 se incluye en los siguientes estándares de Security Hub:

  • AFSBP

  • NIST.800-53.R5 SI-2

  • NISt.800-53.R5 SI-2 (2)

  • NIST.800-53.r5 SI-2 (4)

  • NIST.800-53.r5 SI-2 (5)

  • PCI DSS v4.0.1/6.3.3

Como, de forma predeterminada, ASR solo implementa guías para AFSBP y NIST.800-53, añadiremos esta nueva corrección a esas guías además de a las de SC.

Modify

  • source/lib/remediation-runbook-stack.ts

  • source/playbooks/AFSBP/lib/[nombre estándar] _remediations.ts

  • source/playbooks/NIST80053/lib/control_runbooks-construct.ts

  • source/playbooks/NIST80053/lib/[nombre estándar] _remediations.ts

  • source/playbooks/SC/lib/control_runbooks-construct.ts

  • source/playbooks/SC/lib/sc_remediations.ts

  • source/test/regex_registry.ts

Add

  • source/playbooks/SC/ssmdocs/SC_ .2.ts ElastiCache

  • source/playbooks/SC/ssmdocs/descriptions/ElastiCache.2.md

  • source/remediation_runbooks/EnableElastiCacheVersionUpgrades.yaml

nota

El nombre elegido para el runbook puede ser cualquier cadena, siempre que sea coherente con el resto de los cambios realizados.

  • source/playbooks/NIST80053/ssmdocs/NIST80053_2.ts ElastiCache

  • source/playbooks/AFSBP/ssmdocs/AFSBP_ ElastiCache .2.yaml

Pasos de desarrollo

  1. Cree el manual de remediación.

  2. Cree los manuales de control.

  3. Integre cada manual de control con un manual de estrategias.

  4. Cree la función de IAM de remediación e integre el manual de remediación

  5. Actualice las pruebas unitarias

Paso 1: Crear el manual de remediación

Este es el documento SSM que se utiliza para corregir los recursos. Debe incluir el AutomationAssumeRole parámetro, que es la función de IAM con permisos para ejecutar la corrección. Vea el archivo existente source/remediation_runbooks/EnableElastiCacheVersionUpgrades.yaml como referencia al crear nuevos manuales de corrección.

Todos los manuales de ejecución nuevos deben añadirse al directorio. source/remediation_runbooks/

Paso 2: Crear los manuales de control

Un manual de control es un manual específico de un manual de estrategias que analiza los datos de búsqueda de un estándar determinado y ejecuta el manual de remediación correspondiente. Como vamos a añadir la corrección ElastiCache .2 a los manuales SC, AFSBP y NIST8 0053, debemos crear un nuevo manual de control para cada una de ellas. Se crean los siguientes archivos:

  • source/playbooks/SC/ssmdocs/SC_ ElastiCache .2.ts

  • source/playbooks/NIST80053/ssmdocs/NIST80053_ .2.ts ElastiCache

  • source/playbooks/AFSBP/ssmdocs/AFSBP_ ElastiCache .2.yaml

<PLAYBOOK_NAME><CONTROL.ID>El nombre de estos archivos es importante y debe seguir el formato _ .ts/yaml

Algunos manuales de ASR admiten manuales de control de IaC TypeScript, mientras que otros deben escribirse en formato YAML sin procesar. Consulte las soluciones existentes en el manual de estrategias correspondiente como ejemplos. En este ejemplo, analizaremos el manual de estrategias del SC, que utiliza el IaC.

En el manual de estrategias de SC, el nuevo manual de control debe exportar una clase que se extienda ControlRunbookDocument y coincida con el nombre del manual de correcciones. Eche un vistazo al siguiente ejemplo:

export class EnableElastiCacheVersionUpgrades extends ControlRunbookDocument {
  constructor(scope: Construct, id: string, props: ControlRunbookProps) {
    super(scope, id, {
      ...props,
      securityControlId: 'ElastiCache.2',
      remediationName: 'EnableElastiCacheVersionUpgrades',
      scope: RemediationScope.REGIONAL,
      resourceIdRegex: <Regex>,
      resourceIdName: 'ClusterId',
      updateDescription: new StringFormat('Automatic minor version upgrades enabled for cluster %s.', [
        StringVariable.of(`ParseInput.ClusterId`),
      ]),
    });
  }
}
  • securityControlIdes el identificador de control de la corrección que va a agregar, tal como se define en la vista de controles consolidados de Security Hub.

  • remediationNamees el nombre que ha elegido para el manual de correcciones.

  • scopees el ámbito del recurso que se va a corregir e indica si existe a nivel mundial o en una región específica.

  • resourceIdRegexes la expresión regular que se utiliza para capturar el ID del recurso que desea pasar al manual de correcciones como parámetro. Solo se debe capturar un grupo, no se deben capturar todos los demás grupos. Si desea pasar todo el ARN, omita este campo.

  • resourceIdNamees el nombre que desea establecer para el identificador del recurso con el que se capturó; debe coincidir con resourceIdRegex el nombre del parámetro del identificador del recurso que figura en el manual de correcciones.

  • updateDescriptiones la cadena que desea asignar a la sección de «notas» del hallazgo en Security Hub una vez que la corrección se haya realizado correctamente.

También debe exportar una función llamada createControlRunbook que devuelve una nueva instancia de su clase. En el ElastiCache caso de la versión .2, esto se ve así:

export function createControlRunbook(scope: Construct, id: string, props: PlaybookProps): ControlRunbookDocument {
  return new EnableElastiCacheVersionUpgrades(scope, id, { ...props, controlId: 'ElastiCache.2' });
}

donde controlId está el ID de control tal como se define en el estándar de seguridad asociado al manual de estrategias con el que se opera.

Si el control Security Hub tiene parámetros que le gustaría pasar al manual de correcciones, puede pasarlos añadiendo anulaciones a los siguientes métodos: -getExtraSteps: define los valores predeterminados para cada parámetro implementado para el control en Security Hub

nota

Cada parámetro de Security Hub debe tener un valor predeterminado

  • getInputParamsStepOutput: define los resultados del GetInputParams paso del manual de control

  • Cada salida tiene un nameoutputType, yselector. selectorDebe ser el mismo selector utilizado en la anulación del getExtraSteps método.

  • getRemediationParams: define los parámetros pasados al manual de correcciones, extraídos de los resultados de los pasos. GetInputParams

Para ver un ejemplo, navegue hasta el archivo. source/playbooks/SC/ssmdocs/SC_DynamoDB.1.ts

Paso 3: Integre cada manual de control con un manual

Para cada manual de control creado en el paso anterior, ahora debe integrarlo con las definiciones de infraestructura del manual asociado. Siga los pasos que se indican a continuación para cada manual de control.

importante

Si creó el manual de control utilizando YAML sin procesar en lugar de IaC mecanografiado, pase a la siguiente sección.

En /<playbook_name>/control_runbooks-construct.ts Importa tu archivo de manual de control recién creado, de la siguiente manera:

import * as elasticache_2 from '../ssmdocs/SC_ElastiCache.2';

A continuación, vaya a la matriz de

const controlRunbooksRecord: Record<string, any>

Y añade una nueva entrada que asigne el ID de control (específico del playbook) al createControlRunbook método que has creado:

'ElastiCache.2': elasticache_2.createControlRunbook,

Añada el identificador de control específico del playbook a la lista de soluciones que se muestra a continuación: <playbook_name>\_remediations.ts

{ control: 'ElastiCache.2', versionAdded: '2.3.0' },

El versionAdded campo debe ser la última versión de la solución. Si al añadir la corrección se infringe el límite de tamaño de la plantilla, aumente elversionAdded. Puede ajustar el número de soluciones incluidas en cada pila de miembros del manual de estrategias. solution_env.sh

Paso 4: Cree la función de IAM de remediación e integre el manual de remediación

Cada remediación tiene su propia función de IAM con los permisos personalizados necesarios para ejecutar el manual de remediación. Además, es necesario invocar el RunbookFactory.createRemediationRunbook método para añadir el manual de correcciones que creó en el paso 1 a las plantillas de la solución. CloudFormation

En elremediation-runook-stack.ts, cada remediación tiene su propio bloque de código en la clase. RemediationRunbookStack El siguiente bloque de código muestra la creación de una nueva función de IAM y la integración del manual de correcciones para la corrección de la versión .2: ElastiCache

    //-----------------------
    // EnableElastiCacheVersionUpgrades
    //
    {
      const remediationName = 'EnableElastiCacheVersionUpgrades'; // should match the name of your remediation runbook
      const inlinePolicy = new Policy(props.roleStack, `ASR-Remediation-Policy-${remediationName}`);

      const remediationPolicy = new PolicyStatement();
      remediationPolicy.addActions('elasticache:ModifyCacheCluster');
      remediationPolicy.effect = Effect.ALLOW;
      remediationPolicy.addResources(`arn:${this.partition}:elasticache:*:${this.account}:cluster:*`);
      inlinePolicy.addStatements(remediationPolicy);

      new SsmRole(props.roleStack, 'RemediationRole ' + remediationName, { // creates the remediation IAM role
        solutionId: props.solutionId,
        ssmDocName: remediationName,
        remediationPolicy: inlinePolicy,
        remediationRoleName: `${remediationRoleNameBase}${remediationName}`,
      });

      RunbookFactory.createRemediationRunbook(this, 'ASR ' + remediationName, { // adds the remediation runbook to the solution's cloudformation templates
        ssmDocName: remediationName,
        ssmDocPath: ssmdocs,
        ssmDocFileName: `${remediationName}.yaml`,
        scriptPath: `${ssmdocs}/scripts`,
        solutionVersion: props.solutionVersion,
        solutionDistBucket: props.solutionDistBucket,
        solutionId: props.solutionId,
        namespace: namespace,
      });
    }

Paso 5: Actualizar las pruebas unitarias

Recomendamos actualizar y ejecutar las pruebas unitarias después de añadir una nueva solución.

En primer lugar, debe agregar cualquier expresión regular nueva (que aún no se haya agregado) al source/test/regex_registry.ts archivo. Este archivo exige pruebas para cada nueva expresión regular incluida en los manuales de ejecución de la solución. Eche un vistazo a la addElastiCacheClusterTestCases función como ejemplo, que se utiliza para probar las expresiones regulares utilizadas en ElastiCache las correcciones.

Por último, tendrás que actualizar las instantáneas de cada pila. Las instantáneas son definiciones de CloudFormation plantillas controladas por versiones que se utilizan para realizar un seguimiento de los cambios realizados en la infraestructura de ASR. Puede actualizar estos archivos de instantáneas ejecutando el siguiente comando desde el directorio: deployment

./run-unit-tests.sh update

¡Ahora está listo para implementar su nueva solución! Consulte la sección Compilar e implementar que aparece a continuación para obtener instrucciones sobre cómo crear e implementar la solución con los nuevos cambios.