

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á.

# Crie regras AWS Config personalizadas usando AWS CloudFormation Guard políticas
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies"></a>

*Andrew Lok, Nicole Brown, Kailash Havildar e Tanya Howell, Amazon Web Services*

## Resumo
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-summary"></a>

[AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)as regras ajudam você a avaliar seus AWS recursos e o estado de configuração de destino. Há dois tipos de AWS Config regras: gerenciadas e personalizadas. Você pode criar regras personalizadas com AWS Lambda funções ou com [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard)(GitHub), uma policy-as-code linguagem.

As regras criadas com o Guard fornecem um controle mais granular do que as regras gerenciadas e, normalmente, são mais fáceis de configurar se comparadas às regras totalmente personalizadas com o Lambda. Com essa abordagem, engenheiros e arquitetos podem desenvolver regras sem a necessidade de dominar Python, NodeJS ou Java, que são linguagens requeridas para implantar regras personalizadas pelo Lambda.

Esse padrão fornece modelos funcionais, amostras de código e abordagens de implantação para auxiliar na adoção das regras personalizadas com o Guard. Ao usar esse padrão, um administrador pode usar AWS Config para criar regras de conformidade personalizadas que tenham atributos de [item de configuração](https://docs.aws.amazon.com/config/latest/developerguide/config-concepts.html#config-items). Por exemplo, os desenvolvedores podem usar as políticas do Guard em relação aos itens de AWS Config configuração para monitorar continuamente o estado dos recursos implantados AWS e dos não AWS recursos, detectar violações de regras e iniciar automaticamente a remediação.

**Objetivos**

Após ler este padrão, você deverá ser capaz de:
+ Entenda como o código de política do Guard interage com o AWS Config serviço.
+ Implante o *Cenário 1*, que é uma regra AWS Config personalizada que usa a sintaxe do Guard para validar a conformidade de volumes criptografados. Essa regra verifica se o drive está em uso e se o tipo do drive é [gp3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/general-purpose.html#gp3-ebs-volume-type).
+ Implante o *Cenário 2*, que é uma regra AWS Config personalizada que usa a sintaxe do Guard para validar a conformidade da Amazon GuardDuty . Essa regra verifica se GuardDuty os gravadores têm a Proteção [Amazon Simple Storage Service (Amazon S3) e a Proteção Amazon [Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/guardduty/latest/ug/kubernetes-protection.html))](https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html) ativadas.

## Pré-requisitos e limitações
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ AWS Config, [configurado](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) em seu Conta da AWS

**Limitações**
+ As regras personalizadas do Guard conseguem consultar somente pares de chave-valor em um registro JSON de item de configuração de destino

## Arquitetura
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-architecture"></a>

Você aplica a sintaxe do Guard a uma AWS Config regra como uma política personalizada. AWS Config captura o JSON hierárquico de cada um dos recursos especificados. O JSON do item de AWS Config configuração contém pares de valores-chave. Esses atributos são usados na sintaxe do Guard como variáveis atribuídas aos seus valores correspondentes. 

A seguir, apresentamos uma explicação da sintaxe do Guard. As variáveis do JSON do item de configuração são usadas e precedidas por um caractere `%`.

```
# declare variable
let <variable name> = <'value'>

# create rule and assign condition and policy
    rule <rule name> when 
        <CI json key> == <"CI json value"> {
            <top level CI json key>.<next level CI json key> == %<variable name>
        }
```

**Cenário 1: volumes do Amazon EBS**

O cenário 1 implanta uma regra AWS Config personalizada que usa a sintaxe do Guard para validar a conformidade de volumes criptografados. Essa regra verifica se o drive está em uso e se o tipo do drive é gp3.

Veja a seguir um exemplo de um item de AWS Config configuração para o cenário 1. Há três pares de valores-chave nesse item de configuração que são usados como variáveis na política do Guard: `volumestatus``volumeencryptionstatus`, e. `volumetype` Além disso, a chave `resourceType` é empregada como filtro na política do Guard.

```
{
  "version": "1.3",
  "accountId": "111111111111",
  "configurationItemCaptureTime": "2023-01-15T19:04:45.402Z",
  "configurationItemStatus": "ResourceDiscovered",
  "configurationStateId": "4444444444444",
  "configurationItemMD5Hash": "",
  "arn": "arn:aws:ec2:us-west-2:111111111111:volume/vol-222222222222",
  "resourceType": "AWS::EC2::Volume",
  "resourceId": "vol-222222222222",
  "awsRegion": "us-west-2",
  "availabilityZone": "us-west-2b",
  "resourceCreationTime": "2023-01-15T19:03:22.247Z",
  "tags": {},
  "relatedEvents": [],
  "relationships": [
    {
      "resourceType": "AWS::EC2::Instance",
      "resourceId": "i-33333333333333333",
      "relationshipName": "Is attached to Instance"
    }
  ],
  "configuration": {
    "attachments": [
      {
        "attachTime": "2023-01-15T19:03:22.000Z",
        "device": "/dev/xvda",
        "instanceId": "i-33333333333333333",
        "state": "attached",
        "volumeId": "vol-222222222222",
        "deleteOnTermination": true,
        "associatedResource": null,
        "instanceOwningService": null
      }
    ],
    "availabilityZone": "us-west-2b",
    "createTime": "2023-01-15T19:03:22.247Z",
    "encrypted": false,
    "kmsKeyId": null,
    "outpostArn": null,
    "size": 8,
    "snapshotId": "snap-55555555555555555",
    "state": "in-use",
    "volumeId": "vol-222222222222",
    "iops": 100,
    "tags": [],
    "volumeType": "gp2",
    "fastRestored": null,
    "multiAttachEnabled": false,
    "throughput": null,
    "sseType": null
  },
  "supplementaryConfiguration": {}
}
```

A seguir, apresentamos um exemplo de como usar a sintaxe do Guard para definir variáveis e regras no Cenário 1. No seguinte exemplo:
+ As três primeiras linhas definem as variáveis usando o comando `let`.  As variáveis recebem um nome e um valor derivados dos atributos do item de configuração.
+ O bloco de regra `compliancecheck` adiciona uma dependência condicional “when” que busca um par de chave-valor `resourceType` correspondente a `AWS::EC2::Volume`. Se uma correspondência for encontrada, a regra continua analisando o restante dos atributos do JSON e procura por correspondências nas três seguintes condições: `state`, `encrypted` e `volumeType`.

```
let volumestatus = 'available'
let volumetype = 'gp3'
let volumeencryptionstatus = true

    rule compliancecheck when 
        resourceType == "AWS::EC2::Volume" {
            configuration.state == %volumestatus
            configuration.encrypted == %volumeencryptionstatus
            configuration.volumeType == %volumetype
        }
```

Para ver a política personalizada completa do Guard que implementa essa regra personalizada, consulte [awsconfig-guard-cft.yaml ou [awsconfig-guard-tf-ec2vol.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-ec2vol.json)](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft.yaml) no repositório de código. GitHub Para o código do HashiCorp Terraform que implanta essa política personalizada no Guard, consulte [awsconfig-guard-tf-example.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-example.json) no repositório de código.

**Cenário 2: GuardDuty conformidade**

O cenário 2 implanta uma regra AWS Config personalizada que usa a sintaxe do Guard para validar a conformidade da Amazon GuardDuty . Essa regra verifica se GuardDuty os gravadores têm a Proteção Amazon S3 e a Proteção Amazon EKS ativadas. Também verifica se as GuardDuty descobertas são publicadas a cada 15 minutos. Esse cenário pode ser implantado em toda Contas da AWS e Regiões da AWS em uma organização (em AWS Organizations).

Veja a seguir um exemplo de um item de AWS Config configuração para o cenário 2. Existem três pares de chave-valor nesse item de configuração que são usados como variáveis na política do Guard: `FindingPublishingFrequency`, `S3Logs` e `Kubernetes`. Além disso, a chave `resourceType` é empregada como filtro na política.

```
{
  "version": "1.3",
  "accountId": "111111111111",
  "configurationItemCaptureTime": "2023-11-27T13:34:28.888Z",
  "configurationItemStatus": "OK",
  "configurationStateId": "7777777777777",
  "configurationItemMD5Hash": "",
  "arn": "arn:aws:guardduty:us-west-2:111111111111:detector/66666666666666666666666666666666",
  "resourceType": "AWS::GuardDuty::Detector",
  "resourceId": "66666666666666666666666666666666",
  "resourceName": "66666666666666666666666666666666",
  "awsRegion": "us-west-2",
  "availabilityZone": "Regional",
  "resourceCreationTime": "2020-02-17T02:48:04.511Z",
  "tags": {},
  "relatedEvents": [],
  "relationships": [],
  "configuration": {
    "Enable": true,
    "FindingPublishingFrequency": "FIFTEEN_MINUTES",
    "DataSources": {
      "S3Logs": {
        "Enable": true
      },
      "Kubernetes": {
        "AuditLogs": {
          "Enable": true
        }
      }
    },
    
    "Id": "66666666666666666666666666666666",
    "Tags": []
  },
  "supplementaryConfiguration": {
    "CreatedAt": "2020-02-17T02:48:04.511Z"
  }
}
```

A seguir, apresentamos um exemplo de como usar a sintaxe do Guard para definir variáveis e regras no Cenário 2. No seguinte exemplo:
+ As três primeiras linhas definem as variáveis usando o comando `let`.  As variáveis recebem um nome e um valor derivados dos atributos do item de configuração.
+ O bloco de regra `compliancecheck` adiciona uma dependência condicional “when” que busca um par de chave-valor `resourceType` correspondente a `AWS::GuardDuty::Detector`. Se uma correspondência for encontrada, a regra continua analisando o restante dos atributos do JSON e procura por correspondências nas três seguintes condições: `S3Logs.Enable`, `Kubernetes.AuditLogs.Enable` e `FindingPublishingFrequency`.

```
let s3protection = true
let kubernetesprotection = true
let publishfrequency = 'FIFTEEN_MINUTES'

    rule compliancecheck when 
        resourceType == "AWS::GuardDuty::Detector" {
            configuration.DataSources.S3Logs.Enable == %s3protection
            configuration.DataSources.Kubernetes.AuditLogs.Enable == %kubernetesprotection
            configuration.FindingPublishingFrequency == %publishfrequency
        }
```

Para ver a política personalizada completa do Guard que implementa essa regra personalizada, consulte [awsconfig-guard-cft-gd.yaml](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft-gd.yaml) no repositório de código. GitHub Para o código do HashiCorp Terraform que implanta essa política personalizada no Guard, consulte [awsconfig-guard-tf-gd.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-gd.json) no repositório de código.

## Ferramentas
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los em todo o ciclo de vida em todas Contas da AWS as regiões.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)fornece uma visão detalhada dos recursos em seu computador Conta da AWS e de como eles estão configurados. Ajuda a identificar como os recursos estão relacionados entre si e como suas configurações foram alteradas ao longo do tempo.

**Outras ferramentas**
+ O [HashiCorp Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código.

**Repositório de código**

O código desse padrão está disponível no AWS CloudFormation Guard repositório GitHub [AWS Config with](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/tree/main). Esse repositório de código contém amostras para ambos os cenários descritos neste padrão.

## Épicos
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-epics"></a>

### Criação AWS Config de regras personalizadas
<a name="creating-cc-custom-rules"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| (Opcional) Selecione pares de chave-valor para a regra. | Conclua estas etapas se estiver definindo uma política personalizada do Guard. Se estiver usando uma das políticas de amostra disponibilizadas para o Cenário 1 ou 2, pule estas etapas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | Administrador da AWS e engenheiro de segurança | 
| Crie a regra personalizada. | Usando os pares de valores-chave que você identificou anteriormente ou usando um dos exemplos de políticas do Guard fornecidos, siga as instruções em [Criação de regras de política AWS Config personalizadas](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html#create-cfn-guard-rule-console) para criar uma regra personalizada. | Administrador da AWS e engenheiro de segurança | 
| Valide a regra personalizada. | Realize uma das seguintes ações para validar a regra personalizada do Guard:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | Administrador da AWS e engenheiro de segurança | 

## Solução de problemas
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Teste a política do Guard fora do AWS Config | O teste unitário pode ser feito em seu dispositivo local ou em um ambiente de desenvolvimento integrado (IDE), como um AWS Cloud9 IDE. Para realizar o teste de unidade, execute as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | 
| Depurar uma regra AWS Config personalizada | Na sua política do Guard, altere o valor de `EnableDebugLogDelivery` para `true`. O valor padrão é `false`. As mensagens de log são armazenadas na Amazon CloudWatch. | 

## Recursos relacionados
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-resources"></a>

**AWS documentação**
+ [Criação de regras de política AWS Config personalizadas](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html) (AWS Config documentação)
+ [AWS CloudFormation Guard Regras de redação](https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html) (documentação do Guard)

**AWS postagens de blog e workshops**
+ [Apresentando a AWS CloudFormation Guard versão 2.0](https://aws.amazon.com/blogs/mt/introducing-aws-cloudformation-guard-2-0/) (postagem AWS no blog)

**Outros recursos**
+ [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) (GitHub)
+ [AWS CloudFormation Guard Documentação da CLI](https://github.com/aws-cloudformation/cloudformation-guard#guard-cli) () GitHub