Habilite a Amazon GuardDuty condicionalmente usando modelos da AWS CloudFormation - Recomendações da AWS

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 da AWS CloudFormation

Criado por Ram Kandaswamy (AWS)

Ambiente: produção

Tecnologias: Segurança, identidade, conformidade DevOps; Operações

Serviços da AWS: AWS CloudFormation; Amazon GuardDuty; AWS Lambda; AWS Identity and Access Management

Resumo

Você pode habilitar a Amazon GuardDuty em uma conta da Amazon Web Services (AWS) usando um CloudFormation modelo da AWS. Por padrão, se já GuardDuty estiver habilitado quando você tentar usá-lo CloudFormation para ativá-lo, a implantação da pilha falhará. No entanto, você pode usar condições em seu CloudFormation modelo para verificar se já GuardDuty está habilitado. CloudFormation suporta o uso de condições que comparam valores estáticos; ele não suporta o uso da saída de outra propriedade de recurso no mesmo modelo. Para obter mais informações, consulte Condições no guia CloudFormation do usuário.

Nesse padrão, você usa um recurso CloudFormation personalizado apoiado por uma função do AWS Lambda para habilitar condicionalmente, GuardDuty caso ainda não esteja habilitado. Se GuardDuty estiver habilitada, a pilha captura o status e o registra na seção de saída da pilha. Se não GuardDuty estiver habilitado, a pilha o habilita.

Pré-requisitos e limitações

Pré-requisitos

  • Uma conta AWS ativa

  • Uma função do AWS Identity and Access Management (IAM) que tem permissões para criar, atualizar e excluir CloudFormation pilhas

Limitações

  • Se GuardDuty tiver sido desativado manualmente para uma conta ou região da AWS, esse padrão não será 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:

  1. Você implanta um CloudFormation modelo para criar uma CloudFormation pilha.

  2. A pilha cria um perfil do IAM e uma função do Lambda.

  3. A função do Lambda assume o perfil do IAM.

  4. Se ainda não GuardDuty estiver habilitada na conta de destino da AWS, a função Lambda a habilita.

O processo de habilitação GuardDuty por meio da implantação de um modelo CloudFormation

Automação e escala

Você pode usar o CloudFormation StackSet recurso da AWS para estender essa solução para várias contas e regiões da AWS. Para obter mais informações, consulte Como trabalhar com a AWS CloudFormation StackSets no guia CloudFormation do usuário.

Ferramentas

  • A AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

  • CloudFormationA AWS ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS.

  • 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 ambiente da AWS.

  • O AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.

  • O AWS Lambda é um serviço de computação que ajuda você 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

TarefaDescriçãoHabilidades necessárias

Crie o CloudFormation modelo.

  1. Copie o código no CloudFormation modelo na seção Informações adicionais.

  2. Cole o código em um editor de textos.

  3. Salve o arquivo como sample.yaml na sua estação de trabalho.

AWS DevOps

Crie a CloudFormation pilha.

  1. Na AWS CLI, insira o seguinte comando. Isso cria uma nova CloudFormation pilha usando o sample.yaml arquivo. Para obter mais informações, consulte Criação de uma pilha no guia do CloudFormation usuário.

    aws cloudformation create-stack \ --stack-name guardduty-cf-stack \ --template-body file://sample.yaml
  2. Confirme se o valor a seguir aparece na AWS CLI, indicando que a pilha foi criada com sucesso. A quantidade de tempo necessária para criar a pilha pode variar.

    "StackStatus": "CREATE_COMPLETE",
AWS DevOps

Valide se GuardDuty está habilitado para a conta da AWS.

  1. Faça login no AWS Management Console e abra o GuardDuty console em https://console.aws.amazon.com/guardduty/.

  2. Verifique se o GuardDuty serviço está ativado.

Administrador de nuvem, administrador da AWS

Configure contas adicionais ou regiões da AWS.

Conforme necessário para seu caso de uso, use o CloudFormation StackSet recurso da AWS para estender essa solução a várias contas e regiões da AWS. Para obter mais informações, consulte Como trabalhar com a AWS CloudFormation StackSets no guia CloudFormation do usuário.

Administrador de nuvem, administrador da AWS

Recursos relacionados

Referências

Tutoriais e vídeos

Mais informações

CloudFormation modelo

AWSTemplateFormatVersion: 2010-09-09 Resources: rLambdaLogGroup: Type: 'AWS::Logs::LogGroup' DeletionPolicy: Delete Properties: RetentionInDays: 7 LogGroupName: /aws/lambda/resource-checker rLambdaCheckerLambdaRole: Type: 'AWS::IAM::Role' Properties: RoleName: !Sub 'resource-checker-lambda-role-${AWS::Region}' AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: 'sts:AssumeRole' Path: / Policies: - PolicyName: !Sub 'resource-checker-lambda-policy-${AWS::Region}' PolicyDocument: Version: 2012-10-17 Statement: - Sid: CreateLogGroup Effect: Allow Action: - 'logs:CreateLogGroup' - 'logs:CreateLogStream' - 'logs:PutLogEvents' - 'iam:CreateServiceLinkedRole' - 'cloudformation:CreateStack' - 'cloudformation:DeleteStack' - 'cloudformation:Desc*' - 'guardduty:CreateDetector' - 'guardduty:ListDetectors' - 'guardduty:DeleteDetector' Resource: '*' resourceCheckerLambda: Type: 'AWS::Lambda::Function' Properties: Description: Checks for resource type enabled and possibly name to exist FunctionName: resource-checker Handler: index.lambda_handler Role: !GetAtt - rLambdaCheckerLambdaRole - Arn Runtime: python3.8 MemorySize: 128 Timeout: 180 Code: ZipFile: | 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": "A sample 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, {}) CheckResourceExist: Type: 'Custom::LambdaCustomResource' Properties: ServiceToken: !GetAtt - resourceCheckerLambda - Arn Outputs: status: Value: !GetAtt - CheckResourceExist - status

Opção de código alternativa para o recurso do Lambda

O CloudFormation modelo fornecido usa código embutido para referenciar o recurso Lambda, para facilitar a referência e a orientação. Como alternativa, você pode colocar o código Lambda em um bucket do Amazon Simple Storage Service (Amazon S3) e referenciá-lo no modelo. CloudFormation O código embutido não oferece suporte a dependências ou bibliotecas de pacotes. Você pode dar suporte a eles colocando o código Lambda em um bucket do S3 e referenciando-o no modelo. CloudFormation

Substitua as linhas de código a seguir:

Code: ZipFile: |

com as linhas de código a seguir:

Code: S3Bucket: <bucket name> S3Key: <python file name> S3ObjectVersion: <version>

A propriedade S3ObjectVersion pode ser omitida se você não estiver usando o controle de versionamento em seu bucket do S3. Para obter mais informações, consulte Usar o versionamento em buckets do S3 no Guia do usuário do Amazon S3.