

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.

# Creación de reglas de políticas AWS Config personalizadas
<a name="evaluate-config_develop-rules_cfn-guard"></a>

Puede crear reglas de política AWS Config personalizadas desde la Consola de administración de AWS AWS CLI, o la AWS Config API.

## Añadir reglas de política AWS Config personalizadas
<a name="config-custom-policy-rules-add"></a>

------
#### [ Using the console ]

1. Inicia sesión en la AWS Config consola de [https://console.aws.amazon.com/config/tu casa Consola de administración de AWS](https://console.aws.amazon.com/config/home) y ábrela.

1. En el Consola de administración de AWS menú, compruebe que el selector de regiones esté configurado en una AWS región que admita AWS Config reglas. Para ver una lista de las regiones admitidas, consulte [AWS Config Regions and Endpoints](https://docs.aws.amazon.com/general/latest/gr/awsconfig.html) en la *Referencia general de Amazon Web Services*. 

1. En el panel de navegación izquierdo, seleccione **Rules (Reglas)**. 

1. En la página **Rules (Reglas)**, seleccione **Add rule (Añadir regla)**. 

1. En la página **Especificar tipo de regla**, elija **Crear una regla personalizada con Guard**.

1. En la página **Configurar regla**, cree la regla siguiendo estos pasos:

   1. En **Nombre**, escriba un nombre único para la regla.

   1. En **Descripción**, escriba una descripción para la regla.

   1. Para la **versión de tiempo de ejecución de Guard**, elija el sistema de tiempo de ejecución para su regla de política AWS Config personalizada.

   1. Para **Contenido de la regla**, puede indicar la política personalizada de Guard correspondiente a su regla. 

   1. Para **el modo de evaluación**, elija en qué momento del proceso de creación y administración de recursos AWS Config desea evaluar sus recursos. Según la regla, AWS Config puede evaluar las configuraciones de sus recursos antes de aprovisionar un recurso, después de aprovisionar un recurso o ambas cosas.

      1. Elija **Active la evaluación proactiva** para ejecutar evaluaciones de los valores de configuración de sus recursos antes de que se implementen.

         Una vez que hayas activado la evaluación proactiva, puedes usar la [StartResourceEvaluation](https://docs.aws.amazon.com/config/latest/APIReference/API_StartResourceEvaluation.html)API y la [GetResourceEvaluationSummary](https://docs.aws.amazon.com/config/latest/APIReference/API_GetResourceEvaluationSummary.html)API para comprobar si los recursos que especificas en estos comandos se marcarán como NO CONFORMES según las reglas proactivas de tu cuenta en tu región.

          Para obtener más información sobre el uso de estos comandos, consulta Cómo [evaluar tus recursos con reglas](https://docs.aws.amazon.com/config/latest/developerguide/evaluating-your-resources.html#evaluating-your-resources-proactive). AWS Config Para obtener una lista de reglas administradas que admiten una evaluación proactiva, consulte [la Lista de reglas AWS Config administradas por modo de evaluación](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-evaluation-mode.html).

      1. Seleccione **Active la evaluación de detectives** para evaluar los ajustes de la configuración de los recursos existentes.

         Para una evaluación detectivesca, las reglas de política AWS Config personalizadas se inician mediante **cambios en la configuración**. Esta opción estará preseleccionada.
         +  **Recursos**: cuando se crea, cambia o elimina un recurso específico que coincide con un tipo de recurso específico o con un tipo más el identificador.
         +  **Etiquetas**: cuando se crea, cambia o elimina un recurso con la etiqueta especificada.
         +  **Todos los cambios**: cuando AWS Config se crea, modifica o elimina un recurso registrado por.

         AWS Config ejecuta la evaluación cuando detecta un cambio en un recurso que coincide con el alcance de la regla. Puede utilizar el ámbito para restringir qué recursos inician evaluaciones. De lo contrario, las evaluaciones se inician cuando se produce un cambio en un recurso aprovisionado posteriormente.

   1. Si su regla incluye **Parámetros**, puede personalizar los valores de las claves proporcionadas. Un parámetro es un atributo que deben cumplir los recursos para que se considere que cumplen la regla.

1. En la página **Revisar y crear**, revise todas las selecciones antes de añadir la regla a la Cuenta de AWS.

1. Cuando termine de revisar las reglas, seleccione **Agregar regla**.

------
#### [ Using the AWS CLI ]

Utilice el comando [https://docs.aws.amazon.com/cli/latest/reference/configservice/put-config-rule.html](https://docs.aws.amazon.com/cli/latest/reference/configservice/put-config-rule.html).

El campo `Owner` debe ser `CUSTOM_POLICY`. Los siguientes campos adicionales son obligatorios para las reglas de política AWS Config personalizada:
+ `Runtime`: El sistema de ejecución de sus reglas de política AWS Config personalizada.
+ `PolicyText`: definición de la política que contiene la lógica de las reglas de políticas personalizadas de AWS Config .
+ `EnableDebugLogDelivery`: La expresión booleana para habilitar el registro de depuración para la regla de política AWS Config personalizada. El valor predeterminado es `false`.

------
#### [ Using the API Reference ]

Utilice la acción [PutConfigRule](https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigRule.html).

El campo `Owner` debe ser `CUSTOM_POLICY`. Los siguientes campos adicionales son obligatorios para las reglas de política AWS Config personalizada:
+ `Runtime`: El sistema de ejecución de sus reglas de política AWS Config personalizada.
+ `PolicyText`: definición de la política que contiene la lógica de las reglas de políticas personalizadas de AWS Config .
+ `EnableDebugLogDelivery`: La expresión booleana para habilitar el registro de depuración para la regla de política AWS Config personalizada. El valor predeterminado es `false`.

------

## Escribir el contenido de las reglas de las políticas personalizadas AWS Config
<a name="config-custom-policy-rules"></a>

Con las reglas de políticas AWS Config personalizadas, puede usar el lenguaje específico de dominio (DSL) de AWS CloudFormation Guard para evaluar las configuraciones de los recursos. En este tema se proporcionan patrones y prácticas recomendadas para escribir reglas de políticas personalizadas.

Para obtener más información sobre cómo escribir reglas con Guard, consulte Cómo [escribir reglas de Guard](https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html) en la Guía del usuario de AWS CloudFormation Guard y los [modos de funcionamiento de AWS CloudFormation Guard 2.0 en el repositorio de](https://github.com/aws-cloudformation/cloudformation-guard/tree/main/guard) Guard. GitHub 

### Estructura básica de reglas
<a name="config-custom-policy-rules-structure"></a>

Utilice el siguiente formato básico para crear reglas:

```
# Basic rule format
rule <rule_name> when
    resourceType == "<AWS::Service::Resource>" {
    # Evaluation clauses
}

# Example with filtering
let resources_of_type = Resources.*[ Type == 'AWS::Service::Resource' ]
rule check_resources when %resources_of_type !empty {
    %resources_of_type.configuration.property == expected_value
}
```

### Componentes principales
<a name="config-custom-policy-rules-components"></a>

configuración  
Incluye el contenido de la configuración de recursos.

supplementaryConfiguration  
Contiene contenido adicional para la configuración de recursos. AWS Config devuelve este campo para determinados tipos de recursos a fin de complementar la información devuelta para el campo de configuración.

resourceType  
AWS tipo de recurso que se está evaluando.

resourceId  
ID del recurso (por ejemplo, `sg-xxxxxx`).

accountId  
El Cuenta de AWS identificador de 12 dígitos asociado al recurso.

### Patrones comunes
<a name="config-custom-policy-rules-patterns"></a>

------
#### [ Status checks ]

```
let allowed_status = ['ACTIVE', 'RUNNING']
rule check_resource_status when
    resourceType == "AWS::Service::Resource" {
    configuration.status IN %allowed_status
}
```

------
#### [ Required properties ]

```
rule check_required_properties when
    resourceType == "AWS::Service::Resource" {
    configuration.propertyName exists
    configuration.propertyName is_string  # or is_list, is_struct
}
```

------
#### [ Query blocks ]

```
configuration.Properties {
    property1 exists
    property2 is_string
    property3 IN [allowed_value1, allowed_value2]
}
```

------
#### [ Conditional evaluation ]

```
when configuration.feature_enabled == true {
    configuration.feature_settings exists
    configuration.feature_settings is_struct
}
```

------
#### [ Custom messages ]

```
rule check_compliance when
    resourceType == "AWS::Service::Resource" {
    configuration.property == expected_value <<Custom error message explaining the requirement>>
}}
```

------

### Características avanzadas
<a name="config-custom-policy-rules-advanced"></a>

------
#### [ Range checks ]

```
rule check_numeric_limits {
    # Inclusive range (lower_limit <= value <= upper_limit)
    configuration.value IN r[minimum_value, maximum_value]  

    # Exclusive range (lower_limit < value < upper_limit)
    configuration.value IN r(exclusive_min, exclusive_max)  

    # Left inclusive, right exclusive (lower_limit <= value < upper_limit)
    configuration.value IN r[minimum_value, exclusive_max)

    # Left exclusive, right inclusive (lower_limit < value <= upper_limit)
    configuration.value IN r(exclusive_min, maximum_value]
}
```

------
#### [ Combining conditions ]

```
# AND conditions (implicit through new lines)
condition_1
condition_2

# OR conditions (explicit)
condition_3 OR
condition_4
```

------
#### [ Chaining rules ]

```
rule check_prerequisites {
    configuration.required_setting exists
}

rule check_details when check_prerequisites {
    configuration.required_setting == expected_value
}
```

------

### Prácticas recomendadas
<a name="config-custom-policy-rules-best-practices"></a>
+ Utilice variables con instrucciones `let` para mejorar la legibilidad.
+ Agrupe comprobaciones relacionadas mediante bloques de reglas con nombre.
+ Incluya comentarios descriptivos.
+ Utilice operadores adecuados (`exists`, `is_string`, `is_list`).
+ Utilice patrones de expresiones regulares sin distinción entre mayúsculas y minúsculas.

### Ejemplo: dynamodb-pitr-enabled
<a name="config-custom-policy-rules-example"></a>

El siguiente ejemplo muestra la definición de política para una versión de regla de política AWS Config personalizada de la regla AWS Config [dynamodb-pitr-enabled](dynamodb-pitr-enabled.md) administrada. Esta regla comprueba si las tablas Point-in-Time de DynamoDB tienen habilitada la recuperación.

```
# Check if DynamoDB tables have Point-in-Time Recovery enabled
let status = ['ACTIVE']

rule tableisactive when
    resourceType == "AWS::DynamoDB::Table" {
    configuration.tableStatus == %status
}

rule checkcompliance when
    resourceType == "AWS::DynamoDB::Table"
    tableisactive {
    let pitr = supplementaryConfiguration.ContinuousBackupsDescription.pointInTimeRecoveryDescription.pointInTimeRecoveryStatus
    %pitr == "ENABLED" <<DynamoDB tables must have Point-in-Time Recovery enabled>>
}
```