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
Criado por Andrew Lok (AWS), Kailash Havildar (AWS), Nicole Brown () e Tanya Howell (AWS) AWS
Repositório de código: aws-config-custom-rule -cloudformation-guard | Ambiente: PoC ou piloto | Tecnologias: segurança, identidade, conformidade; gerenciamento e governança |
AWSserviços: AWS CloudFormation; AWS Config |
Resumo
AWS Configas 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
As regras criadas com o Guard fornecem um controle mais granular do que as regras gerenciadas e geralmente são mais fáceis de configurar do que as regras Lambda totalmente personalizadas. Essa abordagem fornece aos engenheiros e arquitetos a capacidade de criar regras sem precisar conhecer Python, NodeJS ou Java, que são necessários para implantar regras personalizadas por meio do Lambda.
Esse padrão fornece modelos viáveis, exemplos de código e abordagens de implantação para ajudá-lo a adotar 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. 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
Depois de ler esse padrão, você deve 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 a unidade está em uso e se o tipo de unidade é gp3.
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) ativadas. EKS
Pré-requisitos e limitações
Pré-requisitos
Um ativo Conta da AWS
AWS Config, configurado em seu Conta da AWS
Limitações
As regras personalizadas do Guard só podem consultar pares de valores-chave em um registro de item de configuração de destino JSON
Arquitetura
Você aplica a sintaxe do Guard a uma AWS Config regra como uma política personalizada. AWS Config captura a hierárquica JSON de cada um dos recursos especificados. O item JSON 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 ao valor correspondente.
A seguir está uma explicação da sintaxe do Guard. As variáveis do item de configuração JSON são usadas e prefixadas com 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: EBS volumes da Amazon
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 a unidade está em uso e se o tipo de unidade é 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 resourceType
chave é usada 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": {} }
Veja a seguir um exemplo do uso da sintaxe do Guard para definir as variáveis e regras no cenário 1. No seguinte exemplo:
As três primeiras linhas definem as variáveis usando o
let
comando. Eles recebem um nome e um valor derivados dos atributos do item de configuração.O bloco de
compliancecheck
regras adiciona uma dependência condicional quando que procura um par deresourceType
valores-chave que corresponda.AWS::EC2::Volume
Se uma correspondência for encontrada, a regra prossegue com o restante dos JSON atributos e procura correspondências nas três condições a seguir: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
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 o Amazon S3 Protection e o Amazon Protection habilitados. EKS 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. Há três pares de valores-chave 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 resourceType
chave é usada 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" } }
Veja a seguir um exemplo do uso da sintaxe do Guard para definir as variáveis e regras no cenário 2. No seguinte exemplo:
As três primeiras linhas definem as variáveis usando o
let
comando. Eles recebem um nome e um valor derivados dos atributos do item de configuração.O bloco de
compliancecheck
regras adiciona uma dependência condicional quando que procura um par deresourceType
valores-chave que corresponda.AWS::GuardDuty::Detector
Se uma correspondência for encontrada, a regra prossegue com o restante dos JSON atributos e procura correspondências nas três condições a seguir: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
Ferramentas
Serviços da AWS
AWS CloudFormationajuda 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 Configfornece 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
HashiCorp O Terraform
é uma ferramenta de infraestrutura de código aberto como código (IaC) que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem.
Repositório de código
O código desse padrão está disponível no AWS CloudFormation Guard repositório GitHub AWS Config with
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
(Opcional) Selecione pares de valores-chave para a regra. | Conclua estas etapas se você estiver definindo uma política personalizada do Guard. Se você estiver usando um dos exemplos de políticas para o cenário 1 ou 2, pule essas etapas.
| AWSadministrador, 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 para criar uma regra personalizada. | AWSadministrador, engenheiro de segurança |
Valide a regra personalizada. | Siga um destes procedimentos para validar a regra personalizada do Guard:
| AWSadministrador, engenheiro de segurança |
Solução de problemas
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 unitário, faça o seguinte:
|
Depurar uma regra AWS Config personalizada | Em sua política do Guard, altere o |
Recursos relacionados
AWS documentação
Criação de regras de política AWS Config personalizadas (AWS Config documentação)
AWS CloudFormation Guard Regras de redação (documentação do Guard)
AWS postagens de blog e workshops
Apresentando a AWS CloudFormation Guard versão 2.0
(postagem AWS no blog)
Outros recursos
AWS CloudFormation Guard
(GitHub)