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.
Cree reglas AWS Config personalizadas mediante AWS CloudFormation Guard políticas
Andrew Lok, Nicole Brown, Kailash Havildar y Tanya Howell, Amazon Web Services
Resumen
AWS Configlas reglas le ayudan a evaluar sus AWS recursos y su estado de configuración objetivo. Hay dos tipos de AWS Config reglas: administradas y personalizadas. Puede crear reglas personalizadas con AWS Lambda funciones o con AWS CloudFormation Guard
Las reglas creadas con Guard proporcionan un control más detallado que las reglas administradas y, por lo general, son más fáciles de configurar que las reglas de Lambda totalmente personalizadas. Este enfoque proporciona a los ingenieros y arquitectos la capacidad de crear reglas sin necesidad de conocer Python, Nodejs o Java, que son necesarios para implementar reglas personalizadas a través de Lambda.
Este patrón proporciona las plantillas, los ejemplos de código y los enfoques de implementación viables para ayudarle a adoptar reglas personalizadas con Guard. Al usar este patrón, un administrador puede usarlo AWS Config para crear reglas de cumplimiento personalizadas que tengan atributos de elementos de configuración. Por ejemplo, los desarrolladores pueden utilizar las políticas de Guard en relación con los elementos de AWS Config configuración para supervisar de forma continua el estado de los elementos desplegados AWS y no relacionados con AWS los recursos, detectar infracciones de las reglas e iniciar automáticamente las correcciones.
Objetivos
Después de leer este patrón, debería poder:
Comprenda cómo el código de política de Guard interactúa con el AWS Config servicio.
Implemente el escenario 1, que es una regla AWS Config personalizada que utiliza la sintaxis de Guard para validar el cumplimiento de los volúmenes cifrados. Esta regla verifica que la unidad esté en uso y que el tipo de unidad sea gp3.
Implemente el escenario 2, que es una regla AWS Config personalizada que utiliza la sintaxis de Guard para validar el GuardDuty cumplimiento de Amazon. Esta regla verifica que las GuardDuty grabadoras tengan habilitadas las protecciones Amazon Simple Storage Service (Amazon S3) y Amazon Elastic Kubernetes Service (Amazon EKS).
Requisitos previos y limitaciones
Requisitos previos
Una activa Cuenta de AWS
AWS Config, configurado en su Cuenta de AWS
Limitaciones
Las reglas personalizadas de Guard solo pueden consultar pares clave-valor en un registro JSON de un elemento de configuración de destino.
Arquitectura
La sintaxis de Guard se aplica a una AWS Config regla como una política personalizada. AWS Config captura el JSON jerárquico de cada uno de los recursos especificados. El JSON del elemento de AWS Config configuración contiene pares clave-valor. Estos atributos se utilizan en la sintaxis de Guard como variables que se asignan a su valor correspondiente.
La siguiente es una explicación de la sintaxis de Guard. Las variables del elemento de configuración JSON se utilizan y se anteponen con un carácter %.
# declare variable let <variable name> = <'value'> # create rule and assign condition and policy rule <rule name> when <CI json key> == <"CI json value"> { <top level CI json key>.<next level CI json key> == %<variable name> }
Escenario 1: volúmenes de Amazon EBS
El escenario 1 implementa una regla AWS Config personalizada que usa la sintaxis de Guard para validar el cumplimiento de los volúmenes cifrados. Esta regla verifica que la unidad esté en uso y que el tipo de unidad sea gp3.
El siguiente es un ejemplo de un elemento de AWS Config configuración para el escenario 1. Hay tres pares clave-valor en este elemento de configuración que se utilizan como variables en la política de Guard: volumestatusvolumeencryptionstatus, y. volumetype Además, la clave resourceType se usa como filtro en la política de Guard.
{ "version": "1.3", "accountId": "111111111111", "configurationItemCaptureTime": "2023-01-15T19:04:45.402Z", "configurationItemStatus": "ResourceDiscovered", "configurationStateId": "4444444444444", "configurationItemMD5Hash": "", "arn": "arn:aws:ec2:us-west-2:111111111111:volume/vol-222222222222", "resourceType": "AWS::EC2::Volume", "resourceId": "vol-222222222222", "awsRegion": "us-west-2", "availabilityZone": "us-west-2b", "resourceCreationTime": "2023-01-15T19:03:22.247Z", "tags": {}, "relatedEvents": [], "relationships": [ { "resourceType": "AWS::EC2::Instance", "resourceId": "i-33333333333333333", "relationshipName": "Is attached to Instance" } ], "configuration": { "attachments": [ { "attachTime": "2023-01-15T19:03:22.000Z", "device": "/dev/xvda", "instanceId": "i-33333333333333333", "state": "attached", "volumeId": "vol-222222222222", "deleteOnTermination": true, "associatedResource": null, "instanceOwningService": null } ], "availabilityZone": "us-west-2b", "createTime": "2023-01-15T19:03:22.247Z", "encrypted": false, "kmsKeyId": null, "outpostArn": null, "size": 8, "snapshotId": "snap-55555555555555555", "state": "in-use", "volumeId": "vol-222222222222", "iops": 100, "tags": [], "volumeType": "gp2", "fastRestored": null, "multiAttachEnabled": false, "throughput": null, "sseType": null }, "supplementaryConfiguration": {} }
El siguiente es un ejemplo del uso de la sintaxis de Guard para definir las variables y las reglas en el escenario 1. En el siguiente ejemplo:
Las tres primeras líneas definen las variables mediante el comando
let. Se les asigna un nombre y un valor que se derivan de los atributos del elemento de configuración.El bloque de reglas
compliancecheckañade una dependencia condicional “when” que busca un par de clave-valorresourceTypeque coincida conAWS::EC2::Volume. Si se encuentra una coincidencia, la regla pasa por el resto de los atributos de JSON y busca coincidencias en las tres condiciones siguientes:state,encryptedyvolumeType.
let volumestatus = 'available' let volumetype = 'gp3' let volumeencryptionstatus = true rule compliancecheck when resourceType == "AWS::EC2::Volume" { configuration.state == %volumestatus configuration.encrypted == %volumeencryptionstatus configuration.volumeType == %volumetype }
Para ver la política personalizada completa de Guard que implementa esta regla personalizada, consulta awsconfig-guard-cft.yaml o awsconfig-guard-tf-ec2vol.json
Escenario 2: cumplimiento GuardDuty
El escenario 2 implementa una regla AWS Config personalizada que usa la sintaxis de Guard para validar el GuardDuty cumplimiento de Amazon. Esta regla verifica que las GuardDuty grabadoras tengan habilitadas las protecciones Amazon S3 y Amazon EKS. También verifica que los GuardDuty resultados se publiquen cada 15 minutos. Este escenario podría implementarse en todos Cuentas de AWS y Regiones de AWS en una organización (en AWS Organizations).
El siguiente es un ejemplo de un elemento de AWS Config configuración para el escenario 2. Hay tres pares clave-valor en este elemento de configuración que se utilizan como variables en la política de Guard: FindingPublishingFrequency, S3Logs y Kubernetes. Además, la clave resourceType se usa como filtro en la política.
{ "version": "1.3", "accountId": "111111111111", "configurationItemCaptureTime": "2023-11-27T13:34:28.888Z", "configurationItemStatus": "OK", "configurationStateId": "7777777777777", "configurationItemMD5Hash": "", "arn": "arn:aws:guardduty:us-west-2:111111111111:detector/66666666666666666666666666666666", "resourceType": "AWS::GuardDuty::Detector", "resourceId": "66666666666666666666666666666666", "resourceName": "66666666666666666666666666666666", "awsRegion": "us-west-2", "availabilityZone": "Regional", "resourceCreationTime": "2020-02-17T02:48:04.511Z", "tags": {}, "relatedEvents": [], "relationships": [], "configuration": { "Enable": true, "FindingPublishingFrequency": "FIFTEEN_MINUTES", "DataSources": { "S3Logs": { "Enable": true }, "Kubernetes": { "AuditLogs": { "Enable": true } } }, "Id": "66666666666666666666666666666666", "Tags": [] }, "supplementaryConfiguration": { "CreatedAt": "2020-02-17T02:48:04.511Z" } }
El siguiente es un ejemplo del uso de la sintaxis de Guard para definir las variables y las reglas en el escenario 2. En el siguiente ejemplo:
Las tres primeras líneas definen las variables mediante el comando
let. Se les asigna un nombre y un valor que se derivan de los atributos del elemento de configuración.El bloque de reglas
compliancecheckañade una dependencia condicional “when” que busca un par de clave-valorresourceTypeque coincida conAWS::GuardDuty::Detector. Si se encuentra una coincidencia, la regla pasa por el resto de los atributos de JSON y busca coincidencias en las tres condiciones siguientes:S3Logs.Enable,Kubernetes.AuditLogs.EnableyFindingPublishingFrequency.
let s3protection = true let kubernetesprotection = true let publishfrequency = 'FIFTEEN_MINUTES' rule compliancecheck when resourceType == "AWS::GuardDuty::Detector" { configuration.DataSources.S3Logs.Enable == %s3protection configuration.DataSources.Kubernetes.AuditLogs.Enable == %kubernetesprotection configuration.FindingPublishingFrequency == %publishfrequency }
Para ver la política personalizada completa de Guard que implementa esta regla personalizada, consulta awsconfig-guard-cft-gd.yaml
Tools (Herramientas)
Servicios de AWS
AWS CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en Cuentas de AWS todas las regiones.
AWS Configproporciona una vista detallada de sus recursos Cuenta de AWS y de cómo están configurados. Le ayuda a identificar cómo se relacionan los recursos entre sí y cómo han cambiado sus configuraciones a lo largo del tiempo.
Otras herramientas
HashiCorp Terraform
es una herramienta de infraestructura como código (IaC) que facilita usar el código para aprovisionar y administrar los recursos y la infraestructura en la nube.
Repositorio de código
El código de este patrón está disponible en el AWS CloudFormation Guard repositorio GitHub AWS Config with
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
(Opcional) Seleccione pares clave-valor para la regla. | Complete estos pasos si va a definir una política de Guard personalizada. Si utiliza una de las políticas de ejemplo para el escenario 1 o 2, omita estos pasos.
| Administrador de AWS, ingeniero de seguridad |
Cree la regla personalizada. | Utilice los pares clave-valor que identificó anteriormente o uno de los ejemplos de políticas de Guard proporcionados, siga las instrucciones de Creación de reglas de políticas AWS Config personalizadas para crear una regla personalizada. | Administrador de AWS, ingeniero de seguridad |
Valide la regla personalizada. | Tome alguna de las siguientes medidas para validar la regla personalizada de Guard:
| Administrador de AWS, ingeniero de seguridad |
Resolución de problemas
| Problema | Solución |
|---|---|
Pon a prueba la política de guardia fuera de AWS Config | Las pruebas unitarias se pueden realizar en su dispositivo local o en un entorno de desarrollo integrado (IDE), como un AWS Cloud9 IDE. Para realizar las pruebas unitarias, haga lo siguiente:
|
Depura una regla personalizada AWS Config | En su política de Guard, cambia el valor de |
Recursos relacionados
AWS documentación
Creación de reglas de políticas AWS Config personalizadas (AWS Config documentación)
AWS CloudFormation Guard Reglas de redacción (documentación de Guard)
AWS publicaciones de blog y talleres
Presentamos la AWS CloudFormation Guard versión 2.0
(AWS entrada de blog)
Otros recursos
AWS CloudFormation Guard
(GitHub)