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
Criado por Ram Kandaswamy (AWS)
Resumo
Você pode habilitar a Amazon GuardDuty em uma conta da Amazon Web Services (AWS) usando um AWS CloudFormation modelo. 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 dentro do mesmo modelo. Para obter mais informações, consulte Condições na CloudFormation documentação.
Nesse padrão, você usa um recurso CloudFormation personalizado apoiado por uma AWS Lambda função 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
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 | Descrição | Habilidades necessárias |
---|---|---|
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
Simplifique seu gerenciamento de infraestrutura usando AWS CloudFormation
(Tutorial) Use AWS Security Hub 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
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.13
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 apoiá-los colocando o código Lambda em um bucket do Amazon 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 S3ObjectVersion
propriedade pode ser omitida se você não estiver usando o versionamento em seu bucket do Amazon S3. Para obter mais informações, consulte Uso de versionamento em buckets do Amazon S3 na documentação do Amazon S3.