Coletar registros de funções do AWS Lambda

Compatível com:

Este documento explica como ingerir registros de função do AWS Lambda no Google Security Operations usando o Amazon S3.

O AWS Lambda é um serviço de computação sem servidor que executa seu código em resposta a eventos e gerencia automaticamente os recursos de computação subjacentes. O Lambda envia automaticamente todos os registros de função (registros da plataforma, de extensão e saída do aplicativo) para o Amazon CloudWatch Logs, criando um grupo de registros por função. Essa integração usa o Amazon Data Firehose para transmitir eventos de registro do Lambda dos registros do CloudWatch para um bucket do S3, que o Google SecOps ingere usando um feed do Amazon S3 V2.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Acesso privilegiado ao AWS Management Console com permissões para gerenciar:
    • AWS Lambda (funções, configuração de geração de registros)
    • Amazon CloudWatch Logs (grupos de registros, filtros de assinatura)
    • Amazon Data Firehose (fluxos de entrega)
    • Amazon S3 (buckets)
    • IAM da AWS (papéis, políticas, usuários)

Verifique o grupo de registros do CloudWatch Logs da sua função do Lambda

  • O AWS Lambda cria automaticamente um grupo de registros do CloudWatch Logs para cada função quando ela é invocada pela primeira vez. A convenção de nomenclatura padrão do grupo de registros é:

    /aws/lambda/<function-name>
    

Para verificar:

  1. No console da AWS, acesse CloudWatch > Registros > Grupos de registros.
  2. Pesquisar por /aws/lambda/.
  3. Confirme se há um grupo de registros para cada função do Lambda cujos registros você quer ingerir.

Configurar um bucket do AWS S3

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket.
  2. Salve o Nome e a Região do bucket para referência futura (por exemplo, lambda-logs-to-secops).

Configurar uma função do IAM para o Amazon Data Firehose

O Amazon Data Firehose exige uma função do IAM para gravar registros no bucket do S3.

Criar a política do IAM

  1. No console da AWS, acesse IAM > Políticas > Criar política.
  2. Selecione a guia JSON.
  3. Cole a seguinte política (substitua lambda-logs-to-secops pelo nome real do bucket):

    {
        "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. Clique em Próxima.

  5. No campo Nome da política, digite LambdaLogsFirehoseS3Policy.

  6. Clique em Criar política.

Criar o papel do IAM

  1. Acesse IAM > Papéis > Criar papel.
  2. Selecione Política de confiança personalizada.
  3. Cole a seguinte política de confiança:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "firehose.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. Clique em Próxima.

  5. Pesquise e selecione LambdaLogsFirehoseS3Policy.

  6. Clique em Próxima.

  7. No campo Nome da função, insira LambdaLogsFirehoseToS3Role.

  8. Clique em Criar papel.

Criar o fluxo do Amazon Data Firehose

  1. Abra o console do Kinesis em https://console.aws.amazon.com/kinesis.
  2. No painel de navegação, selecione Amazon Data Firehose.
  3. Clique em Criar stream do Firehose.
  4. Em Escolher origem e destino, forneça a seguinte configuração:
    • Origem: selecione PUT direto.
    • Destino: selecione Amazon S3.
  5. No campo Nome do fluxo do Firehose, insira lambda-logs-to-secops.
  6. Em Transformar registros, na seção Descompactar registros de origem do Amazon CloudWatch Logs:

    1. Selecione Ativar a descompactação.
    2. Não selecione Ativar a extração de mensagens.
  7. Em Configurações de destino:

    • Bucket do S3: selecione o bucket do S3 lambda-logs-to-secops.
    • Prefixo do bucket do S3 (opcional): insira lambda-logs/.
    • Prefixo de saída de erro do bucket do S3 (opcional): insira firehose-errors/.
  8. Em Dicas de buffer:

    • Tamanho do buffer: 5 MiB (padrão).
    • Intervalo do buffer: 300 segundos (padrão).
  9. Em Configurações avançadas:

    • Criptografia do lado do servidor: opcional. Ative se a criptografia for necessária.
    • Registro de erros: selecione Ativado (recomendado).
    • Permissões: selecione Escolher papel do IAM atual e LambdaLogsFirehoseToS3Role.
  10. Clique em Criar stream do Firehose.

  11. Aguarde até que o Status do fluxo seja Ativo.

Configurar uma função do IAM para o CloudWatch Logs

O CloudWatch Logs exige uma função do IAM para enviar dados de registros ao fluxo do Firehose.

Criar a política do IAM

  1. Acesse IAM > Políticas > Criar política.
  2. Selecione a guia JSON.
  3. Cole a seguinte política (substitua <region> e <account-id> pela região da AWS e pelo ID da conta):

    {
        "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. Clique em Próxima.

  5. No campo Nome da política, digite LambdaLogsCWLtoFirehosePolicy.

  6. Clique em Criar política.

Criar o papel do IAM

  1. Acesse IAM > Papéis > Criar papel.
  2. Selecione Política de confiança personalizada.
  3. Cole a seguinte política de confiança (substitua <region> pela sua região da AWS):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.<region>.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. Clique em Próxima.

  5. Pesquise e selecione LambdaLogsCWLtoFirehosePolicy.

  6. Clique em Próxima.

  7. No campo Nome da função, insira LambdaLogsCWLtoFirehoseRole.

  8. Clique em Criar papel.

Criar um filtro de assinatura do CloudWatch Logs

  1. No console da AWS, acesse CloudWatch > Registros > Grupos de registros.
  2. Selecione o grupo de registros /aws/lambda/<function-name>.
  3. Selecione a guia Filtros de assinatura.
  4. Clique em Criar > Criar filtro de assinatura do Amazon Data Firehose.
  5. Informe os seguintes detalhes de configuração:
    • Destino: selecione o fluxo do Firehose lambda-logs-to-secops.
    • Conceder permissão: selecione a função LambdaLogsCWLtoFirehoseRole.
    • Nome do filtro de assinatura: insira um nome descritivo, por exemplo, lambda-logs-to-secops-filter.
    • Formato do registro: selecione Outro.
    • Padrão de filtro de assinatura: deixe em branco para enviar todos os eventos de registro da função Lambda.
  6. Clique em Iniciar streaming.

Configurar um usuário do IAM para o Google SecOps

O Google SecOps precisa de um usuário do IAM com acesso ao bucket do S3 para ingerir os registros entregues.

  1. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  2. Selecione o usuário criado.
  3. Selecione a guia Credenciais de segurança.
  4. Clique em Criar chave de acesso na seção Chaves de acesso.
  5. Selecione Serviço de terceiros como Caso de uso.
  6. Clique em Próxima.
    • Opcional: adicione uma tag de descrição.
  7. Clique em Criar chave de acesso.
  8. Clique em Baixar arquivo .csv para salvar a Chave de acesso e a Chave de acesso secreta para referência futura.
  9. Clique em Concluído.
  10. Selecione a guia Permissões.
  11. Clique em Adicionar permissões na seção Políticas de permissões.
  12. Selecione Adicionar permissões.
  13. Selecione Anexar políticas diretamente.
  14. Pesquise a política AmazonS3FullAccess.
  15. Selecione a política.
  16. Clique em Próxima.
  17. Clique em Adicionar permissões

Configurar um feed no Google SecOps para ingerir registros de funções do AWS Lambda

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. Insira um nome exclusivo para o Nome do feed.
  5. Selecione Amazon S3 V2 como o Tipo de origem.
  6. Selecione Função do AWS Lambda como o Tipo de registro.
  7. Clique em Próxima e em Enviar.
  8. Especifique valores para os seguintes campos:
    • URI do S3: s3://lambda-logs-to-secops/lambda-logs/
    • Opção de exclusão da fonte: selecione a opção de exclusão de acordo com sua preferência.
    • Idade máxima do arquivo: inclui arquivos modificados nos últimos dias. O padrão é 180 dias.
    • ID da chave de acesso: chave de acesso do usuário com acesso ao bucket do S3
    • Chave de acesso secreta: chave secreta do usuário com acesso ao bucket do S3
    • Namespace do recurso: o namespace do recurso
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed
  9. Clique em Próxima e em Enviar.

Tabela de mapeamento do UDM

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

Registro de alterações

Ver o registro de alterações deste analisador

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.