Componentes de uma AWS Config regra - AWS Config

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 Config as regras avaliam as configurações dos seus AWS recursos. Há dois tipos de regras: regras gerenciadas pelo AWS Config e regras personalizadas do AWS Config .

AWS Config As regras gerenciadas são regras predefinidas e personalizáveis criadas por. AWS Config Para obter uma lista de regras gerenciadas, consulte Lista de regras AWS Config gerenciadas.

AWS Config Regras personalizadas são regras que você cria do zero. Há duas maneiras de criar regras AWS Config personalizadas: com as funções Lambda (Guia do AWS Lambda desenvolvedor) e com o Guard (Guard GitHub Repository), uma linguagem. policy-as-code AWS Config as regras personalizadas criadas com AWS Lambda são chamadas de Regras Lambda AWS Config Personalizadas e as regras AWS Config personalizadas criadas com o Guard são chamadas de Regras de Política AWS Config Personalizadas.

Esta página discute os metadados das regras AWS Config gerenciadas e as melhores práticas sobre como AWS Config criar regras personalizadas com Python usando o Rules Development Kit (RDK) e AWS Config a AWS Config Rules Development Kit Library (RDKlib).

Para ver um passo a passo mostrando 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 mostrando como criar regras personalizadas do AWS Config Lambda, consulte Criação de regras personalizadas AWS Config do Lambda.

AWS Config metadados de regras gerenciadas

AWS Config as regras gerenciadas podem conter os seguintes metadados mutáveis:

defaultName

O defaultName é o nome que as instâncias de uma regra receberão por padrão.

descrição

A description da regra fornece contexto sobre o que a regra avalia. O console do AWS Config 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 por extenso 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 o primeiro uso. Os nomes dos serviços podem ser abreviados após referência subsequente.

scope

O escopo determina quais tipos de recursos a regra visa. Para obter uma lista de tipos de recursos compatíveis, consulte Supported Resource Types.

Detalhes obrigatórios InputParameter

Os compulsoryInputParameter detalhes são usados para parâmetros necessários para que uma regra faça sua avaliação. Por exemplo, a regra gerenciada do access-keys-rotated inclui maxAccessKeyAge 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”.

InputParameterDetalhes opcionais

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 gerenciada elasticsearch-logs-to-cloudwatch inclui logTypes como parâmetro opcional. Para cada parâmetro, um tipo deve ser especificado. O tipo pode ser “String”, “int”, “double”, “CSV”, “boolean” e "StringMap”.

suportado EvaluationModes

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 que eles sejam implantados.

Isso permite avaliar se um conjunto de propriedades de recursos, 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 DETECTIVEPROACTIVE,, ou ambos DETECTIVE PROACTIVE e. Você deve especificar um modo de avaliação e esse campo não pode permanecer 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 marcados como NON_COMPLIANT nem impedem que eles sejam implantados.

AWS Config estrutura de regras personalizadas

Esta seção contém informações sobre como usar o AWS Config Rules Development Kit (RDK) e a AWS Config Rules Development Kit Library (RDKLib). Para obter mais informações sobre o RDK ou o RDKlib, consulte os repositórios e aws-config-rdklib. aws-config-rdk GitHub

Regras de escrita

  1. Siga as etapas em Instalação da AWS CLI.

  2. Siga as etapas em Configurando AWS Config com o console ou Configurando AWS Config com AWS CLI o. Para obter informações sobre as AWS regiões em AWS Config que há suporte, selecione sua região na lista de serviços AWS regionais.

  3. Instale o RDK usando o método recomendado com pip:

    pip install rdk
    nota

    Antes de usar o pip, verifique se ele está instalado na sua máquina.

  4. Instale a RDKLib usando o método recomendado com pip:

    pip install rdklib
    nota

    Antes de usar o pip, verifique se ele está instalado na sua máquina.

  1. Para criar uma regra que seja acionada por uma mudança no tipo de recurso especificado, execute o seguinte comando:

    rdk create YOUR_RULE_NAME --runtime python3.6-lib --resource-types AWS::Resource::Type

    O exemplo a seguir cria uma regra que é acionada por uma mudança no tipo de recurso AWS::IAM::User:

    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 comando rdk create para regras acionadas por mudanças:

    rdk create RULE_NAME --runtime pythonX.X-lib // Python runtime version --input-parameters REQUIRED_PARAMETERS // Parameters that are required for a rule to do its evaluation --optional-parameters OPTIONAL_PARAMETERS // Parameters that are optional for a rule to do its evaluation --resource-types AWS::Resource::Type // Resource type(s) that the rule targets
    nota

    Para usar a RDKlib, o tempo de execução da regra deve ser definido como python3.6-lib.

    Depois de executar o rdk create, você deve ver um novo diretório com o nome da regra e três arquivos nele:

    • RULE_NAME.py: arquivo Python onde a lógica da regra é armazenada.


    • RULE_NAME_test.py: arquivo Python onde os testes unitários da regra são armazenados.

    • parameters.json: arquivo JSON para as configurações de implantação do RDK.

  2. A próxima etapa é escrever a lógica da regra. Você só precisará editar o arquivo RULE_NAME.py. Se você abrir o arquivo RULE_NAME.py, verá um modelo onde poderá adicionar a lógica das regras. Veja abaixo o modelo que foi gerado para MFA_ENABLED_RULE:

    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 autenticação multifator (MFA) habilitada. A regra será NON_COMPLIANT se um usuário do IAM não tiver a MFA habilitada. Para obter mais informações sobre a lógica de regras e os métodos fornecidos no modelo, consulte Lógica da regra.

    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)
  3. A próxima etapa é instalar a camada RDKlib AWS com o AWS console ou. AWS CLI A RDKlib foi projetada para funcionar como uma camada do AWS Lambda . Ela permite que você use a biblioteca sem precisar incluí-la no pacote de implantação.

    • Para instalar a camada RDKlib com o AWS console, siga as seguintes etapas:

      1. Abra o AWS Serverless Application Repository console em https://console.aws.amazon.com/serverlessrepo.

      2. No menu de navegação à esquerda, escolha Aplicativos disponíveis.

      3. Pesquise rdklib e escolha rdklib.

      4. Revise os detalhes da função e implante-a. Nenhuma alteração deve ser necessária.

      5. Na seção Recursos na página Visão geral, copie o Amazon Resource Name (ARN) da camada Lambda. Você precisará do ARN da camada do Lambda ao implantar a regra.

    • Para instalar a camada RDKlib com o AWS CLI, execute os seguintes comandos:

      1. Crie o conjunto de alterações para a RDKlib-Layer.

        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" }
      2. Execute o conjunto de alterações. Você pode copiar/colar o ARN completo do conjunto de alterações ChangeSetId (da saída gerada na etapa anterior) para personalizar o seguinte comando:

        aws cloudformation execute-change-set --change-set-name NAME_OF_THE_CHANGE_SET
      3. 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" } } ] }
      4. Copie o ARN da camada do Lambda da saída gerada na etapa anterior. O ARN da camada do Lambda é o PhysicalResourceId.

        "PhysicalResourceId": "arn:aws:lambda:us-east-1:123456789012:layer:rdklib-layer:1"
  4. A próxima etapa é definir uma função para a função do Lambda assumir. Por padrão, as funções do Lambda tentam assumir a função AWSServiceRoleForConfig, o que não é permitido. Você precisa criar uma função com a política gerenciada AWS_ConfigRole. A função deve ter uma relação de confiança com o AWS Config e todas as funções no caminho /rdk/ devem assumi-la. Veja abaixo 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.json

    Agora, execute o comando abaixo para atualizar o parâmetro de entrada para 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 mudanças usando os seguintes sinalizadores:

    rdk modify RULE_NAME --input-parameters REQUIRED_PARAMETERS // Parameters that are required for a rule to do its evaluation --optional-parameters OPTIONAL_PARAMETERS // Parameters that are optional for a rule to do its evaluation --resource-types AWS::Resource::Type // Resource type(s) that the rule targets
  5. A etapa final é implantar a regra. Para implantá-la, execute o seguinte comando com o ARN da camada do Lambda da etapa 3:

    rdk deploy YOUR_RULE_NAME --rdklib-layer-arn YOUR_RDKLIB_LAYER_ARN
  6. A regra agora está implantada. Você pode usar o AWS Config console para verificar se a regra está funcionando conforme o esperado.

  1. Para criar uma regra que seja acionada periodicamente para um tipo de recurso especificado, execute o seguinte comando:

    rdk create YOUR_RULE_NAME --runtime python3.6-lib --resource-types AWS::Resource::Type --maximum-frequency EXECUTION_FREQUENCY

    O exemplo a seguir cria uma regra que é acionada a cada 24 horas para o tipo de recurso AWS::IAM::User:

    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 comando rdk create para regras periódicas:

    rdk create RULE_NAME --runtime pythonX.X-lib // Python runtime version --input-parameters REQUIRED_PARAMETERS // Parameters that are required for a rule to do its evaluation --optional-parameters OPTIONAL_PARAMETERS // Parameters that are optional for a rule to do its evaluation --resource-types AWS::Resource::Type // Resource type(s) that the rule targets --maximum-frequency EXECUTION_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 a RDKlib, o tempo de execução da regra deve ser definido como python3.6-lib.

    Depois de executar o rdk create, você deve ver um novo diretório com o nome da regra e três arquivos nele:

    • RULE_NAME.py: arquivo Python onde a lógica da regra é armazenada.


    • RULE_NAME_test.py: arquivo Python onde os testes unitários da regra são armazenados.

    • parameters.json: arquivo JSON para as configurações de implantação do RDK.

  2. A próxima etapa é escrever a lógica da regra. Você só precisará editar o arquivo RULE_NAME.py. Se você abrir o arquivo RULE_NAME.py, verá um modelo onde poderá adicionar a lógica das regras. Veja abaixo o modelo que foi gerado para MFA_ENABLED_RULE:

    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 mudanças. Em vez disso, adicione sua lógica ao método evaluate_periodic. 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 autenticação multifator (MFA) habilitada. A regra será NON_COMPLIANT se um usuário do IAM não tiver a MFA habilitada. Para obter mais informações sobre a lógica de regras e os métodos fornecidos no modelo, consulte Lógica da regra.

    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)
  3. A próxima etapa é instalar a camada RDKlib AWS com o AWS console ou. AWS CLI A RDKlib foi projetada para funcionar como uma camada do AWS Lambda . Ela permite que você use a biblioteca sem precisar incluí-la no pacote de implantação.

    • Para instalar a camada RDKlib com o AWS console, siga as seguintes etapas:

      1. Abra o AWS Serverless Application Repository console em https://console.aws.amazon.com/serverlessrepo.

      2. No menu de navegação à esquerda, escolha Aplicativos disponíveis.

      3. Pesquise rdklib e escolha rdklib.

      4. Revise os detalhes da função e implante-a. Nenhuma alteração deve ser necessária.

      5. Na seção Recursos na página Visão geral, copie o Amazon Resource Name (ARN) da camada Lambda. Você precisará do ARN da camada do Lambda ao implantar a regra.

    • Para instalar a camada RDKlib com o AWS CLI, execute os seguintes comandos:

      1. Crie o conjunto de alterações para a RDKlib-Layer.

        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" }
      2. Execute o conjunto de alterações. Você pode copiar/colar o ARN completo do conjunto de alterações ChangeSetId (da saída gerada na etapa anterior) para personalizar o seguinte comando:

        aws cloudformation execute-change-set --change-set-name NAME_OF_THE_CHANGE_SET
      3. 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" } } ] }
      4. Copie o ARN da camada do Lambda da saída gerada na etapa anterior. O ARN da camada do Lambda é o PhysicalResourceId.

        "PhysicalResourceId": "arn:aws:lambda:us-east-1:123456789012:layer:rdklib-layer:1"
  4. A próxima etapa é definir uma função para a função do Lambda assumir. Por padrão, as funções do Lambda tentam assumir a função AWSServiceRoleForConfig, o que não é permitido. Você precisa criar uma função com a política gerenciada AWS_ConfigRole. A função deve ter uma relação de confiança com o AWS Config e todas as funções no caminho /rdk/ devem assumi-la. Veja abaixo 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.json

    Agora, execute o comando abaixo para atualizar o parâmetro de entrada para 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-parameters REQUIRED_PARAMETERS // Parameters that are required for a rule to do its evaluation --optional-parameters OPTIONAL_PARAMETERS // Parameters that are optional for a rule to do its evaluation --resource-types AWS::Resource::Type // Resource type(s) that the rule targets --maximum-frequency EXECUTION_FREQUENCY // How often the rule should be run on a periodic trigger.
 One of ['One_Hour','Three_Hours','Six_Hours','Twelve_Hours','TwentyFour_Hours']
  5. A etapa final é implantar a regra. Para implantá-la, execute o seguinte comando com o ARN da camada do Lambda da etapa 3:

    rdk deploy YOUR_RULE_NAME --rdklib-layer-arn YOUR_RDKLIB_LAYER_ARN
  6. A regra agora está implantada. Você pode usar o AWS Config console para verificar se a regra está funcionando conforme o esperado.

Lógica da regra

O exemplo de código Python a seguir é um modelo para escrever uma regra usando o RDK e a RDKlib. Você só deve fazer alterações nos métodos evaluate_parameters, evaluate_change e evaluate_periodic 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 a 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)
APPLICABLE_RESOURCES

APPLICABLE_RESOURCES são os tipos de recursos que a regra tem como alvo. Se usada, essa deve ser uma variável global definida para os tipos de recursos que a regra tem como alvo. Para obter uma lista de tipos de recursos compatíveis, consulte Supported Resource Types.

avaliar_parâmetros

Descrição

Esse método é usado para verificar se os parâmetros de entrada da regra são válidos. Veja a seguir as práticas recomendadas:

  • 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 remova qualquer espaço antes ou depois do valor.

  • Verifique se alguma distinção entre maiúsculas e minúsculas é tratada adequadamente.

  • Limite a entrada de parâmetros quando possível. Por exemplo, se você estiver recebendo uma lista de ARNs separados por vírgulas, garanta que os únicos caracteres permitidos sejam vírgulas e os caracteres aceitos pelos 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 erro InvalidParametersError:

from rdklib import InvalidParametersError raise InvalidParametersError("Error message to display")

Se todos os parâmetros forem válidos, o método deverá retornar um dicionário:

return valid_rule_parameters
evaluate_change

Descrição

Esse método é usado para que a lógica avalie uma regra acionada por mudanças.

Parâmetros

eventé o AWS Lambda evento fornecido por AWS Config. É um documento no formato JSON que contém dados para uma função do Lambda operar. 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 de AWS serviço, o que significa que as operações de serviço são mapeadas para 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 Available Services na documentação do Boto3 Docs.

A sintaxe de 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 se for muito grande. Um item de configuração representa uma point-in-time visão dos vários atributos de um AWS recurso suportado. Para obter informações sobre o conteúdo deConfigurationItem, consulte ConfigurationItemna Referência AWS Config da API.

valid_rule_parameters é a saída do método evaluate_parameters().

Sintaxe de retorno

O método deve retornar um ou mais dos seguintes:

[Evaluation(ComplianceType.COMPLIANT)]
[Evaluation(ComplianceType.NON_COMPLIANT)]
[Evaluation(ComplianceType.NOT_APPLICABLE)]
nota

Os relatórios de regras sobre recursos excluídos devem retornar o resultado da avaliação de NOT_APPLICABLE, a fim de evitar avaliações desnecessárias de regras.

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")]]
evaluate_periodic

Descrição

Esse método é usado para avaliar uma regra periódica.

Parâmetros

eventé o AWS Lambda evento fornecido por AWS Config. É um documento no formato JSON que contém dados para uma função do Lambda operar. 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 de AWS serviço, o que significa que as operações de serviço são mapeadas para 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 Available Services na documentação do Boto3 Docs.

A sintaxe de 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 do método evaluate_parameters().

Sintaxe de retorno

O método deve retornar um ou mais dos seguintes:

[Evaluation(ComplianceType.COMPLIANT)]
[Evaluation(ComplianceType.NON_COMPLIANT)]
[Evaluation(ComplianceType.NOT_APPLICABLE)]
nota

Os relatórios de regras sobre recursos excluídos devem retornar o resultado da avaliação de NOT_APPLICABLE, a fim de evitar avaliações desnecessárias de regras.

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 precisa modificar esse método. O manipulador lambda é usado para processar eventos. A função é executada quando AWS Lambda passa o event objeto para o handler método. Para obter mais informações, consulte Manipulador de função do Lambda em Python.

Parâmetros

eventé o AWS Lambda evento fornecido por AWS Config. É um documento no formato JSON que contém dados para uma função do Lambda operar. Para ver exemplos, consulte Exemplos de eventos para AWS Config regras.

context é um objeto passado para sua função pelo Lambda no runtime. Esse objeto oferece métodos e propriedades que fornecem informações e métodos que a função pode usar durante a execução. Observe que nas versões mais recentes do Lambda, o contexto não é mais usado.