Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Composantes d'une AWS Config règle
AWS Config les règles évaluent les paramètres de configuration de vos AWS ressources. Il existe deux types de règles : les règles gérées AWS Config et les règles personnalisées AWS Config .
AWS Config Les règles gérées sont des règles prédéfinies et personnalisables créées par AWS Config. Pour obtenir la liste des règles gérées, consultez la section Liste des règles AWS Config gérées.
AWS Config Les règles personnalisées sont des règles que vous créez de toutes pièces. Il existe deux manières de créer des règles AWS Config personnalisées : avec les fonctions Lambda (Guide du AWS Lambda développeur) et avec Guard (Guard GitHub Repository
Cette page décrit les métadonnées des règles AWS Config gérées et les meilleures pratiques relatives à l'écriture de règles AWS Config personnalisées avec Python à l'aide du kit de développement de AWS Config règles (RDK) et de la bibliothèque de kits de développement de AWS Config règles (RDKlib).
Pour une présentation expliquant comment créer des règles de stratégie AWS Config personnalisées, consultez la section Création de règles de politique AWS Config personnalisées. Pour une présentation expliquant comment créer des règles Lambda AWS Config personnalisées, voir Création de règles Lambda AWS Config personnalisées.
AWS Config Métadonnées de règles gérées
AWS Config les règles gérées peuvent contenir les métadonnées modifiables suivantes :
- defaultName
-
defaultName Il s'agit du nom que les instances d'une règle recevront par défaut.
- description
-
La description de la règle fournit le contexte de ce que la règle évalue. Une limite de 256 caractères est appliquée à la console AWS Config . En tant que bonne pratique, la description de la règle doit commencer par « Vérifie si » et inclure une description du COMPLIANT scénario NON _. Les noms de service doivent être écrits en entier, en commençant par AWS ou Amazon lorsqu'ils sont mentionnés pour la première fois dans la description de la règle. Par exemple, AWS CloudTrail ou Amazon CloudWatch au lieu de CloudTrail ou CloudWatch pour la première utilisation. Les noms des services peuvent être abrégés après référence ultérieure.
- scope
-
La portée détermine les types de ressources ciblés par la règle. Pour obtenir la liste des types de ressources pris en charge, consultez Types de ressources pris en charge.
- compulsoryInputParameterDétails
-
Les compulsoryInputParameter détails sont utilisés pour les paramètres nécessaires à l'évaluation d'une règle. Par exemple, la règle
access-keys-rotated
gérée inclut le paramètre requismaxAccessKeyAge
. Si un paramètre est obligatoire, il ne sera pas marqué (facultatif). Un type doit être spécifié pour chaque paramètre. Le type peut être « String », « int », « double », "CSV«, « boolean » ou « ». StringMap - optionalInputParameterDétails
-
Les optionalInputParameter détails sont utilisés pour les paramètres facultatifs permettant à une règle de procéder à son évaluation. Par exemple, la règle
elasticsearch-logs-to-cloudwatch
gérée inclut le paramètre facultatiflogTypes
. Un type doit être spécifié pour chaque paramètre. Le type peut être « String », « int », « double », "CSV«, « boolean » ou « ». StringMap - supportedEvaluationModes
-
Il supportedEvaluationModes détermine le moment où les ressources seront évaluées, soit avant qu'une ressource soit déployée, soit après le déploiement d'une ressource.
DETECTIVE
est utilisé pour évaluer les ressources déjà déployées. Vous pouvez ainsi évaluer les paramètres de configuration de vos ressources existantes.PROACTIVE
est utilisé pour évaluer les ressources avant leur déploiement.Cela vous permet d'évaluer si un ensemble de propriétés de ressources, s'il est utilisé pour définir une AWS ressource, serait COMPLIANT ou NON _ compte COMPLIANT tenu de l'ensemble de règles proactives que vous avez dans votre compte dans votre région.
Vous pouvez spécifier le supportedEvaluationModes to
DETECTIVE
PROACTIVE
, ou les deuxDETECTIVE
etPROACTIVE
. Vous devez spécifier un mode d'évaluation et ce champ ne peut pas rester vide.Pour plus d'informations, consultez Modes d'évaluation. Pour obtenir la liste des règles gérées qui prennent en charge l'évaluation proactive, consultez la section Liste des règles AWS Config gérées par mode d'évaluation.
Note
Les règles proactives ne corrigent pas les ressources signalées comme NON _ COMPLIANT et n'empêchent pas leur déploiement.
AWS Config Structure de règles personnalisée
Cette section contient des informations sur l'utilisation du kit de développement de AWS Config règles (RDK) et de la bibliothèque de kits de développement de AWS Config règles (RDKlib). Pour plus d'informations sur le RDK ouRDKlib, consultez les aws-config-rdklib
Écriture de règles
-
Suivez les étapes décrites dans Installation de l' AWS CLI.
-
Suivez les étapes décrites dans Configuration à l' AWS Config aide de la console ou Configuration à l' AWS Config aide du AWS CLI. Pour plus d'informations sur les AWS régions AWS Config prises en charge, sélectionnez votre région dans la liste des services AWS régionaux
. -
Installez leRDK, en utilisant la méthode recommandée avec pip :
pip install rdk
Note
Avant d'utiliser pip, vérifiez qu'il est installé sur votre ordinateur.
-
Installez leRDKLib, en utilisant la méthode recommandée avec pip :
pip install rdklib
Note
Avant d'utiliser pip, vérifiez qu'il est installé sur votre ordinateur.
-
Pour créer une règle déclenchée par une modification du type de ressource spécifié, exécutez la commande suivante :
rdk create
YOUR_RULE_NAME
--runtime python3.6-lib --resource-typesAWS::Resource::Type
L'exemple suivant crée une règle déclenchée par une modification du type de ressource
AWS::IAM::User
:rdk create MFA_ENABLED_RULE --runtime python3.6-lib --resource-types AWS::IAM::User
Voici les indicateurs que vous pouvez utiliser avec la commande
rdk create
pour les règles déclenchées par des modifications :rdk create
RULE_NAME
--runtime pythonX.X
-lib // Python runtime version --input-parametersREQUIRED_PARAMETERS
// Parameters that are required for a rule to do its evaluation --optional-parametersOPTIONAL_PARAMETERS
// Parameters that are optional for a rule to do its evaluation --resource-typesAWS::Resource::Type
// Resource type(s) that the rule targetsNote
Pour utiliser leRDKLib, le temps d'exécution de la règle doit être défini sur
python3.6-lib
.Après l'exécution de
rdk create
, vous devriez voir un nouveau répertoire portant le nom de la règle et contenant 3 fichiers :-
: fichier Python contenant la logique de la règleRULE_NAME
.py -
: fichier Python contenant les tests unitaires de la règleRULE_NAME
_test.py -
parameters.json
- JSON fichier pour les paramètres RDK de déploiement
-
-
L'étape suivante consiste à écrire la logique de la règle. Il vous suffira de modifier le fichier
.py. Si vous ouvrez le fichierRULE_NAME
.py, vous accéderez à un modèle vous permettant d'ajouter la logique de la règle. Voici le modèle qui a été généré pour MFA _ ENABLED _ RULE :RULE_NAME
from rdklib import Evaluator, Evaluation, ConfigRule, ComplianceType APPLICABLE_RESOURCES = ['AWS::IAM::User'] class MFA_ENABLED_RULE(ConfigRule): def evaluate_change(self, event, client_factory, configuration_item, valid_rule_parameters): ############################### # Add your custom logic here. # ############################### return [Evaluation(ComplianceType.NOT_APPLICABLE)] #def evaluate_periodic(self, event, client_factory, valid_rule_parameters): # pass def evaluate_parameters(self, rule_parameters): valid_rule_parameters = rule_parameters return valid_rule_parameters ################################ # DO NOT MODIFY ANYTHING BELOW # ################################ def lambda_handler(event, context): my_rule = MFA_ENABLED_RULE() evaluator = Evaluator(my_rule, APPLICABLE_RESOURCES) return evaluator.handle(event, context)
L'exemple suivant est une version modifiée du RULE modèle MFA _ ENABLED _ avec la logique des règles. La règle vérifie si l'authentification multifactorielle (MFA) est activée pour les IAM utilisateurs. La règle est NON _ COMPLIANT si un IAM utilisateur ne l'a MFA pas activé. Pour plus d'informations sur la logique des règles et les méthodes fournies dans le modèle, consultez Logique de règles.
from rdklib import ComplianceType, ConfigRule, Evaluation, Evaluator APPLICABLE_RESOURCES = ["AWS::IAM::User"] class MFA_ENABLED_RULE(ConfigRule): def evaluate_change(self, event, client_factory, configuration_item, valid_rule_parameters): username = configuration_item.get("resourceName") iam_client = client_factory.build_client("iam") response = iam_client.list_mfa_devices(UserName=username) # Scenario:1 IAM user has MFA enabled. if response["MFADevices"]: return [Evaluation(ComplianceType.COMPLIANT)] # Scenario:2 IAM user has MFA not enabled. annotation = "MFA needs to be enabled for user." return [Evaluation(ComplianceType.NON_COMPLIANT, annotation=annotation)] def evaluate_parameters(self, rule_parameters): valid_rule_parameters = rule_parameters return valid_rule_parameters ################################ # DO NOT MODIFY ANYTHING BELOW # ################################ def lambda_handler(event, context): my_rule = MFA_ENABLED_RULE() evaluator = Evaluator(my_rule, APPLICABLE_RESOURCES) return evaluator.handle(event, context)
-
L'étape suivante consiste à installer la RDKlib couche à l' AWS aide de la AWS console ou AWS CLI. RDKLibest conçu pour fonctionner en tant que AWS Lambda couche. Cela vous permet d'utiliser la bibliothèque sans l'ajouter à votre package de déploiement.
-
Pour installer la RDKlib couche avec la AWS console, procédez comme suit :
Ouvrez la AWS Serverless Application Repository console à l'adresse https://console.aws.amazon.com/serverlessrepo
. -
Dans le menu de navigation de gauche, sélectionnez Applications disponibles.
-
Recherchez
rdklib
et choisissez rdklib. -
Examinez les détails de la fonction, puis déployez-la. Aucune modification ne devrait être nécessaire.
-
Dans la section Ressources de la page de présentation, copiez le nom de ressource Amazon (ARN) de la couche Lambda. Vous aurez besoin ARN de la couche Lambda pour déployer votre règle.
-
Pour installer la RDKlib couche avec le AWS CLI, exécutez les commandes suivantes :
-
Créez l'ensemble de modifications pour le RDKlib -Layer.
aws serverlessrepo create-cloud-formation-change-set --application-id arn:aws:serverlessrepo:ap-southeast-1:711761543063:applications/rdklib --stack-name RDKlib-Layer
La sortie suivante est renvoyée :
{ "ApplicationId": "arn:aws:serverlessrepo:ap-southeast-1:711761543063:applications/rdklib", "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/a3d536322-585e-4ffd-9e2f-552c8b887d6f/ffe7ff5c-ab38-4ab9-b746-9c1617ca95c1", "SemanticVersion": "0.1.0", "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/serverlessrepo-RDKlib-Layer/365436a0-a58a-11ea-9b04-12ae8fb95b53" }
-
Exécutez le jeu de modifications. Vous pouvez copier/coller l'ensemble de modifications complet ARN (ChangeSetId à partir de la sortie générée à l'étape précédente) pour personnaliser la commande suivante :
aws cloudformation execute-change-set --change-set-name
NAME_OF_THE_CHANGE_SET
-
Renvoie toutes les ressources associées qui font partie de la pile déployée.
aws cloudformation describe-stack-resources --stack-name serverlessrepo-RDKlib-Layer
La sortie suivante est renvoyée :
{ "StackResources": [ { "StackName": "serverlessrepo-RDKlib-Layer", "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/serverlessrepo-RDKlib-Layer/365436a0-a58a-11ea-9b04-12ae8fb95b53", "LogicalResourceId": "RdklibLayercf22317faf", "PhysicalResourceId": "arn:aws:lambda:us-east-1:123456789012:layer:rdklib-layer:1", "ResourceType": "AWS::Lambda::LayerVersion", "Timestamp": "2020-06-03T11:26:30.501Z", "ResourceStatus": "CREATE_COMPLETE", "DriftInformation": { "StackResourceDriftStatus": "NOT_CHECKED" } } ] }
-
Copiez ARN la couche Lambda à partir de la sortie générée à l'étape précédente. Le ARN de la couche Lambda est le.
PhysicalResourceId
"PhysicalResourceId": "arn:aws:lambda:us-east-1:123456789012:layer:rdklib-layer:1"
-
-
-
L'étape suivante consiste à attribuer un rôle à la fonction Lambda. Par défaut, les fonctions Lambda tentent d'assumer le rôle
AWSServiceRoleForConfig
, ce qui n'est pas autorisé. Vous devez créer un rôle avec la politiqueAWS_ConfigRole
gérée. Le rôle doit entretenir une relation d'approbation avec AWS Config . Tous les rôles situés sous le chemin /rdk/ doivent assumer le rôle. Voici un exemple de politique d'approbation :{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
account-ID
:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": "arn:aws:iam::account-ID
:role/rdk/*" } } } ] }Exécutez la commande suivante à l'aide de cette politique d'approbation :
aws iam create-role --role-name
your-role-name
--assume-role-policy-document file://trust-policy.jsonExécutez la commande suivante pour mettre à jour le paramètre d'entrée pour
ExecutionRoleName
et fournir le nom du rôle :rdk modify
YOUR_RULE_NAME
--input-parameters '{"ExecutionRoleName":"your-role-name
"}'Vous pouvez également utiliser
rdk modify
pour mettre à jour les détails des règles déclenchées par des modifications à l'aide des indicateurs suivants :rdk modify
RULE_NAME
--input-parametersREQUIRED_PARAMETERS
// Parameters that are required for a rule to do its evaluation --optional-parametersOPTIONAL_PARAMETERS
// Parameters that are optional for a rule to do its evaluation --resource-typesAWS::Resource::Type
// Resource type(s) that the rule targets -
La dernière étape consiste à déployer votre règle. Pour déployer votre règle, exécutez la commande suivante avec la ARN couche Lambda de l'étape 3 :
rdk deploy
YOUR_RULE_NAME
--rdklib-layer-arnYOUR_RDKLIB_LAYER_ARN
-
La règle est désormais déployée. Vous pouvez utiliser la AWS Config console pour vérifier si la règle fonctionne comme prévu.
-
Pour créer une règle déclenchée périodiquement pour un type de ressource spécifié, exécutez la commande suivante :
rdk create
YOUR_RULE_NAME
--runtime python3.6-lib --resource-typesAWS::Resource::Type
--maximum-frequencyEXECUTION_FREQUENCY
L'exemple suivant crée une règle déclenchée toutes les 24 heures pour le type de ressource
AWS::IAM::User
:rdk create MFA_ENABLED_RULE --runtime python3.6-lib --resource-types AWS::IAM::User --maximum-frequency TwentyFour_Hours
Voici les indicateurs que vous pouvez utiliser avec la commande
rdk create
pour les règles périodiques :rdk create
RULE_NAME
--runtime pythonX.X
-lib // Python runtime version --input-parametersREQUIRED_PARAMETERS
// Parameters that are required for a rule to do its evaluation --optional-parametersOPTIONAL_PARAMETERS
// Parameters that are optional for a rule to do its evaluation --resource-typesAWS::Resource::Type
// Resource type(s) that the rule targets --maximum-frequencyEXECUTION_FREQUENCY
// How often the rule should be run on a periodic trigger. One of ['One_Hour','Three_Hours','Six_Hours','Twelve_Hours','TwentyFour_Hours']Note
Pour utiliser leRDKLib, le temps d'exécution de la règle doit être défini sur
python3.6-lib
.Après l'exécution de
rdk create
, vous devriez voir un nouveau répertoire portant le nom de la règle et contenant 3 fichiers :-
: fichier Python contenant la logique de la règleRULE_NAME
.py -
: fichier Python contenant les tests unitaires de la règleRULE_NAME
_test.py -
parameters.json
- JSON fichier pour les paramètres RDK de déploiement
-
-
L'étape suivante consiste à écrire la logique de la règle. Il vous suffira de modifier le fichier
.py. Si vous ouvrez le fichierRULE_NAME
.py, vous accéderez à un modèle vous permettant d'ajouter la logique de la règle. Voici le modèle qui a été généré pour MFA _ ENABLED _ RULE :RULE_NAME
from rdklib import Evaluator, Evaluation, ConfigRule, ComplianceType APPLICABLE_RESOURCES = ['AWS::IAM::User'] class MFA_ENABLED_RULE(ConfigRule): def evaluate_change(self, event, client_factory, configuration_item, valid_rule_parameters): ############################### # Add your custom logic here. # ############################### return [Evaluation(ComplianceType.NOT_APPLICABLE)] #def evaluate_periodic(self, event, client_factory, valid_rule_parameters): # pass def evaluate_parameters(self, rule_parameters): valid_rule_parameters = rule_parameters return valid_rule_parameters ################################ # DO NOT MODIFY ANYTHING BELOW # ################################ def lambda_handler(event, context): my_rule = MFA_ENABLED_RULE() evaluator = Evaluator(my_rule, APPLICABLE_RESOURCES) return evaluator.handle(event, context)
Le modèle utilise par défaut les règles déclenchées par des modifications. Ajoutez plutôt votre logique à la méthode
evaluate_periodic
. L'exemple suivant est une version modifiée du RULE modèle MFA _ ENABLED _ avec la logique des règles. La règle vérifie si l'authentification multifactorielle (MFA) est activée pour les IAM utilisateurs. La règle est NON _ COMPLIANT si un IAM utilisateur ne l'a MFA pas activé. Pour plus d'informations sur la logique des règles et les méthodes fournies dans le modèle, consultez Logique de règles.from rdklib import ComplianceType, ConfigRule, Evaluation, Evaluator APPLICABLE_RESOURCES = ["AWS::IAM::User"] class MFA_ENABLED_RULE(ConfigRule):l def evaluate_periodic(self, event, client_factory, valid_rule_parameters): evaluations = [] iam_client = client_factory.build_client("iam") paginator = iam_client.get_paginator("list_users") response_iterator = paginator.paginate() for response in response_iterator: for user in response["Users"]: username = user["UserName"] response = iam_client.list_mfa_devices(UserName=username) # Scenario:1 IAM user has MFA enabled. if response["MFADevices"]: evaluations.append(Evaluation(ComplianceType.COMPLIANT, username, "AWS::IAM::User")) # Scenario:2 IAM user has MFA not enabled. if not response["MFADevices"]: annotation = "MFA needs to be enabled for user." evaluations.append( Evaluation(ComplianceType.NON_COMPLIANT, username, "AWS::IAM::User", annotation=annotation) ) return evaluations def evaluate_parameters(self, rule_parameters): valid_rule_parameters = rule_parameters return valid_rule_parameters ################################ # DO NOT MODIFY ANYTHING BELOW # ################################ def lambda_handler(event, context): my_rule = MFA_ENABLED_RULE() evaluator = Evaluator(my_rule, APPLICABLE_RESOURCES) return evaluator.handle(event, context)
-
L'étape suivante consiste à installer la RDKlib couche à l' AWS aide de la AWS console ou AWS CLI. RDKLibest conçu pour fonctionner en tant que AWS Lambda couche. Cela vous permet d'utiliser la bibliothèque sans l'ajouter à votre package de déploiement.
-
Pour installer la RDKlib couche avec la AWS console, procédez comme suit :
Ouvrez la AWS Serverless Application Repository console à l'adresse https://console.aws.amazon.com/serverlessrepo
. -
Dans le menu de navigation de gauche, sélectionnez Applications disponibles.
-
Recherchez
rdklib
et choisissez rdklib. -
Examinez les détails de la fonction, puis déployez-la. Aucune modification ne devrait être nécessaire.
-
Dans la section Ressources de la page de présentation, copiez le nom de ressource Amazon (ARN) de la couche Lambda. Vous aurez besoin ARN de la couche Lambda pour déployer votre règle.
-
Pour installer la RDKlib couche avec le AWS CLI, exécutez les commandes suivantes :
-
Créez l'ensemble de modifications pour le RDKlib -Layer.
aws serverlessrepo create-cloud-formation-change-set --application-id arn:aws:serverlessrepo:ap-southeast-1:711761543063:applications/rdklib --stack-name RDKlib-Layer
La sortie suivante est renvoyée :
{ "ApplicationId": "arn:aws:serverlessrepo:ap-southeast-1:711761543063:applications/rdklib", "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/a3d536322-585e-4ffd-9e2f-552c8b887d6f/ffe7ff5c-ab38-4ab9-b746-9c1617ca95c1", "SemanticVersion": "0.1.0", "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/serverlessrepo-RDKlib-Layer/365436a0-a58a-11ea-9b04-12ae8fb95b53" }
-
Exécutez le jeu de modifications. Vous pouvez copier/coller l'ensemble de modifications complet ARN (ChangeSetId à partir de la sortie générée à l'étape précédente) pour personnaliser la commande suivante :
aws cloudformation execute-change-set --change-set-name
NAME_OF_THE_CHANGE_SET
-
Renvoie toutes les ressources associées qui font partie de la pile déployée.
aws cloudformation describe-stack-resources --stack-name serverlessrepo-RDKlib-Layer
La sortie suivante est renvoyée :
{ "StackResources": [ { "StackName": "serverlessrepo-RDKlib-Layer", "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/serverlessrepo-RDKlib-Layer/365436a0-a58a-11ea-9b04-12ae8fb95b53", "LogicalResourceId": "RdklibLayercf22317faf", "PhysicalResourceId": "arn:aws:lambda:us-east-1:123456789012:layer:rdklib-layer:1", "ResourceType": "AWS::Lambda::LayerVersion", "Timestamp": "2020-06-03T11:26:30.501Z", "ResourceStatus": "CREATE_COMPLETE", "DriftInformation": { "StackResourceDriftStatus": "NOT_CHECKED" } } ] }
-
Copiez ARN la couche Lambda à partir de la sortie générée à l'étape précédente. Le ARN de la couche Lambda est le.
PhysicalResourceId
"PhysicalResourceId": "arn:aws:lambda:us-east-1:123456789012:layer:rdklib-layer:1"
-
-
-
L'étape suivante consiste à attribuer un rôle à la fonction Lambda. Par défaut, les fonctions Lambda tentent d'assumer le rôle
AWSServiceRoleForConfig
, ce qui n'est pas autorisé. Vous devez créer un rôle avec la politiqueAWS_ConfigRole
gérée. Le rôle doit entretenir une relation d'approbation avec AWS Config . Tous les rôles situés sous le chemin /rdk/ doivent assumer le rôle. Voici un exemple de politique d'approbation :{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
account-ID
:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": "arn:aws:iam::account-ID
:role/rdk/*" } } } ] }Exécutez la commande suivante à l'aide de cette politique d'approbation :
aws iam create-role --role-name
your-role-name
--assume-role-policy-document file://trust-policy.jsonExécutez la commande suivante pour mettre à jour le paramètre d'entrée pour
ExecutionRoleName
et fournir le nom du rôle :rdk modify
YOUR_RULE_NAME
--input-parameters '{"ExecutionRoleName":"your-role-name
"}'Vous pouvez également utiliser
rdk modify
pour mettre à jour les détails des règles périodiques à l'aide des indicateurs suivants :rdk modify
RULE_NAME
--input-parametersREQUIRED_PARAMETERS
// Parameters that are required for a rule to do its evaluation --optional-parametersOPTIONAL_PARAMETERS
// Parameters that are optional for a rule to do its evaluation --resource-typesAWS::Resource::Type
// Resource type(s) that the rule targets --maximum-frequencyEXECUTION_FREQUENCY
// How often the rule should be run on a periodic trigger. One of ['One_Hour','Three_Hours','Six_Hours','Twelve_Hours','TwentyFour_Hours'] -
La dernière étape consiste à déployer votre règle. Pour déployer votre règle, exécutez la commande suivante avec la ARN couche Lambda de l'étape 3 :
rdk deploy
YOUR_RULE_NAME
--rdklib-layer-arnYOUR_RDKLIB_LAYER_ARN
-
La règle est désormais déployée. Vous pouvez utiliser la AWS Config console pour vérifier si la règle fonctionne comme prévu.
Logique de règles
L'exemple de code Python suivant est un modèle pour écrire une règle à l'aide du RDK etRDKLib. Vous ne devez apporter des modifications qu'aux méthodes evaluate_parameters
, evaluate_change
et evaluate_periodic
, ou écrire des nouvelles fonctions pour simplifier la logique si nécessaire. Pour connaître les conditions préalables à l'écriture de règles avec le RDK etRDKlib, voirPrérequis.
from rdklib import Evaluator, Evaluation, ConfigRule, ComplianceType APPLICABLE_RESOURCES = ["
AWS::Resource::Type
"] # When you create a rule, the class name will be the name you give the rule when you create it instead of ConfigRule class ConfigRule (ConfigRule): def evaluate_parameters(self, rule_parameters): return rule_parameters def evaluate_change(self, event, client_factory, configuration_item, valid_rule_parameters): ############################### # Add your custom logic here. # ############################### def evaluate_periodic(self, event, client_factory, valid_rule_parameters): ############################### # Add your custom logic here. # ############################### ################################ # DO NOT MODIFY ANYTHING BELOW # ################################ def lambda_handler(event, context): my_rule = ConfigRule() evaluator = Evaluator(my_rule, APPLICABLE_RESOURCES) return evaluator.handle(event, context)
- APPLICABLE_RESOURCES
-
APPLICABLE_RESOURCES
sont le ou les types de ressources ciblés par la règle. S'ils sont utilisés, il doit s'agir d'une variable globale définie sur le ou les types de ressources ciblés par la règle. Pour obtenir la liste des types de ressources pris en charge, consultez Types de ressources pris en charge. - evaluate_parameters
-
Description
Cette méthode est utilisée pour vérifier si les paramètres d'entrée de la règle sont valides. Voici les bonnes pratiques associées :
-
Vérifier si le nombre correct de paramètres est répertorié.
-
Vérifier si le nom du paramètre est correct.
-
Vérifier si la valeur du paramètre présente le type approprié.
-
Si le paramètre est un entier, vérifier s'il se situe dans des limites raisonnables.
-
Si le nombre d'options possibles pour le paramètre est limité, vérifier si le paramètre correspond à l'une de ces options.
-
Si le paramètre est une chaîne, vérifier si sa longueur est raisonnable et supprimer tout espace avant ou après la valeur.
-
Vérifier si la sensibilité à la casse est traitée de manière appropriée.
-
Limiter si possible la saisie des paramètres. Par exemple, si vous recevez une liste de caractères séparés par des virgulesARNs, assurez-vous que les seuls caractères autorisés sont les virgules et les caractères pris en charge par. ARNs
Paramètres
rule_parameters
est un dictionnaire des paramètres d'entrée de la règle.Syntaxe de retour
Si l'un des paramètres n'est pas valide, vous pouvez générer une erreur
InvalidParametersError
:from rdklib import InvalidParametersError raise InvalidParametersError("Error message to display")
Si les paramètres sont tous valides, la méthode doit renvoyer un dictionnaire :
return valid_rule_parameters
-
- evaluate_change
-
Description
Cette méthode est utilisée pour la logique d'évaluation d'une règle déclenchée par des modifications.
Paramètres
event
est l' AWS Lambda événement proposé par AWS Config. Il s'agit d'un document JSON formaté qui contient les données nécessaires au fonctionnement d'une fonction Lambda. Pour des exemples, voir Exemples d'événements pour AWS Config les règles.client_factory
est l' ClientFactory objet à utiliser pour la règle. La ClientFactory classe crée ou réutilise un client boto3, qui fournit une interface de bas niveau à un service. AWS Les méthodes client boto3 sont mappées à un AWS serviceAPI, ce qui signifie que les opérations de service sont mappées à des méthodes client du même nom et fournissent un accès aux mêmes paramètres d'opération. Pour une liste des services disponibles, consultez Services disponiblesdans la documentation Boto3 Docs. La syntaxe de demande de
client_factory
est la suivante :response = client_factory.build_client( service='string')
Par exemple :
iam_client = client_factory.build_client("iam")
Note
Le nom boto3 du AWS service est obligatoire.
configuration_item
est le dictionnaire de l'élément de configuration complet, même s'il est surdimensionné. Un élément de configuration représente une point-in-time vue des différents attributs d'une AWS ressource prise en charge. Pour plus d'informations sur le contenu deConfigurationItem
, voir ConfigurationItemla AWS Config API référence.valid_rule_parameters
est la sortie de la méthodeevaluate_parameters()
.Syntaxe de retour
La méthode doit renvoyer un ou plusieurs des éléments suivants :
[Evaluation(ComplianceType.COMPLIANT)]
[Evaluation(ComplianceType.NON_COMPLIANT)]
[Evaluation(ComplianceType.NOT_APPLICABLE)]
Note
Les règles signalant les ressources supprimées doivent renvoyer le résultat de l'évaluation
NOT_APPLICABLE
afin d'éviter des évaluations de règles inutiles.Vous devez utiliser des annotations pour toutes les évaluations non conformes. Par exemple :
[return [Evaluation(ComplianceType.NON_COMPLIANT, annotation="Explanation for why the rule is NON_COMPLIANT")]]
- evaluate_periodic
-
Description
Cette méthode est utilisée pour évaluer une règle périodique.
Paramètres
event
est l' AWS Lambda événement proposé par AWS Config. Il s'agit d'un document JSON formaté qui contient les données nécessaires au fonctionnement d'une fonction Lambda. Pour des exemples, voir Exemples d'événements pour AWS Config les règles.client_factory
est l' ClientFactory objet à utiliser pour la règle. La ClientFactory classe crée ou réutilise un client boto3, qui fournit une interface de bas niveau à un service. AWS Les méthodes client boto3 sont mappées à un AWS serviceAPI, ce qui signifie que les opérations de service sont mappées à des méthodes client du même nom et fournissent un accès aux mêmes paramètres d'opération. Pour une liste des services disponibles, consultez Services disponiblesdans la documentation Boto3 Docs. La syntaxe de demande de
client_factory
est la suivante :response = client_factory.build_client( service='string')
Par exemple :
iam_client = client_factory.build_client("iam")
Note
Le nom boto3 du AWS service est obligatoire.
valid_rule_parameters
est la sortie de la méthodeevaluate_parameters()
.Syntaxe de retour
La méthode doit renvoyer un ou plusieurs des éléments suivants :
[Evaluation(ComplianceType.COMPLIANT)]
[Evaluation(ComplianceType.NON_COMPLIANT)]
[Evaluation(ComplianceType.NOT_APPLICABLE)]
Note
Les règles signalant les ressources supprimées doivent renvoyer le résultat de l'évaluation
NOT_APPLICABLE
afin d'éviter des évaluations de règles inutiles.Vous devez utiliser des annotations pour toutes les évaluations non conformes. Par exemple :
[return [Evaluation(ComplianceType.NON_COMPLIANT, annotation="Explanation for why the rule is NON_COMPLIANT")]]
- lambda_handler
-
Description
Il ne devrait pas être nécessaire de modifier cette méthode. Le gestionnaire Lambda est utilisé pour traiter les événements. La fonction s'exécute lorsque AWS Lambda l'
event
objet est transmis à lahandler
méthode. Pour plus d'informations, consultez Gestionnaire de fonctions Lambda dans Python.Paramètres
event
est l' AWS Lambda événement proposé par AWS Config. Il s'agit d'un document JSON formaté qui contient les données nécessaires au fonctionnement d'une fonction Lambda. Pour des exemples, voir Exemples d'événements pour AWS Config les règles.context
est un objet transmis à votre fonction par Lambda au moment de l'exécution. Cet objet contient des méthodes et des propriétés qui fournissent des informations et des méthodes susceptibles d'être utilisées par la fonction pendant son exécution. Sachez que le contexte n'est plus utilisé dans les nouvelles versions de Lambda.