Abilita Amazon in GuardDuty modo condizionale utilizzando i modelli AWS CloudFormation - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Abilita Amazon in GuardDuty modo condizionale utilizzando i modelli AWS CloudFormation

Creato da Ram Kandaswamy (AWS)

Ambiente: produzione

Tecnologie: sicurezza, identità, conformità DevOps; Operazioni

Servizi AWS: AWS CloudFormation; Amazon GuardDuty; AWS Lambda; AWS Identity and Access Management

Riepilogo

Puoi abilitare Amazon GuardDuty su un account Amazon Web Services (AWS) utilizzando un CloudFormation modello AWS. Per impostazione predefinita, se GuardDuty è già abilitato quando si tenta di utilizzarlo CloudFormation per attivarlo, la distribuzione dello stack non riesce. Tuttavia, puoi utilizzare le condizioni del tuo CloudFormation modello per verificare se GuardDuty è già abilitato. CloudFormation supporta l'uso di condizioni che confrontano valori statici; non supporta l'utilizzo dell'output di un'altra proprietà di risorsa all'interno dello stesso modello. Per ulteriori informazioni, consulta la sezione Condizioni nella guida CloudFormation per l'utente.

In questo modello, si utilizza una risorsa CloudFormation personalizzata supportata da una funzione AWS Lambda da abilitare in modo condizionale GuardDuty se non è già abilitata. Se GuardDuty è abilitato, lo stack acquisisce lo stato e lo registra nella sezione di output dello stack. Se non GuardDuty è abilitato, lo stack lo abilita.

Prerequisiti e limitazioni

Prerequisiti

  • Un account AWS attivo

  • Un ruolo AWS Identity and Access Management (IAM) con autorizzazioni per creare, aggiornare ed eliminare stack CloudFormation

Limitazioni

  • Se GuardDuty è stato disabilitato manualmente per un account o una regione AWS, questo pattern non si attiva GuardDuty per quell'account o regione di destinazione.

Architettura

Stack tecnologico Target

Il modello utilizza CloudFormation Infrastructure as Code (IaC). Si utilizza una risorsa CloudFormation personalizzata supportata da una funzione Lambda per ottenere la funzionalità di abilitazione dinamica dei servizi.

Architettura Target

Il seguente diagramma di architettura di alto livello mostra il processo di abilitazione GuardDuty mediante l'implementazione di un modello: CloudFormation

  1. Si distribuisce un CloudFormation modello per creare uno stack. CloudFormation

  2. Lo stack crea un ruolo IAM e una funzione Lambda.

  3. La funzione Lambda assume il ruolo IAM.

  4. Se non GuardDuty è già abilitato sull'account AWS di destinazione, la funzione Lambda lo abilita.

Il processo di abilitazione GuardDuty mediante la distribuzione di un modello CloudFormation

Automazione e scalabilità

Puoi utilizzare la CloudFormation StackSet funzionalità AWS per estendere questa soluzione a più account AWS e regioni AWS. Per ulteriori informazioni, consulta Working with AWS CloudFormation StackSets nella guida CloudFormation per l'utente.

Strumenti

  • AWS Command Line Interface (AWS CLI) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

  • AWS ti CloudFormation aiuta a configurare le risorse AWS, effettuarne il provisioning in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita su account e regioni AWS.

  • Amazon GuardDuty è un servizio di monitoraggio continuo della sicurezza che analizza ed elabora i log per identificare attività impreviste e potenzialmente non autorizzate nel tuo ambiente AWS.

  • AWS Identity and Access Management (IAM) ti aiuta a gestire in modo sicuro l'accesso alle tue risorse AWS controllando chi è autenticato e autorizzato a utilizzarle.

  • AWS Lambda è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.

Epiche

AttivitàDescrizioneCompetenze richieste

Crea il CloudFormation modello.

  1. Copia il codice nel CloudFormation modello nella sezione Informazioni aggiuntive.

  2. Incolla il codice in un editor di testo.

  3. Salva il file come sample.yaml sulla tua workstation.

AWS DevOps

Crea lo CloudFormation stack.

  1. Nella CLI di AWS, inserisci il seguente comando. Questo crea un nuovo CloudFormation stack utilizzando il sample.yaml file. Per ulteriori informazioni, consulta Creazione di uno stack nella guida per l' CloudFormation utente.

    aws cloudformation create-stack \ --stack-name guardduty-cf-stack \ --template-body file://sample.yaml
  2. Verifica che il seguente valore sia visualizzato nella CLI di AWS, a indicare che lo stack è stato creato correttamente. La quantità di tempo necessaria per creare lo stack può variare.

    "StackStatus": "CREATE_COMPLETE",
AWS DevOps

Verifica che GuardDuty sia abilitato per l'account AWS.

  1. Accedi alla Console di gestione AWS e apri la GuardDuty console all'indirizzo https://console.aws.amazon.com/guardduty/.

  2. Verifica che il GuardDuty servizio sia abilitato.

Amministratore cloud, amministratore AWS

Configura account o regioni AWS aggiuntivi.

Se necessario per il tuo caso d'uso, utilizza la CloudFormation StackSet funzionalità AWS per estendere questa soluzione a più account AWS e regioni AWS. Per ulteriori informazioni, consulta Working with AWS CloudFormation StackSets nella guida CloudFormation per l'utente.

Amministratore cloud, amministratore AWS

Risorse correlate

Riferimenti

Tutorial e video

Informazioni aggiuntive

CloudFormation modello

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

Opzione di codice alternativa per la risorsa Lambda

Il CloudFormation modello fornito utilizza codice in linea per fare riferimento alla risorsa Lambda, per una consultazione e una guida più semplici. In alternativa, puoi inserire il codice Lambda in un bucket Amazon Simple Storage Service (Amazon S3) e farvi riferimento nel modello. CloudFormation Il codice in linea non supporta le dipendenze o le librerie dei pacchetti. Puoi supportarli inserendo il codice Lambda in un bucket S3 e referenziandolo nel modello. CloudFormation

Sostituisci le seguenti righe di codice:

Code: ZipFile: |

con le seguenti righe di codice:

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

La S3ObjectVersion proprietà può essere omessa se non si utilizza il controllo delle versioni nel bucket S3. Per ulteriori informazioni, consulta Using versioning in bucket S3 nella guida per l'utente di Amazon S3.