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.
-
Cree un manual en la (s) cuenta (s) de los miembros.
-
Cree un rol de IAM en las cuentas de los miembros.
-
(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
-
Inicie sesión en la consola de AWS Systems Manager
y obtenga un ejemplo de cómo encontrar JSON. -
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. -
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
-
Inicie sesión en la consola de AWS Identity and Access Management
. -
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
-
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.
-
Consulte un ejemplo de regla para el mismo estándar de seguridad en CloudWatch Events. El estándar de nomenclatura de las reglas es
standard_control_*AutoTrigger*
. -
Copie el patrón de eventos del ejemplo que se va a utilizar.
-
Cambia el
GeneratorId
valor para que coincida con elGeneratorId
de tu JSON de Finding. -
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
-
Cree el manual de remediación.
-
Cree los manuales de control.
-
Integre cada manual de control con un manual de estrategias.
-
Cree la función de IAM de remediación e integre el manual de remediación
-
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`), ]), }); } }
-
securityControlId
es 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. -
remediationName
es el nombre que ha elegido para el manual de correcciones. -
scope
es el ámbito del recurso que se va a corregir e indica si existe a nivel mundial o en una región específica. -
resourceIdRegex
es 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. -
resourceIdName
es el nombre que desea establecer para el identificador del recurso con el que se capturó; debe coincidir conresourceIdRegex
el nombre del parámetro del identificador del recurso que figura en el manual de correcciones. -
updateDescription
es 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
name
outputType
, yselector
.selector
Debe ser el mismo selector utilizado en la anulación delgetExtraSteps
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.