Abilita Amazon in GuardDuty modo condizionale utilizzando 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 modelli AWS CloudFormation

Ram Kandaswamy, Amazon Web Services

Riepilogo

AWS CloudFormation, uno strumento di infrastruttura come codice (IaC), ti aiuta a gestire AWS le risorse tramite implementazioni basate su modelli. CloudFormation viene in genere utilizzato per gestire le risorse. AWS Usarlo per abilitare Servizi AWS, come Amazon GuardDuty, può presentare sfide uniche. GuardDuty è un servizio di rilevamento delle minacce che monitora continuamente Account AWS le attività dannose e i comportamenti non autorizzati. A differenza delle risorse tipiche che possono essere create più volte, GuardDuty è un servizio che deve essere abilitato una volta per account e. Regione AWS CloudFormation Le condizioni tradizionali supportano solo confronti di valori statici, il che rende difficile verificare lo stato attuale di servizi come GuardDuty. Se tenti di GuardDuty abilitarlo CloudFormation in un account in cui è già attivo, la distribuzione dello stack fallisce. Ciò può creare sfide operative per i DevOps team che gestiscono ambienti con più account.

Questo modello introduce una soluzione a questa sfida. Utilizza risorse CloudFormation personalizzate supportate da AWS Lambdafunzioni per eseguire controlli di stato dinamici. La logica condizionale si attiva GuardDuty solo se non è già abilitata. Utilizza gli output dello stack per registrare lo GuardDuty stato per riferimenti futuri.

Seguendo questo schema, è possibile automatizzare le GuardDuty implementazioni nell' AWS infrastruttura mantenendo al contempo operazioni di stack pulite e prevedibili. CloudFormation Questo approccio è particolarmente utile per le organizzazioni che sono:

  • Gestione multipla Account AWS tramite IaC

  • Implementazione di servizi di sicurezza su larga scala

  • Richiede implementazioni di infrastrutture idempotenti

  • Automatizzazione delle implementazioni dei servizi di sicurezza

Prerequisiti e limitazioni

Prerequisiti

  • Un attivo Account AWS

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

  • AWS Command Line Interface (AWS CLI), installato e configurato

Limitazioni

Se GuardDuty è stato disabilitato manualmente per un Account AWS o Regione AWS, questo pattern non è abilitato GuardDuty per quell'account o regione di destinazione.

Architecture

Stack tecnologico Target

Il modello utilizza CloudFormation l'infrastruttura come codice (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

Utilizzo di uno CloudFormation stack da abilitare GuardDuty in un account AWS.
  1. Implementate un CloudFormation modello per creare uno CloudFormation stack.

  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 sulla destinazione Account AWS, la funzione Lambda lo abilita.

Automazione e scalabilità

È possibile utilizzare la AWS CloudFormation StackSet funzionalità per estendere questa soluzione a più Account AWS e Regioni AWS. Per ulteriori informazioni, consulta Lavorare con AWS CloudFormation StackSets nella CloudFormation documentazione.

Tools (Strumenti)

  • AWS Command Line Interface (AWS CLI) è uno strumento open source che consente di interagire Servizi AWS tramite comandi nella shell della riga di comando.

  • AWS CloudFormationti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita in tutte le regioni. Account 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 AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

  • AWS Lambda è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

Epiche

OperazioneDescriptionCompetenze richieste

Memorizza il codice in Amazon S3.

  1. Copia il codice Python nella sezione Informazioni aggiuntive di questo modello.

  2. Incolla il codice in un editor di testo.

  3. Salva il file con nome index.py.

  4. Caricare il file in un bucket Amazon Simple Storage Service (Amazon S3). Per istruzioni, consulta Caricamento di oggetti nella documentazione di Amazon S3.

AWS DevOps

Crea il CloudFormation modello.

  1. Apri la CloudFormation console.

  2. Nel riquadro di navigazione a sinistra, scegli Infrastructure Composer.

  3. Se non vedi una tela bianca, crea un nuovo progetto.

  4. Trascina e rilascia una AWS Lambda funzione sull'area di disegno.

  5. Nella vista modello, verifica che siano presenti una funzione Lambda e un gruppo di log.

  6. Modifica Runtime la funzione Lambda all'ultima versione di Python.

  7. Verifica che la Handler proprietà abbia il valore di index.lambda_handler.

  8. Configura la CodeUri proprietà come posizione Amazon S3 in cui hai caricato il codice Python. Un valore di esempio è s3://amzn-s3-demo-bucket/key-name.

  9. Aggiungi una Policies proprietà per la risorsa. Segui le migliori pratiche di sicurezza per fornire autorizzazioni di accesso CloudFormation e GuardDuty azioni con privilegi minimi. Ad esempio, è possibile utilizzare la politica AWSLambdaExecute gestita per i log e un modulo personalizzato. iam:CreateServiceLinkedRole GuardDuty

  10. Aggiungi una definizione di risorsa personalizzata allo snippet accedendo alla visualizzazione del modello.

    CheckResourceExist: Type: 'Custom::LambdaCustomResource' Properties: ServiceToken: !GetAtt Function.Arn
  11. Salva il modello come. sample.yaml

AWS DevOps

Crea lo CloudFormation stack.

  1. Nel AWS CLI, inserisci il seguente comando. Questo crea un nuovo CloudFormation stack utilizzando il sample.yaml file. Per ulteriori informazioni, consulta Creazione di uno stack nella CloudFormation documentazione.

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

    "StackStatus": "CREATE_COMPLETE",
AWS DevOps

Convalida che GuardDuty sia abilitato per. Account AWS

  1. Accedi a Console di gestione AWS e apri la GuardDuty console.

  2. Verifica che il GuardDuty servizio sia abilitato.

Amministratore cloud, amministratore AWS

Configura account o regioni aggiuntivi.

Se necessario per il tuo caso d'uso, utilizza la CloudFormation StackSet funzionalità per estendere questa soluzione a più Account AWS e Regioni AWS. Per ulteriori informazioni, consulta Lavorare con AWS CloudFormation StackSets nella CloudFormation documentazione.

Amministratore cloud, amministratore AWS

Risorse correlate

Riferimenti

Tutorial e video

Informazioni aggiuntive

Codice 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, {})