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á.
Habilite a Amazon GuardDuty condicionalmente usando modelos AWS CloudFormation
Ram Kandaswamy, Amazon Web Services
Resumo
AWS CloudFormation, uma ferramenta de infraestrutura como código (IaC), ajuda você a gerenciar AWS recursos por meio de implantações baseadas em modelos. CloudFormation normalmente é usado para gerenciar AWS recursos. Usá-lo para habilitar Serviços da AWS, como a Amazon GuardDuty, pode apresentar desafios únicos. GuardDuty é um serviço de detecção de ameaças que monitora continuamente suas Contas da AWS atividades maliciosas e comportamentos não autorizados. Ao contrário dos recursos típicos que podem ser criados várias vezes, GuardDuty é um serviço que precisa ser ativado uma vez por conta Região da AWS e. CloudFormation As condições tradicionais oferecem suporte apenas a comparações de valores estáticos, o que dificulta a verificação do estado atual de serviços como o. GuardDuty Se você tentar fazer a ativação GuardDuty CloudFormation em uma conta em que ela já está ativa, a implantação da pilha falhará. Isso pode criar desafios operacionais para DevOps equipes que gerenciam ambientes com várias contas.
Esse padrão apresenta uma solução para esse desafio. Ele usa recursos CloudFormation personalizados que são apoiados por AWS Lambdafunções para realizar verificações dinâmicas de estado. A lógica condicional é ativada GuardDuty somente se ainda não estiver ativada. Ele usa as saídas da pilha para registrar o GuardDuty status para referência futura.
Seguindo esse padrão, você pode automatizar as GuardDuty implantações em toda a sua AWS infraestrutura e, ao mesmo tempo, manter as operações de CloudFormation pilha limpas e previsíveis. Essa abordagem é particularmente valiosa para organizações que são:
Gerenciando vários Contas da AWS por meio do IaC
Implementando serviços de segurança em grande escala
Exigindo implantações de infraestrutura idempotentes
Automatizando implantações de serviços de segurança
Pré-requisitos e limitações
Pré-requisitos
Um ativo Conta da AWS
Uma função AWS Identity and Access Management (IAM) que tem permissões para criar, atualizar e excluir CloudFormation pilhas
AWS Command Line Interface (AWS CLI), instalado e configurado
Limitações
Se GuardDuty tiver sido desativado manualmente para um Conta da AWS ou Região da AWS, esse padrão não é ativado GuardDuty para essa conta ou região de destino.
Arquitetura
Pilha de tecnologias de destino
O padrão é usado CloudFormation para infraestrutura como código (IaC). Você usa um recurso CloudFormation personalizado apoiado por uma função Lambda para obter a capacidade dinâmica de habilitação de serviços.
Arquitetura de destino
O diagrama de arquitetura de alto nível a seguir mostra o processo de habilitação GuardDuty por meio da implantação de um CloudFormation modelo:

Você implanta um CloudFormation modelo para criar uma CloudFormation pilha.
A pilha cria um perfil do IAM e uma função do Lambda.
A função do Lambda assume o perfil do IAM.
Se ainda não GuardDuty estiver habilitado no destino Conta da AWS, a função Lambda o habilita.
Automação e escala
Você pode usar o AWS CloudFormation StackSet recurso para estender essa solução para vários Contas da AWS Regiões da AWS e. Para obter mais informações, consulte Trabalhando com AWS CloudFormation StackSets na CloudFormation documentação.
Ferramentas
AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando.
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.
GuardDutyA Amazon é um serviço contínuo de monitoramento de segurança que analisa e processa registros para identificar atividades inesperadas e potencialmente não autorizadas em seu AWS ambiente.
AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
Épicos
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Armazene o código no Amazon S3. |
| AWS DevOps |
Crie o CloudFormation modelo. |
| AWS DevOps |
Crie a CloudFormation pilha. |
| AWS DevOps |
Valide se GuardDuty está habilitado para o. Conta da AWS |
| Administrador de nuvem, administrador da AWS |
Configure contas ou regiões adicionais. | Conforme necessário para seu caso de uso, use o CloudFormation StackSet recurso para estender essa solução para vários Contas da AWS Regiões da AWS e. Para obter mais informações, consulte Trabalhando com AWS CloudFormation StackSets na CloudFormation documentação. | Administrador de nuvem, administrador da AWS |
Recursos relacionados
Referências
Tutoriais e vídeos
Simplify Your Infrastructure Management Using AWS CloudFormation
(Tutorial) Use AWS Security Hub CSPM a Amazon GuardDuty e proteja várias contas
(AWS re:Invent 2020) Práticas recomendadas para criação AWS CloudFormation(AWS re:Invent
2019) Detecção de ameaças em AWS: uma introdução à Amazon GuardDuty
(AWS re:INFORCE 2019)
Mais informações
Código Python
import boto3 import os import json from botocore.exceptions import ClientError import cfnresponse guardduty=boto3.client('guardduty') cfn=boto3.client('cloudformation') def lambda_handler(event, context): print('Event: ', event) if 'RequestType' in event: if event['RequestType'] in ["Create","Update"]: enabled=False try: response=guardduty.list_detectors() if "DetectorIds" in response and len(response["DetectorIds"])>0: enabled="AlreadyEnabled" elif "DetectorIds" in response and len(response["DetectorIds"])==0: cfn_response=cfn.create_stack( StackName='guardduty-cfn-stack', TemplateBody='{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Guard duty creation template", "Resources": { "IRWorkshopGuardDutyDetector": { "Type": "AWS::GuardDuty::Detector", "Properties": { "Enable": true } } } }' ) enabled="True" except Exception as e: print("Exception: ",e) responseData = {} responseData['status'] = enabled cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, "CustomResourcePhysicalID" ) elif event['RequestType'] == "Delete": cfn_response=cfn.delete_stack( StackName='guardduty-cfn-stack') cfnresponse.send(event, context, cfnresponse.SUCCESS, {})