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
Si distribuisce un CloudFormation modello per creare uno stack. CloudFormation
Lo stack crea un ruolo IAM e una funzione Lambda.
La funzione Lambda assume il ruolo IAM.
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](images/pattern-img/3abd7cb7-0937-41fe-8eaa-79aedb182732/images/b2d81a61-31f7-4cb9-9de3-f7db1b92ccd9.png)
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à | Descrizione | Competenze richieste |
---|---|---|
Crea il CloudFormation modello. |
| AWS DevOps |
Crea lo CloudFormation stack. |
| AWS DevOps |
Verifica che GuardDuty sia abilitato per l'account AWS. |
| 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
Semplifica la gestione dell'infrastruttura con AWS CloudFormation
(Tutorial) Usa Amazon GuardDuty e AWS Security Hub per proteggere più account
(AWS re:Invent 2020) Le migliori pratiche per la creazione di AWS CloudFormation (AWS
re:Invent 2019) Rilevamento delle minacce su AWS: un'introduzione ad Amazon GuardDuty
(AWS re:InForce 2019)
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.