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:
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 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](images/pattern-img/3abd7cb7-0937-41fe-8eaa-79aedb182732/images/b2d81a61-31f7-4cb9-9de3-f7db1b92ccd9.png)
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
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie o CloudFormation modelo. |
| AWS DevOps |
Crie a CloudFormation pilha. |
| AWS DevOps |
Valide se GuardDuty está habilitado para a conta da AWS. |
| 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
Simplifique seu gerenciamento de infraestrutura usando a AWS CloudFormation
(tutorial) Use a Amazon GuardDuty e o AWS Security Hub para proteger várias contas
(AWS re:Invent 2020) Melhores práticas para criar a AWS CloudFormation (AWS re:Invent
2019) Detecção de ameaças na AWS: uma introdução à Amazon GuardDuty
(AWS re:inforce 2019)
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.