Raccogli i log delle funzioni AWS Lambda

Supportato in:

Questo documento spiega come importare i log delle funzioni AWS Lambda in Google Security Operations utilizzando Amazon S3.

AWS Lambda è un servizio di calcolo serverless che esegue il tuo codice in risposta agli eventi e gestisce automaticamente le risorse di calcolo sottostanti. Lambda invia automaticamente tutti i log delle funzioni (log della piattaforma, log delle estensioni e output dell'applicazione) ad Amazon CloudWatch Logs, creando un gruppo di log per funzione. Questa integrazione utilizza Amazon Data Firehose per trasmettere in streaming gli eventi di log Lambda da CloudWatch Logs a un bucket S3, che Google SecOps acquisisce utilizzando un feed Amazon S3 V2.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Accesso privilegiato alla Console di gestione AWS con autorizzazioni per gestire:
    • AWS Lambda (funzioni, configurazione del logging)
    • Amazon CloudWatch Logs (gruppi di log, filtri di sottoscrizione)
    • Amazon Data Firehose (flussi di distribuzione)
    • Amazon S3 (bucket)
    • AWS IAM (ruoli, criteri, utenti)

Verifica il gruppo di log CloudWatch Logs per la tua funzione Lambda

  • AWS Lambda crea automaticamente un gruppo di log CloudWatch Logs per ogni funzione quando viene richiamata per la prima volta. La convenzione di denominazione predefinita per i gruppi di log è:

    /aws/lambda/<function-name>
    

Per eseguire la verifica:

  1. Nella console AWS, vai a CloudWatch > Logs > Gruppi di log.
  2. Cerca /aws/lambda/.
  3. Verifica che esista un gruppo di log per ogni funzione Lambda di cui vuoi importare i log.

Configurare un bucket AWS S3

  1. Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket.
  2. Salva il nome e la regione del bucket per riferimento futuro (ad esempio, lambda-logs-to-secops).

Configura un ruolo IAM per Amazon Data Firehose

Amazon Data Firehose richiede un ruolo IAM per scrivere i log nel bucket S3.

Crea il criterio IAM

  1. Nella console AWS, vai a IAM > Policy > Crea policy.
  2. Seleziona la scheda JSON.
  3. Incolla la seguente policy (sostituisci lambda-logs-to-secops con il nome del bucket effettivo):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "S3Delivery",
                "Effect": "Allow",
                "Action": [
                    "s3:AbortMultipartUpload",
                    "s3:GetBucketLocation",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:ListBucketMultipartUploads",
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::lambda-logs-to-secops",
                    "arn:aws:s3:::lambda-logs-to-secops/*"
                ]
            },
            {
                "Sid": "CloudWatchLogging",
                "Effect": "Allow",
                "Action": [
                    "logs:PutLogEvents"
                ],
                "Resource": "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/lambda-logs-to-secops:log-stream:*"
            }
        ]
    }
    
  4. Fai clic su Avanti.

  5. Nel campo Nome policy, inserisci LambdaLogsFirehoseS3Policy.

  6. Fai clic su Crea policy.

Crea il ruolo IAM

  1. Vai a IAM > Ruoli > Crea ruolo.
  2. Seleziona Norme di attendibilità personalizzate.
  3. Incolla la seguente policy di attendibilità:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "firehose.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. Fai clic su Avanti.

  5. Cerca e seleziona LambdaLogsFirehoseS3Policy.

  6. Fai clic su Avanti.

  7. Nel campo Nome ruolo, inserisci LambdaLogsFirehoseToS3Role.

  8. Fai clic su Crea ruolo.

Crea lo stream Amazon Data Firehose

  1. Apri la console Kinesis all'indirizzo https://console.aws.amazon.com/kinesis.
  2. Nel riquadro di navigazione, seleziona Amazon Data Firehose.
  3. Fai clic su Crea stream Firehose.
  4. In Scegli origine e destinazione, fornisci la seguente configurazione:
    • Origine: seleziona PUT diretto.
    • Destinazione: seleziona Amazon S3.
  5. Nel campo Nome stream Firehose, inserisci lambda-logs-to-secops.
  6. Nella sezione Decompress source records from Amazon CloudWatch Logs (Decomprimi i record di origine da Amazon CloudWatch Logs) della sezione Transform records (Trasforma record):

    1. Seleziona Attiva decompressione.
    2. Non selezionare Attiva l'estrazione dei messaggi.
  7. Nella sezione Impostazioni destinazione:

    • Bucket S3: seleziona il bucket S3 lambda-logs-to-secops.
    • Prefisso bucket S3 (facoltativo): inserisci lambda-logs/.
    • Prefisso output errori bucket S3 (facoltativo): inserisci firehose-errors/.
  8. Nella sezione Suggerimenti per il buffer:

    • Dimensione del buffer: 5 MiB (valore predefinito).
    • Intervallo di buffer: 300 secondi (impostazione predefinita).
  9. Nella sezione Impostazioni avanzate:

    • Crittografia lato server: facoltativa. Attiva se è necessaria la crittografia.
    • Registrazione degli errori: seleziona Attivata (opzione consigliata).
    • Autorizzazioni: seleziona Scegli ruolo IAM esistente, quindi seleziona LambdaLogsFirehoseToS3Role.
  10. Fai clic su Crea stream Firehose.

  11. Attendi che lo Stato dello stream mostri Attivo.

Configura un ruolo IAM per CloudWatch Logs

CloudWatch Logs richiede un ruolo IAM per inviare i dati di log al flusso Firehose.

Crea il criterio IAM

  1. Vai a IAM > Criteri > Crea criterio.
  2. Seleziona la scheda JSON.
  3. Incolla il seguente criterio (sostituisci <region> e <account-id> con la tua regione AWS e il tuo ID account):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "firehose:PutRecord",
                    "firehose:PutRecordBatch"
                ],
                "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/lambda-logs-to-secops"
            }
        ]
    }
    
  4. Fai clic su Avanti.

  5. Nel campo Nome policy, inserisci LambdaLogsCWLtoFirehosePolicy.

  6. Fai clic su Crea policy.

Crea il ruolo IAM

  1. Vai a IAM > Ruoli > Crea ruolo.
  2. Seleziona Norme di attendibilità personalizzate.
  3. Incolla la seguente policy di attendibilità (sostituisci <region> con la tua regione AWS):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.<region>.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. Fai clic su Avanti.

  5. Cerca e seleziona LambdaLogsCWLtoFirehosePolicy.

  6. Fai clic su Avanti.

  7. Nel campo Nome ruolo, inserisci LambdaLogsCWLtoFirehoseRole.

  8. Fai clic su Crea ruolo.

Crea un filtro di sottoscrizione CloudWatch Logs

  1. Nella console AWS, vai a CloudWatch > Logs > Gruppi di log.
  2. Seleziona il gruppo di log /aws/lambda/<function-name>.
  3. Seleziona la scheda Filtri abbonamenti.
  4. Fai clic su Crea > Crea filtro di abbonamento Amazon Data Firehose.
  5. Fornisci i seguenti dettagli di configurazione:
    • Destinazione: seleziona lo stream Firehose lambda-logs-to-secops.
    • Concedi autorizzazione: seleziona il ruolo LambdaLogsCWLtoFirehoseRole.
    • Nome filtro iscrizione: inserisci un nome descrittivo (ad esempio, lambda-logs-to-secops-filter).
    • Formato log: seleziona Altro.
    • Pattern di filtro della sottoscrizione: lascia vuoto per inviare tutti gli eventi di log della funzione Lambda.
  6. Fai clic su Avvia streaming.

Configurare un utente IAM per Google SecOps

Google SecOps ha bisogno di un utente IAM con accesso al bucket S3 per importare i log forniti.

  1. Crea un utente seguendo questa guida utente: Creazione di un utente IAM.
  2. Seleziona l'utente creato.
  3. Seleziona la scheda Credenziali di sicurezza.
  4. Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
  5. Seleziona Servizio di terze parti come Caso d'uso.
  6. Fai clic su Avanti.
    • (Facoltativo) Aggiungi il tag della descrizione.
  7. Fai clic su Crea chiave di accesso.
  8. Fai clic su Scarica file .csv per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
  9. Fai clic su Fine.
  10. Seleziona la scheda Autorizzazioni.
  11. Fai clic su Aggiungi autorizzazioni nella sezione Criteri per le autorizzazioni.
  12. Seleziona Aggiungi autorizzazioni.
  13. Seleziona Allega direttamente i criteri.
  14. Cerca il criterio AmazonS3FullAccess.
  15. Seleziona la policy.
  16. Fai clic su Avanti.
  17. Fai clic su Aggiungi autorizzazioni.

Configura un feed in Google SecOps per importare i log delle funzioni AWS Lambda

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Inserisci un nome univoco per il nome del feed.
  5. Seleziona Amazon S3 V2 come Tipo di origine.
  6. Seleziona Funzione AWS Lambda come Tipo di log.
  7. Fai clic su Avanti e poi su Invia.
  8. Specifica i valori per i seguenti campi:
    • URI S3: s3://lambda-logs-to-secops/lambda-logs/
    • Opzione di eliminazione della fonte: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • Età massima file: includi i file modificati nell'ultimo numero di giorni (il valore predefinito è 180 giorni)
    • ID chiave di accesso: chiave di accesso utente con accesso al bucket S3
    • Chiave di accesso segreta: chiave segreta dell'utente con accesso al bucket S3
    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed
  9. Fai clic su Avanti e poi su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
Activity_id_label additional.fields Unita
Arrays_label additional.fields Unita
Name_label additional.fields Unita
Type_1_label additional.fields Unita
Type_id_label additional.fields Unita
Type_label additional.fields Unita
Uid_label additional.fields Unita
Uid_label_1 additional.fields Unita
Value_label additional.fields Unita
__type_label additional.fields Unita
attempts_label additional.fields Unita
class_name_label additional.fields Unita
contentType_label additional.fields Unita
env_label additional.fields Unita
extendedRequestId_label additional.fields Unita
feature_name_label additional.fields Unita
line_number_label additional.fields Unita
logType_label additional.fields Unita
product_name_label additional.fields Unita
requestid_label additional.fields Unita
sourceAccount_label additional.fields Unita
stack_label additional.fields Unita
totalRetryDelay_label additional.fields Unita
vendor_name_label additional.fields Unita
version_label additional.fields Unita
has_principal extensions.auth.type Mappato: trueAUTHTYPE_UNSPECIFIED
description metadata.description Mappato direttamente
file_desc metadata.description Mappato direttamente
Time metadata.event_timestamp Analizzato come UNIX
time metadata.event_timestamp Analizzato come yyyy-MM-ddTHH:mm:ss.SSSZ
has_principal metadata.event_type Mappato: trueUSER_LOGIN, trueNETWORK_HTTP, trueNETWORK_CONNECTION, `true...
has_principal_user metadata.event_type Mappato: trueUSER_RESOURCE_ACCESS
Api.Operation metadata.product_event_type Mappato direttamente
name metadata.product_event_type Mappato direttamente
Api.Request.Uid metadata.product_log_id Mappato direttamente
id metadata.product_log_id Mappato direttamente
meta_data.requestId metadata.product_log_id Mappato direttamente
Metadata.Version metadata.product_version Mappato direttamente
version metadata.product_version Mappato direttamente
meta_data.httpStatusCode network.http.response_code Mappato direttamente
Http_request.User_agent network.http.user_agent Mappato direttamente
Actor.Invoked_by principal.administrative_domain Mappato direttamente
Src_endpoint.Domain principal.asset.hostname Mappato direttamente
Src_endpoint.Domain principal.hostname Mappato direttamente
Cloud.Region principal.resource.attribute.cloud.availability_zone Mappato direttamente
Actor.User.Name principal.user.userid Mappato direttamente
Status security_result.action_details Mappato direttamente
Category_name security_result.category_details Unita
error security_result.description Mappato direttamente
errorMessage security_result.description Mappato direttamente
Metadata_uid_label security_result.detection_fields Unita
category_uid_label security_result.detection_fields Unita
class_uid_label security_result.detection_fields Unita
errorType_label security_result.detection_fields Unita
event_code_label security_result.detection_fields Unita
fault_label security_result.detection_fields Unita
functionName_label security_result.detection_fields Unita
severity_id_label security_result.detection_fields Unita
sourceArn_label security_result.detection_fields Unita
type_name_label security_result.detection_fields Unita
type_uid_label security_result.detection_fields Unita
user_type_label security_result.detection_fields Unita
Severity security_result.severity Mappato: InformationalINFORMATIONAL
severity security_result.severity Mappato: INFOINFORMATIONAL
msg security_result.summary Mappato direttamente
Api.Service.Name target.application Mappato direttamente
service target.application Mappato direttamente
size target.file.size Mappato direttamente
filename target.process.file.full_path Mappato direttamente
Activity_name target.resource.name Mappato direttamente
targetVar target.resource.name Mappato direttamente
N/D extensions.auth.type Costante: AUTHTYPE_UNSPECIFIED
N/D metadata.event_type Costante: USER_UNCATEGORIZED
N/D metadata.product_name Costante: AWS_Lambda_Function
N/D metadata.vendor_name Costante: AWS_Lambda_Function
N/D principal.resource.attribute.cloud.environment Costante: AMAZON_WEB_SERVICES
N/D security_result.severity Costante: INFORMATIONAL

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.