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
Creado por Andrew Lok (AWS), Kailash Havildar (AWS), Nicole Brown (AWS) y Tanya Howell (AWS)
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 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 plantillas, ejemplos de código y enfoques de implementación viables que le ayudarán 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 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.
A continuación se explica 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: volumestatus
volumeencryptionstatus
, y. volumetype
Además, la resourceType
clave 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
let
comando. Se les asigna un nombre y un valor que se derivan de los atributos del elemento de configuración.El bloque de
compliancecheck
reglas agrega una dependencia condicional de cuándo que busca un parresourceType
clave-valor que coincida.AWS::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
encrypted
, y.volumeType
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
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 resourceType
clave 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
let
comando. Se les asigna un nombre y un valor que se derivan de los atributos del elemento de configuración.El bloque de
compliancecheck
reglas agrega una dependencia condicional de cuándo que busca un parresourceType
clave-valor que coincida.AWS::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.Enable
, y.FindingPublishingFrequency
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
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) de código abierto que le ayuda a usar el código para aprovisionar y administrar la infraestructura y los recursos de la nube.
Repositorio de código
El código de este patrón está disponible en el repositorio GitHub AWS Config with AWS CloudFormation Guard
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 uno de los ejemplos de políticas 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ítica AWS Config personalizadas para crear una regla personalizada. | Administrador de AWS, ingeniero de seguridad |
Valide la regla personalizada. | Realice una de las siguientes acciones para validar la regla de protección personalizada:
| Administrador de AWS, ingeniero de seguridad |
Solución de problemas
Problema | Solución |
---|---|
Pruebe la política de Guard 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 pruebas unitarias, haga lo siguiente:
|
Depura una regla AWS Config personalizada | En tu política de Guard, cambia el |
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 AWS CloudFormation Guard 2.0
(AWS entrada de blog)
Otros recursos
AWS CloudFormation Guard
(GitHub)