Coletar registros de funções do AWS Lambda

Versão do analisador: 2.0

Compatível com:

Neste documento, explicamos como ingerir registros de funções 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 de plataforma, registros de extensão e saída de 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 do CloudWatch Logs 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 Console de Gerenciamento da AWS com permissões para gerenciar:
    • AWS Lambda (funções, configuração de geração de registros)
    • Registros do Amazon CloudWatch (grupos de registros, filtros de assinatura)
    • Amazon Data Firehose (streams de entrega)
    • Amazon S3 (buckets)
    • IAM da AWS (papéis, políticas, usuários)

Verificar o grupo de registros do CloudWatch Logs para 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 existe um grupo de registros para cada função do Lambda com registros que 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 um papel do IAM para o Amazon Data Firehose

O Amazon Data Firehose requer um papel do IAM para gravar registros no bucket do S3.

Criar a política do IAM

  1. No console da AWS, acesse IAM > Policies > Create policy.
  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 do papel, insira LambdaLogsFirehoseToS3Role.

  8. Clique em Criar papel.

Criar o stream 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 stream 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 descompactação.
    2. Não selecione Ativar 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 de 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, em seguida, selecione LambdaLogsFirehoseToS3Role.
  10. Clique em Criar stream do Firehose.

  11. Aguarde até que o Status do stream mude para Ativo.

Configurar um papel do IAM para os registros do CloudWatch

O CloudWatch Logs requer um papel do IAM para enviar dados de registro ao stream 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 e pelo ID da conta da AWS):

    {
        "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 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 do papel, 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 inscrição.
  4. Clique em Criar > Criar filtro de assinatura do Amazon Data Firehose.
  5. Informe os seguintes detalhes de configuração:
    • Destino: selecione o stream do Firehose lambda-logs-to-secops.
    • Conceder permissão: selecione o papel 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 do Lambda.
  6. Clique em Iniciar transmissão.

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 do usuário: 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 Fazer o download do 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 > Gerenciamento de dados > Feeds. Se você estiver em uma plataforma somente SIEM, acesse Configurações > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na página seguinte, clique em Configurar um único feed.
  4. Insira um Nome do feed exclusivo.
  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: inclua 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 que será aplicado aos eventos desse feed.
  9. Clique em Próxima e em Enviar.

Tabela de mapeamento de UDM

Campo de registro Mapeamento de 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: true → AUTHTYPE_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: true → USER_LOGIN, true → NETWORK_HTTP, true → NETWORK_CONNECTION, `true...
has_principal_user metadata.event_type Mapeado: true → USER_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: Informational → INFORMATIONAL
severity security_result.severity Mapeado: INFO → INFORMATIONAL
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

Confira o registro de alterações deste analisador

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