As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Componentes de uma AWS Config regra
AWS Configas regras avaliam as definições de configuração de seus AWS recursos. Há dois tipos de regras: regras AWS Config gerenciadas e regras AWS Config personalizadas.
As regras gerenciadas do AWS Config são regras predefinidas e personalizáveis criadas pelo AWS Config. Para obter uma lista de regras gerenciadas, consulte Lista de regras AWS Config gerenciadas.
Regras personalizadas do AWS Config são regras que você cria do zero. Há duas maneiras de criar regras AWS Config personalizadas: com funções do Lambda (Guia do AWS Lambda desenvolvedor) e com o Guard (Guard GitHub Repository
Esta página discute a estrutura das definições de regras e as melhores práticas sobre como escrever regras com Python usando o Kit de Desenvolvimento de Regras (RDK) e a AWS Config Biblioteca do Kit de Desenvolvimento de AWS Config Regras (RDKLib). Para ver um passo a passo sobre como criar regras de política AWS Config personalizadas, consulte Criação de regras de política AWS Config personalizadas. Para ver um passo a passo sobre como criar regras AWS Config personalizadas do Lambda, consulte Criação de regras AWS Config personalizadas do Lambda.
Definições de regras
AWS Configas definições de regras contêm os seguintes campos:
-
identificador
-
Nome padrão
-
descrição
-
escopo
-
Detalhes da fonte
-
compulsoryInputParameterDetalhes
-
optionalInputParameterDetalhes
-
rótulos
-
supportedEvaluationModes
O exemplo JSON a seguir mostra a definição da regra para a regra elasticsearch-logs-to-cloudwatchgerenciada.
{ "identifier": "ELASTICSEARCH_LOGS_TO_CLOUDWATCH", "defaultName": "elasticsearch-logs-to-cloudwatch", "description": "Checks if Amazon OpenSearch Service domains are configured to send logs to Amazon CloudWatch Logs. The rule is COMPLIANT if a log is enabled for an Amazon ES domain. This rule is NON_COMPLIANT if logging is not configured." "scope": { "resourceTypes": [ "AWS::Elasticsearch::Domain" ] }, "sourceDetails": [ { "eventSource": "AWS_CONFIG", "messageType": "ConfigurationItemChangeNotification" }, { "eventSource": "AWS_CONFIG", "messageType": "OversizedConfigurationItemChangeNotification" } ], "compulsoryInputParameterDetails": {}, "optionalInputParameterDetails": { "logTypes": { "type": "CSV", "description": "Comma-separated list of logs that are enabled. Valid values are 'search', 'index', 'error'." } }, "labels": [ "Elasticsearch", "CloudWatch", "Logs" ], "supportedEvaluationModes": [ { "evaluationMode": "DETECTIVE" }, { "evaluationMode": "PROACTIVE" } ] }
Metadados da regra
- identificador
-
O identificador da regra funciona como o ID de uma regra AWS Config gerenciada. Os identificadores de regras são escritos em ALL_CAPS_WITH_UNDERSCORES. Por exemplo,
ELASTICSEARCH_LOGS_TO_CLOUDWATCH
é o identificador da regra eelasticsearch-logs-to-cloudwatch
o nome da regra. O identificador da regra é usado para identificar uma regra ao criar regras AWS Config gerenciadas com AWS CloudFormation modelos ou ao chamar a PutConfigRuleAPI.nota
Para algumas regras, o identificador da regra é diferente do nome da regra. Por exemplo, o identificador da regra para
restricted-ssh
éINCOMING_SSH_DISABLED
. - Nome padrão
-
O DefaultName é o nome que as instâncias de uma regra receberão por padrão.
- descrição
-
A descrição da regra fornece contexto para o que a regra avalia. O AWS Config console tem um limite de 256 caracteres. Como prática recomendada, a descrição da regra deve começar com “Verifica se” e incluir uma descrição do cenário NON_COMPLIANT. Os nomes dos serviços devem ser escritos na íntegra, começando com AWS ou Amazon, quando mencionados pela primeira vez na descrição da regra. Por exemplo, AWS CloudTrail ou Amazon CloudWatch em vez de CloudTrail ou CloudWatch para primeiro uso. Os nomes dos serviços podem ser abreviados após a referência subsequente.
- escopo
-
O escopo determina quais tipos de recursos a regra visa. Para obter uma lista de tipos de recursos compatíveis, consulte Tipos de recursos com suporte.
- Detalhes da fonte
-
Os SourceDetails determinam o tipo de gatilho da regra. Há dois tipos de acionadores: alterações de configuração para regras acionadas por alterações e periódicas para regras periódicas. Você também pode configurar sua regra para usar os dois tipos acionados no que é chamado de regra híbrida. Para obter mais informações, consulte Tipos de acionadores
ConfigurationItemChangeNotification
eOversizedConfigurationItemChangeNotification
são usados para regras acionadas por mudanças. Quando o AWS Config detecta uma alteração de configuração de um recurso, ele envia uma notificação de item de configuração. Se a notificação exceder o tamanho máximo permitido pelo Amazon Simple Notification Service (Amazon SNS), a notificação incluirá um breve resumo do item de configuração. Você pode ver a notificação completa no local do bucket do S3 especificado no campo s3BucketLocation.ScheduleNotification
é usado para regras periódicas.Se houver uma regra híbrida que seja avaliada periodicamente e por alterações de configuração, todos os três tipos de notificações poderão ser usados.
- compulsoryInputParameterDetalhes
-
Os compulsoryInputParameter Detalhes são usados para parâmetros necessários para que uma regra faça sua avaliação. Por exemplo, a regra
access-keys-rotated
gerenciada incluimaxAccessKeyAge
como parâmetro obrigatório. Se um parâmetro for necessário, ele não será marcado como (opcional). Para cada parâmetro, um tipo deve ser especificado. O tipo pode ser “String”, “int”, “double”, “CSV”, “boolean” e "StringMap”. - optionalInputParameterDetalhes
-
Os optionalInputParameter Detalhes são usados para parâmetros que são opcionais para que uma regra faça sua avaliação. Por exemplo, a regra
elasticsearch-logs-to-cloudwatch
gerenciada incluilogTypes
como parâmetro opcional. Para cada parâmetro, um tipo deve ser especificado. O tipo pode ser “String”, “int”, “double”, “CSV”, “boolean” e "StringMap”. - rótulos
-
Os rótulos podem ser usados para marcar regras. Por exemplo, todas as
codedeploy-auto-rollback-monitor-enabled
regrascodedeploy-lambda-allatonce-traffic-shift-disabled
gerenciadas e as regras gerenciadas incluem o rótuloCodeDeploy
.codedeploy-ec2-minimum-healthy-hosts-configured
Você pode usar rótulos para ajudar a gerenciar, pesquisar e filtrar regras. - supportedEvaluationModes
-
Isso supportedEvaluationModes determina quando os recursos serão avaliados, antes de um recurso ser implantado ou depois de um recurso ter sido implantado.
DETECTIVE
é usado para avaliar recursos que já foram implantados. Isso permite que você avalie as definições de configuração dos seus recursos existentes.PROACTIVE
é usado para avaliar os recursos antes de serem implantados.Isso permite avaliar se um conjunto de propriedades do recurso, se usado para definir um AWS recurso, seria COMPATÍVEL ou NÃO COMPATÍVEL, considerando o conjunto de regras proativas que você tem em sua conta na sua região.
Você pode especificar o supportedEvaluationModes para
DETECTIVE
PROACTIVE
, ou ambosDETECTIVE
PROACTIVE
e. Você deve especificar um modo de avaliação e esse campo não pode ficar vazio.Para obter mais informações, consulte Modos de avaliação. Para obter uma lista de regras gerenciadas que oferecem suporte à avaliação proativa, consulte Lista de regras AWS Config gerenciadas por modo de avaliação.
nota
As regras proativas não corrigem os recursos sinalizados como NÃO COMPLIANT nem impedem que sejam implantados.
Estrutura da regra
Esta seção contém informações sobre como usar o Kit de Desenvolvimento de AWS Config Regras (RDK) e a Biblioteca do Kit de Desenvolvimento de AWS Config Regras (RDKLib). Para obter mais informações sobre o RDK ou o RDKLib, consulte os repositórios e. aws-config-rdkaws-config-rdklib
Regras de escrita
-
Siga as etapas em Instalando AWS CLI o.
-
Siga as etapas em Configuração AWS Config com o console ou Configuração AWS Config com AWS CLI o. Para obter informações sobre as AWS regiões onde AWS Config há suporte, selecione sua região na lista de serviços AWS regionais
. -
Instale o RDK usando o método recomendado com pip:
pip install rdk
nota
Antes de usar o pip, verifique se ele está instalado em sua máquina.
-
Instale o RDKlib, usando o método recomendado com pip:
pip install rdklib
nota
Antes de usar o pip, verifique se ele está instalado em sua máquina.
-
Para criar uma regra que é acionada por uma alteração no tipo de recurso especificado, execute o seguinte comando:
rdk create
YOUR_RULE_NAME
--runtime python3.6-lib --resource-typesAWS::Resource::Type
O exemplo a seguir cria uma regra que é acionada por uma alteração no tipo de
AWS::IAM::User
recurso:rdk create MFA_ENABLED_RULE --runtime python3.6-lib --resource-types AWS::IAM::User
A seguir estão os sinalizadores que você pode usar com o
rdk create
comando para regras acionadas por alterações: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 targetsnota
Para usar o RDKLib, o tempo de execução da regra deve ser definido como.
python3.6-lib
Depois de executar
rdk create
, você verá um novo diretório com o nome da regra e 3 arquivos nele:-
- Arquivo Python onde a lógica da regra é armazenadaRULE_NAME
.py -
- Arquivo Python onde os testes unitários da regra são armazenadosRULE_NAME
_test.py -
parameters.json
- Arquivo JSON para as configurações de implantação do RDK
-
-
A próxima etapa é escrever a lógica da regra. Você só precisará editar o
arquivo.py. Se você abrir oRULE_NAME
arquivo.py, verá um modelo no qual poderá adicionar lógica de regras. A seguir está o modelo que foi gerado para 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)
O exemplo a seguir é uma versão editada do modelo MFA_ENABLED_RULE com a lógica da regra. A regra verifica se os usuários do IAM têm a autenticação multifator (MFA) ativada. A regra é NON_COMPLIANT se um usuário do IAM não tiver a MFA desativada. Para obter mais informações sobre a lógica de regras e os métodos fornecidos no modelo, consulteLógica de regras.
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)
-
A próxima etapa é instalar a camada RDKlib AWS com o AWS console ou. AWS CLI O RDKlib foi projetado para funcionar como uma camada. AWS Lambda Ele permite que você use a biblioteca sem precisar incluí-la em seu pacote de implantação.
-
Para instalar a camada RDKlib com o AWS console, execute as seguintes etapas:
Abra o console do AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Selecione Criar função.
-
Na página Criar função, selecione Procurar repositório de aplicativos sem servidor e, no campo de pesquisa, digite rdklib.
-
Revise os detalhes da função e, em seguida, implante-a. Você não deveria ter que fazer nenhuma alteração.
-
No painel de navegação esquerdo, escolha a página Camadas. Em seguida, escolha a camada Lambda que você acabou de criar e copie o Amazon Resource Name (ARN) da camada Lambda. Você precisará do ARN da camada Lambda ao implantar sua regra.
-
Para instalar a camada RDKlib com oAWS CLI, execute os seguintes comandos:
-
Crie o conjunto de alterações para a camada RDKLib.
aws serverlessrepo create-cloud-formation-change-set --application-id arn:aws:serverlessrepo:ap-southeast-1:711761543063:applications/rdklib --stack-name RDKlib-Layer
Ele retorna a seguinte saída:
{ "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" }
-
Execute o conjunto de alterações. Você pode copiar/colar o ARN completo do conjunto de alterações (ChangeSetIdda saída gerada na etapa anterior) para personalizar o seguinte comando:
aws cloudformation execute-change-set --change-set-name
NAME_OF_THE_CHANGE_SET
-
Retorne todos os recursos associados que fazem parte da pilha implantada.
aws cloudformation describe-stack-resources --stack-name serverlessrepo-RDKlib-Layer
Ele retorna a seguinte saída:
{ "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" } } ] }
-
Copie o ARN da camada Lambda da saída gerada na etapa anterior. O ARN da camada Lambda é o.
PhysicalResourceId
"PhysicalResourceId": "arn:aws:lambda:us-east-1:123456789012:layer:rdklib-layer:1"
-
-
-
A próxima etapa é fornecer uma função a ser assumida pela função Lambda. Por padrão, as funções do Lambda tentam assumir a
AWSServiceRoleForConfig
função, o que não é permitido. Você precisa criar uma função com a políticaAWS_ConfigRole
gerenciada. A função deve ter uma relação de confiança AWS Config e todas as funções no caminho /rdk/ devem assumir a função. Veja a seguir um exemplo de política de confiança:{ "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/*" } } } ] }Usando essa política de confiança, execute o seguinte comando:
aws iam create-role --role-name
your-role-name
--assume-role-policy-document file://trust-policy.jsonAgora, execute o comando a seguir para atualizar o parâmetro de entrada
ExecutionRoleName
e fornecer o nome da função:rdk modify
YOUR_RULE_NAME
--input-parameters '{"ExecutionRoleName":"your-role-name
"}'Você também pode usar
rdk modify
para atualizar os detalhes da regra acionada por alterações usando os seguintes sinalizadores: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 -
A etapa final é implantar sua regra. Para implantar sua regra, execute o seguinte comando com o ARN da camada Lambda da etapa 3:
rdk deploy
YOUR_RULE_NAME
--rdklib-layer-arnYOUR_RDKLIB_LAYER_ARN
-
A regra agora está implantada. Você pode usar o AWS Config console para verificar se a regra está funcionando conforme o esperado.
-
Para criar uma regra que é acionada periodicamente para um tipo de recurso especificado, execute o seguinte comando:
rdk create
YOUR_RULE_NAME
--runtime python3.6-lib --resource-typesAWS::Resource::Type
--maximum-frequencyEXECUTION_FREQUENCY
O exemplo a seguir cria uma regra que é acionada a cada 24 horas para o tipo de
AWS::IAM::User
recurso:rdk create MFA_ENABLED_RULE --runtime python3.6-lib --resource-types AWS::IAM::User --maximum-frequency TwentyFour_Hours
A seguir estão os sinalizadores que você pode usar com o
rdk create
comando para regras periódicas: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']nota
Para usar o RDKLib, o tempo de execução da regra deve ser definido como.
python3.6-lib
Depois de executar
rdk create
, você verá um novo diretório com o nome da regra e 3 arquivos nele:-
- Arquivo Python onde a lógica da regra é armazenadaRULE_NAME
.py -
- Arquivo Python onde os testes unitários da regra são armazenadosRULE_NAME
_test.py -
parameters.json
- Arquivo JSON para as configurações de implantação do RDK
-
-
A próxima etapa é escrever a lógica da regra. Você só precisará editar o
arquivo.py. Se você abrir oRULE_NAME
arquivo.py, verá um modelo no qual poderá adicionar lógica de regras. A seguir está o modelo que foi gerado para 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)
O modelo usa como padrão as regras acionadas por alterações. Em vez disso, adicione sua lógica ao
evaluate_periodic
método. O exemplo a seguir é uma versão editada do modelo MFA_ENABLED_RULE com a lógica da regra. A regra verifica se os usuários do IAM têm a autenticação multifator (MFA) ativada. A regra é NON_COMPLIANT se um usuário do IAM não tiver a MFA desativada. Para obter mais informações sobre a lógica de regras e os métodos fornecidos no modelo, consulteLógica de regras.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)
-
A próxima etapa é instalar a camada RDKlib AWS com o AWS console ou. AWS CLI O RDKlib foi projetado para funcionar como uma camada. AWS Lambda Ele permite que você use a biblioteca sem precisar incluí-la em seu pacote de implantação.
-
Para instalar a camada RDKlib com o AWS console, execute as seguintes etapas:
Abra o console do AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Selecione Criar função.
-
Na página Criar função, selecione Procurar repositório de aplicativos sem servidor e, no campo de pesquisa, digite rdklib.
-
Revise os detalhes da função e, em seguida, implante-a. Você não deveria ter que fazer nenhuma alteração.
-
No painel de navegação esquerdo, escolha a página Camadas. Em seguida, escolha a camada Lambda que você acabou de criar e copie o Amazon Resource Name (ARN) da camada Lambda. Você precisará do ARN da camada Lambda ao implantar sua regra.
-
Para instalar a camada RDKlib com oAWS CLI, execute os seguintes comandos:
-
Crie o conjunto de alterações para a camada RDKLib.
aws serverlessrepo create-cloud-formation-change-set --application-id arn:aws:serverlessrepo:ap-southeast-1:711761543063:applications/rdklib --stack-name RDKlib-Layer
Ele retorna a seguinte saída:
{ "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" }
-
Execute o conjunto de alterações. Você pode copiar/colar o ARN completo do conjunto de alterações (ChangeSetIdda saída gerada na etapa anterior) para personalizar o seguinte comando:
aws cloudformation execute-change-set --change-set-name
NAME_OF_THE_CHANGE_SET
-
Retorne todos os recursos associados que fazem parte da pilha implantada.
aws cloudformation describe-stack-resources --stack-name serverlessrepo-RDKlib-Layer
Ele retorna a seguinte saída:
{ "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" } } ] }
-
Copie o ARN da camada Lambda da saída gerada na etapa anterior. O ARN da camada Lambda é o.
PhysicalResourceId
"PhysicalResourceId": "arn:aws:lambda:us-east-1:123456789012:layer:rdklib-layer:1"
-
-
-
A próxima etapa é fornecer uma função a ser assumida pela função Lambda. Por padrão, as funções do Lambda tentam assumir a
AWSServiceRoleForConfig
função, o que não é permitido. Você precisa criar uma função com a políticaAWS_ConfigRole
gerenciada. A função deve ter uma relação de confiança AWS Config e todas as funções no caminho /rdk/ devem assumir a função. Veja a seguir um exemplo de política de confiança:{ "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/*" } } } ] }Usando essa política de confiança, execute o seguinte comando:
aws iam create-role --role-name
your-role-name
--assume-role-policy-document file://trust-policy.jsonAgora, execute o comando a seguir para atualizar o parâmetro de entrada
ExecutionRoleName
e fornecer o nome da função:rdk modify
YOUR_RULE_NAME
--input-parameters '{"ExecutionRoleName":"your-role-name
"}'Você também pode usar
rdk modify
para atualizar os detalhes da regra periódica usando os seguintes sinalizadores: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'] -
A etapa final é implantar sua regra. Para implantar sua regra, execute o seguinte comando com o ARN da camada Lambda da etapa 3:
rdk deploy
YOUR_RULE_NAME
--rdklib-layer-arnYOUR_RDKLIB_LAYER_ARN
-
A regra agora está implantada. Você pode usar o AWS Config console para verificar se a regra está funcionando conforme o esperado.
Lógica de regras
O exemplo de código Python a seguir é um modelo para escrever uma regra usando o RDK e o RKDLib. Você só deve fazer alterações nos evaluate_periodic
métodos evaluate_parameters
evaluate_change
, e ou escrever funções completamente novas para ajudar com a lógica, se necessário. Para obter os pré-requisitos para escrever regras com o RDK e o RDKLib, consulte. Pré-requisitos
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)
- RECURSOS_APLICÁVEIS
-
APPLICABLE_RESOURCES
são o (s) tipo (s) de recurso que a regra visa. Se usada, essa deve ser uma variável global definida para o (s) tipo (s) de recurso que a regra visa. Para obter uma lista de tipos de recursos compatíveis, consulte Tipos de recursos com suporte. - avaliar_parâmetros
-
Descrição
Esse método é usado para verificar se os parâmetros de entrada da regra são válidos. A seguir estão as melhores práticas:
-
Verifique se o número correto de parâmetros está listado.
-
Verifique se o nome do parâmetro está correto.
-
Verifique se o valor do parâmetro é do tipo correto.
-
Se o parâmetro for um número inteiro, verifique se o parâmetro está entre limites razoáveis.
-
Se o parâmetro tiver um número limitado de opções possíveis, verifique se o parâmetro é uma dessas opções.
-
Se o parâmetro for uma string, verifique se ele tem um tamanho razoável e corte qualquer espaço antes ou depois do valor.
-
Verifique se alguma distinção entre maiúsculas e minúsculas foi tratada adequadamente.
-
Limite a entrada de parâmetros quando possível. Por exemplo, se você estiver recebendo uma lista de ARNs separados por vírgula, certifique-se de que os únicos caracteres permitidos sejam vírgulas e os caracteres suportados por ARNs.
Parâmetros
rule_parameters
é um dicionário de parâmetros de entrada para a regra.Sintaxe de retorno
Se um dos parâmetros não for válido, você poderá gerar um
InvalidParametersError
erro:from rdklib import InvalidParametersError raise InvalidParametersError("Error message to display")
Se os parâmetros forem todos válidos, o método deverá retornar um dicionário:
return valid_rule_parameters
-
- avaliar_mudança
-
Descrição
Esse método é usado para que a lógica avalie uma regra acionada por alterações.
Parâmetros
event
é o AWS Lambda evento fornecido porAWS Config. É um documento formatado em JSON que contém dados para a operação de uma função Lambda. Para ver exemplos, consulte Exemplos de eventos para AWS Config regras.client_factory
é o ClientFactory objeto a ser usado para a regra. A ClientFactory classe cria ou reutiliza um cliente boto3, que fornece uma interface de baixo nível para um serviço. AWS Os métodos do cliente boto3 são mapeados com uma API AWS de serviço, o que significa que as operações do serviço mapeiam os métodos do cliente com o mesmo nome e fornecem acesso aos mesmos parâmetros de operação. Para obter uma lista dos serviços disponíveis, consulte Serviços disponíveisna documentação do Boto3 Docs. A sintaxe da solicitação de
client_factory
é a seguinte:response = client_factory.build_client( service='string')
Por exemplo:
iam_client = client_factory.build_client("iam")
nota
O nome boto3 do AWS serviço é obrigatório.
configuration_item
é o dicionário do item de configuração completo, mesmo que seja superdimensionado. Um item de configuração representa uma point-in-time visualização dos vários atributos de um AWS recurso suportado. Para obter informações sobre o conteúdo doConfigurationItem
, consulte ConfigurationItema Referência da AWS Config API.valid_rule_parameters
é a saída doevaluate_parameters()
método.Sintaxe de retorno
O método deve retornar um ou mais dos seguintes itens:
[Evaluation(ComplianceType.COMPLIANT)]
[Evaluation(ComplianceType.NON_COMPLIANT)]
[Evaluation(ComplianceType.NOT_APPLICABLE)]
Você deve usar anotações para todas as avaliações não compatíveis. Por exemplo:
[return [Evaluation(ComplianceType.NON_COMPLIANT, annotation="Explanation for why the rule is NON_COMPLIANT")]]
- avaliar_periódico
-
Descrição
Esse método é usado para avaliar uma regra periódica.
Parâmetros
event
é o AWS Lambda evento fornecido porAWS Config. É um documento formatado em JSON que contém dados para a operação de uma função Lambda. Para ver exemplos, consulte Exemplos de eventos para AWS Config regras.client_factory
é o ClientFactory objeto a ser usado para a regra. A ClientFactory classe cria ou reutiliza um cliente boto3, que fornece uma interface de baixo nível para um serviço. AWS Os métodos do cliente boto3 são mapeados com uma API AWS de serviço, o que significa que as operações do serviço mapeiam os métodos do cliente com o mesmo nome e fornecem acesso aos mesmos parâmetros de operação. Para obter uma lista dos serviços disponíveis, consulte Serviços disponíveisna documentação do Boto3 Docs. A sintaxe da solicitação de
client_factory
é a seguinte:response = client_factory.build_client( service='string')
Por exemplo:
iam_client = client_factory.build_client("iam")
nota
O nome boto3 do AWS serviço é obrigatório.
valid_rule_parameters
é a saída doevaluate_parameters()
método.Sintaxe de retorno
O método deve retornar um ou mais dos seguintes itens:
[Evaluation(ComplianceType.COMPLIANT)]
[Evaluation(ComplianceType.NON_COMPLIANT)]
[Evaluation(ComplianceType.NOT_APPLICABLE)]
Você deve usar anotações para todas as avaliações não compatíveis. Por exemplo:
[return [Evaluation(ComplianceType.NON_COMPLIANT, annotation="Explanation for why the rule is NON_COMPLIANT")]]
- lambda_handler
-
Descrição
Você não deve precisar modificar esse método. O manipulador lambda é usado para processar eventos. A função é executada quando AWS Lambda passa o
event
objeto para ohandler
método. Para obter mais informações, consulte Manipulador de funções do Lambda em Python.Parâmetros
event
é o AWS Lambda evento fornecido porAWS Config. É um documento formatado em JSON que contém dados para a operação de uma função Lambda. Para ver exemplos, consulte Exemplos de eventos para AWS Config regras.context
é um objeto passado para sua função pelo Lambda em tempo de execução. Esse objeto fornece métodos e propriedades que fornecem informações e métodos que a função pode usar enquanto é executada. Observe que nas versões mais recentes do Lambda, o contexto não é mais usado.